@better-seo/react
v0.0.2
Published
React SPA integration for @better-seo/core: map SEO documents to react-helmet-async (toHelmetProps, BetterSEOHelmet), request-scoped SEOProvider + useSEO, and register the 'react' adapter for seoForFramework. Peers: react, react-dom, react-helmet-async.
Downloads
211
Readme
@better-seo/react
React + Vite / CRA-style SPAs: map SEO to react-helmet-async (toHelmetProps, <BetterSEOHelmet />), optional SEOProvider / useSEO, and register adapter react for seoForFramework.
Peers: react ≥ 18.2, react-dom, react-helmet-async ≥ 2 (v 3 tested).
Docs: Recipe · Monorepo README · CONTRIBUTING (contributor setup)
Install
npm install @better-seo/core @better-seo/react react-helmet-asyncWrap your app with HelmetProvider (from react-helmet-async), then either:
import { createSEO } from "@better-seo/core"
import { BetterSEOHelmet } from "@better-seo/react"
const seo = createSEO({ title: "Page", description: "…" })
;<BetterSEOHelmet seo={seo} />or build props yourself:
import { toHelmetProps } from "@better-seo/react"
;<Helmet {...toHelmetProps(seo)} />useSEO and SEOProvider
For client subtrees that need the same SEO document (e.g. JSON-LD components):
import { SEOProvider, useSEO } from "@better-seo/react"
;<SEOProvider seo={seo}>
<MyPage />
</SEOProvider>useSEO() throws SEOError (USE_SEO_NO_PROVIDER) outside SEOProvider.useSEO() in @better-seo/core remains a stub — import the hook from @better-seo/react.
Adapter id react
import "@better-seo/react"
import { seoForFramework } from "@better-seo/core"
const helmetProps = seoForFramework("react", { title: "Hi" })Scripts (monorepo)
npm run build
npm run test
npm run test:coverage
npm run lint
npm run typecheckLicense
MIT — see LICENSE.
