Next.js SEO utilities: metadata generators, JSON-LD schemas, and Open Graph helpers
npm install @philiprehberger/next-seo-utilsNext.js SEO utilities: metadata generators, JSON-LD schemas, and Open Graph helpers
npm install @philiprehberger/next-seo-utils
import { createMetadataGenerator } from '@philiprehberger/next-seo-utils';
const seo = createMetadataGenerator({
name: 'My Site',
url: 'https://example.com',
description: 'My awesome site',
twitterHandle: '@myhandle',
defaultImage: 'https://example.com/og.jpg',
});
// In a Next.js page:
export const metadata = seo.generatePageMetadata({
title: 'About',
description: 'About us page',
path: '/about',
});
// Root layout:
export const metadata = seo.generateRootMetadata();
import { organizationJsonLd, faqJsonLd, breadcrumbJsonLd, jsonLdScript } from '@philiprehberger/next-seo-utils';
const org = organizationJsonLd({
name: 'My Company',
url: 'https://example.com',
logo: 'https://example.com/logo.png',
});
const faq = faqJsonLd([
{ question: 'What do you do?', answer: 'We build software.' },
]);
const breadcrumbs = breadcrumbJsonLd([
{ name: 'Home', url: 'https://example.com' },
{ name: 'About', url: 'https://example.com/about' },
]);
// Render as script tag
const scriptTag = jsonLdScript(org);
| Function | Signature | Description |
|---|---|---|
createMetadataGenerator | (site: SiteConfig) => { generatePageMetadata, generateArticleMetadata, generateRootMetadata } | Create a metadata generator bound to your site config. |
| Method | Signature | Description |
|---|---|---|
generatePageMetadata | (options: PageMetadataOptions) => Metadata | Generate metadata for a single page. |
generateArticleMetadata | (options: ArticleMetadataOptions) => Metadata | Generate article-specific metadata with Open Graph article fields. |
generateRootMetadata | (overrides?: Partial<Metadata>) => Metadata | Generate root layout metadata with title template. |
| Function | Signature | Description |
|---|---|---|
organizationJsonLd | (org: OrganizationConfig) => JsonLdBase | Organization structured data. |
websiteJsonLd | (site: SiteConfig) => JsonLdBase | WebSite structured data. |
breadcrumbJsonLd | (items: BreadcrumbItem[]) => JsonLdBase | Breadcrumb navigation structured data. |
articleJsonLd | (options) => JsonLdBase | Article structured data. |
faqJsonLd | (items: FAQItem[]) => JsonLdBase | FAQ page structured data. |
serviceJsonLd | (service: ServiceItem, provider) => JsonLdBase | Service structured data. |
localBusinessJsonLd | (options) => JsonLdBase | Local business structured data. |
reviewAggregateJsonLd | (itemName: string, reviews: ReviewItem[], itemType?: string) => JsonLdBase | Aggregate review structured data. |
jsonLdScript | (data: JsonLdBase | JsonLdBase[]) => string | Wrap JSON-LD data in a <script> tag string. |
npm install
npm run build
npm test
If you find this project useful: