feat(seo): migrate to build-time prerendering with vite-react-ssg
Fixes SeoHead (title/canonical/hreflang/JSON-LD) to render during SSR via vite-react-ssg's Head component instead of a client-only useEffect, so crawlers see real tags without executing JS. Also fixes an SSR crash in useTheme (localStorage access with no window during server render) and removes now-duplicated static meta tags from index.html.
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
import { useEffect } from 'react';
|
||||
import { Outlet } from 'react-router-dom';
|
||||
import i18n from '../i18n.js';
|
||||
import { Header } from './Header.jsx';
|
||||
import { Footer } from './Footer.jsx';
|
||||
import { useTheme } from '../hooks/useTheme.js';
|
||||
import '../styles/layout.css';
|
||||
|
||||
export function LangLayout({ lang }) {
|
||||
const { theme, toggleTheme } = useTheme();
|
||||
|
||||
useEffect(() => {
|
||||
if (i18n.language !== lang) {
|
||||
i18n.changeLanguage(lang);
|
||||
}
|
||||
}, [lang]);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Header theme={theme} onToggleTheme={toggleTheme} />
|
||||
<main>
|
||||
<Outlet />
|
||||
</main>
|
||||
<Footer />
|
||||
</>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user