Open5
Next.js(app router)のSEOまわり
Next.jsのapp routerでのSEOまわりの設定について、まとめてみる
まずは公式
基本の形はこれ↓でtitleとdescriptionを設定できる
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: '...',
description: '...',
}
export default function Page() {}
日本語のWebサイトを想定した一例↓
const siteName= 'サイト名';
const description = 'サイトの説明';
const url = 'https://本番のドメイン';
export const metadata = {
title: {
default: siteName,
/** `next-seo`の`titleTemplate`に相当する機能 */
template: `%s - ${siteName}`,
},
description,
openGraph: {
title: siteName,
description,
url,
siteName,
locale: 'ja_JP',
type: 'website',
},
twitter: {
card: 'summary_large_image',
title: siteName,
description,
site: '@サイト用アカウントのTwitterID',
creator: '@作者のTwitterID',
},
verification: {
google: 'サーチコンソールのやつ',
},
alternates: {
canonical: url,
},
};
// 以下略
関連用語
用語 | 説明 |
---|---|
Metadata API | Next.js が提供する API で、アプリケーションのメタデータを定義するために使用します。 |
Config-based Metadata | layout.js ファイルや page.js ファイルで静的なメタデータオブジェクトをエクスポートするか、動的な generateMetadata 関数をエクスポートする方法です。 |
File-based Metadata | ルートセグメントに静的または動的に生成された特別なファイルを追加する方法です。 |
ImageResponse | Next.js のコンストラクタで、JSX と CSS を使用して動的なイメージを生成するために使用します。OGP やアイキャッチ画像に最適。 |
Static Metadata | layout.js ファイルや静的な page.js ファイルから Metadata オブジェクトをエクスポートします。 |
Dynamic Metadata | generateMetadata 関数を使用して、動的な値が必要なメタデータを取得します。 |
動的に設定
基本形
import { Metadata } from 'next'
// 静的に設定↓
export const metadata: Metadata = {
title: '...',
}
// 動的に設定↓
export async function generateMetadata({ params }) {
return {
title: '...',
}
}
設定例↓
export const generateMetadata = async ({ params }: { params: { id: string } }): Promise<Metadata> => {
const res = await fetch(`https://jsonplaceholder.typicode.com/posts/${params.id}`);
const data = (await res.json()) as Post;
return {
title: `${params.id}: ${data.title}`,
description: `ディスクリプション:${params.id} ${data.body}`,
};
}
- URLからidの値を取得
- idの値でフェッチ(API叩く)
- 取ってきたデータを設定
TODO:
- サイトマップ
- OG画像
- 動的にOG画像を生成
- ファビコン