A TypeScript React library for managing SEO metadata on a per-page basis. This library provides components to easily set and manage SEO-related tags in your React application.
npm install simple-react-seo
# or
yarn add simple-react-seo
✅ TypeScript support
✅ Per-page SEO management
✅ Support for Open Graph and Twitter card metadata
✅ JSON-LD structured data support
✅ SEO context provider
✅ Customizable meta tags
✅ Canonical URL support
✅ Robots directives (noindex, nofollow)
Wrap your application with the SEOProvider
component and add the SEOHead
component to your document head:
// _app.tsx (Next.js) or App.tsx (React)
import React from "react";
import { SEOProvider, SEOHead } from "simple-react-seo";
const defaultSEO = {
title: "My Website",
description: "A website built with Simple React SEO",
keywords: "my website, website",
openGraph: {
type: "website",
siteName: "My Website",
},
twitter: {
cardType: "summary_large_image",
handle: "@myhandle",
site: "@mysite",
},
};
function MyApp({ Component, pageProps }) {
return (
<SEOProvider defaultSEO={defaultSEO}>
{/* Add SEOHead in your document head */}
<SEOHead />
<Component {...pageProps} />
</SEOProvider>
);
}
export default MyApp;
For Next.js applications, use it in your _app.tsx
and _document.tsx
files:
// _document.tsx
import Document, { Html, Head, Main, NextScript } from "next/document";
import { SEOHead } from "simple-react-seo";
class MyDocument extends Document {
render() {
return (
<Html>
<Head>
<SEOHead />
</Head>
<body>
<Main />
<NextScript />
</body>
</Html>
);
}
}
export default MyDocument;
Use the PageSEO
component in your page components to set page-specific SEO:
// pages/about.tsx
import React from "react";
import { PageSEO } from "simple-react-seo";
const AboutPage = () => {
return (
<>
<PageSEO
seo={{
title: "About Us | My Website",
description: "Learn more about our company",
openGraph: {
title: "About Our Company",
image: {
url: "https://example.com/about-image.jpg",
alt: "About Us",
width: 1200,
height: 630,
},
},
}}
/>
<div>
<h1>About Us</h1>
<p>This is the about page content.</p>
</div>
</>
);
};
export default AboutPage;
// pages/product.tsx
import React from "react";
import { PageSEO } from "simple-react-seo";
const ProductPage = ({ product }) => {
const productJsonLd = {
"@context": "https://schema.org",
"@type": "Product",
name: product.name,
image: product.image,
description: product.description,
sku: product.sku,
offers: {
"@type": "Offer",
priceCurrency: "USD",
price: product.price,
availability: "https://schema.org/InStock",
},
};
return (
<>
<PageSEO
seo={{
title: `${product.name} | My Store`,
description: product.description,
jsonLd: productJsonLd,
}}
/>
<div>
<h1>{product.name}</h1>
<p>{product.description}</p>
<p>${product.price}</p>
</div>
</>
);
};
export default ProductPage;
You can also use the useSEO
hook to access or update SEO data programmatically:
import React, { useEffect } from "react";
import { useSEO } from "simple-react-seo";
const DynamicPage = ({ pageData }) => {
const { updateCurrentSEO } = useSEO();
useEffect(() => {
// Update SEO when pageData changes
updateCurrentSEO({
title: pageData.title,
description: pageData.description,
canonical: pageData.url,
});
// Clean up is handled automatically when component unmounts
}, [pageData, updateCurrentSEO]);
return (
<div>
<h1>{pageData.title}</h1>
<div dangerouslySetInnerHTML={{ __html: pageData.content }} />
</div>
);
};
export default DynamicPage;
The provider component that wraps your application and provides SEO context.
Props:
defaultSEO
(required): Default SEO metadata for all pageschildren
(required): Child components
Component that renders SEO tags in the document head.
Props:
additionalElements
(optional): Additional React elements to insert in the head
Component to set page-specific SEO metadata.
Props:
seo
(required): SEO metadata for the pagemerge
(optional, default:true
): Whether to merge with default SEO or replace it entirely
Hook to access and update SEO data within components.
Returns:
defaultSEO
: Default SEO metadatacurrentSEO
: Current page's SEO metadataupdateCurrentSEO(seo)
: Function to update current SEOclearCurrentSEO()
: Function to clear current SEO
The library exports TypeScript types for all properties:
import {
SEOMetadata,
OpenGraphMetadata,
TwitterMetadata,
MetaTag,
} from "simple-react-seo";
// Example usage
const mySEO: SEOMetadata = {
title: "Page Title",
// ...other properties
};
MIT