# Next SEO - Pages Router Support
This directory contains SEO generation functions for Next.js Pages Router applications.
> **Note:** These functions are specifically for Pages Router. For App Router applications, use the main next-seo package exports instead.
## Installation
```bash
npm install next-seo
# or
yarn add next-seo
# or
pnpm add next-seo
```
## Usage
Import from `next-seo/pages` instead of `next-seo`:
```tsx
import { generateNextSeo, generateDefaultSeo } from "next-seo/pages";
```
> **Important:** In Pages Router, you need to wrap the generated SEO tags with Next.js's `
` component to ensure the meta tags are properly rendered in the document head.
### generateNextSeo Function
Add SEO meta tags to individual pages:
```tsx
// pages/about.tsx
import Head from "next/head";
import { generateNextSeo } from "next-seo/pages";
export default function AboutPage() {
return (
<>
{generateNextSeo({
title: "About Us",
description: "Learn more about our company",
canonical: "https://example.com/about",
openGraph: {
url: "https://example.com/about",
title: "About Us",
description: "Learn more about our company",
images: [
{
url: "https://example.com/og-image.jpg",
width: 800,
height: 600,
alt: "About Us",
},
],
},
})}
About Us
{/* Page content */}
>
);
}
```
### generateDefaultSeo Function
Set global SEO defaults in your `_app.tsx`:
```tsx
// pages/_app.tsx
import type { AppProps } from "next/app";
import Head from "next/head";
import { generateDefaultSeo } from "next-seo/pages";
const DEFAULT_SEO = {
titleTemplate: "MySite | %s",
defaultTitle: "MySite",
description: "Welcome to MySite",
openGraph: {
type: "website",
locale: "en_US",
url: "https://example.com/",
siteName: "MySite",
},
twitter: {
handle: "@mysite",
site: "@mysite",
cardType: "summary_large_image",
},
};
export default function MyApp({ Component, pageProps }: AppProps) {
return (
<>
{generateDefaultSeo(DEFAULT_SEO)}
>
);
}
```
## Available Props
### Common Props
- `title` - Page title
- `titleTemplate` - Title template for all pages (use `%s` for title placeholder)
- `defaultTitle` - Default title when no title is set
- `description` - Page description
- `canonical` - Canonical URL
- `themeColor` - Theme color meta tag
- `noindex` - Set to `true` to noindex the page
- `nofollow` - Set to `true` to nofollow the page
- `robotsProps` - Additional robots meta properties
### OpenGraph Props
```tsx
openGraph={{
type: 'website',
url: 'https://example.com',
title: 'Open Graph Title',
description: 'Open Graph Description',
images: [{
url: 'https://example.com/og.jpg',
width: 800,
height: 600,
alt: 'Og Image Alt',
}],
siteName: 'SiteName',
locale: 'en_US',
}}
```
### Twitter Props
```tsx
twitter={{
handle: '@handle',
site: '@site',
cardType: 'summary_large_image',
}}
```
### Additional Meta Tags
```tsx
additionalMetaTags={[
{
property: 'dc:creator',
content: 'Jane Doe'
},
{
name: 'application-name',
content: 'NextSeo'
}
]}
```
### Additional Link Tags
```tsx
additionalLinkTags={[
{
rel: 'icon',
href: 'https://example.com/favicon.ico',
},
{
rel: 'apple-touch-icon',
href: 'https://example.com/apple-touch-icon.png',
sizes: '76x76'
}
]}
```
## Migration from Legacy Import
If you're using the old import path or component-based approach, update your code:
```tsx
// Old (deprecated components)
import { NextSeo, DefaultSeo } from "next-seo";
// Usage:
// New (Pages Router functions)
import { generateNextSeo, generateDefaultSeo } from "next-seo/pages";
// Usage: {generateNextSeo({ title: "..." })}
```
## TypeScript Support
All types are exported from `next-seo/pages`:
```tsx
import type { NextSeoProps, DefaultSeoProps } from "next-seo/pages";
```
## More Information
For complete documentation and advanced usage, please refer to the main [next-seo documentation](https://github.com/garmeeh/next-seo).