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:
2026-08-02 10:30:26 +02:00
parent 8dcc5f3405
commit 3b53d82b3d
18 changed files with 2137 additions and 271 deletions
+27
View File
@@ -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 />
</>
);
}