ARTICLE AD BOX
Problem
I'm building a React app with Vite (not Next.js) and I need to manage SEO meta tags properly across all pages. I need:
A site-wide title template like %s | My Site applied automatically on every page
Per-page overrides for title, description, Open Graph, and Twitter Card
Robots directives like noindex for staging, and advanced ones like maxSnippet, maxImagePreview
Canonical URLs and hreflang for a multi-language site
Breadcrumb navigation with JSON-LD structured data for Google rich results
What I'm doing now
// ❌ Ad-hoc, inconsistent, no site-wide defaults function BlogPage({ post }) { return ( <> <title>{post.title} | My Site</title> <meta name="description" content={post.excerpt} /> <meta property="og:image" content={post.coverImage} /> <meta name="robots" content="index, follow" /> </> ); }Problems with this approach
I have to manually append | My Site to every page title — if I rename the site, I update 50+ files.
No site-wide defaults — if I forget og:image on a page, it silently renders without one.
Raw strings for robots — typos like "noInDex" don't throw errors.
No JSON-LD breadcrumbs — I'm only rendering a visual <nav>, Google doesn't get structured data.
react-helmet is unmaintained, and next-seo only works with Next.js.
