Next.js/SEO/Lesson 14
Metadata API — generateMetadata で動的 SEO + OG カード
30分·theory
このチャプター
1/2
TypeScript
Metadata API — generateMetadata で動的 SEO + OG カード
💡 なぜ学ぶべきか? — SEO とソーシャルシェアの差を生む部分
🎯
検索結果のタイトル・説明、KakaoTalkやTwitterのシェアカードに表示される画像・テキスト — これらはすべて `` 内のmetaタグによって決まります。
💼
Pages Routerの `` コンポーネントは、App Routerの `metadata` エクスポートとして標準化されました。
⚡
動的ページ(ブログ記事など)では、`generateMetadata({ params })` を使うことでページごとに異なるメタデータを自動生成できます。
🔗
ファイルコンベンション — `app/icon.tsx`・`app/opengraph-image.tsx`・`app/twitter-image.tsx` を配置するだけで、自動的にメタデータに紐づけられます。
📈
これを知らないと、すべてのページのシェアカードが同じになってしまいます — 「アマチュア」という印象を与えかねません。
🏢 실무에서는
ブログ記事100本 — 各記事のタイトル・要約・アイキャッチ画像がシェアカードに個別に表示される必要があります。`generateMetadata` の関数一つで100ページ分を自動処理できます。また、検索エンジンが記事タイトルを正確に取得できるため、SEOランキングに直結します。
metadata export · generateMetadata · ファイルコンベンション
1. 静的 metadata export
各ページ・レイアウトの先頭で export する。自動的に <head> に注入される。
2. generateMetadata — 動的ページ向け
同じ fetch がページ本文でも呼ばれる場合は自動的に重複排除される — 余分なネットワークコストなし。
3. layout.tsx の title.template — 全ページに自動サフィックス
4. ファイルコンベンション — メタデータの自動紐づけ
opengraph-image.tsx は ImageResponse で動的PNG生成が可能。codemaster40 もすでに [src/app/opengraph-image.tsx](src/app/opengraph-image.tsx) で動的生成を行っている。
5. よく使うフィールドまとめ
💡 💡 Metadata 実践 5 選
1. metadataBase をルートレイアウトに置く
OG 画像などの相対パスが絶対パスに自動変換される。
2. title.template で一貫したブランディング
ルートに template: '%s | コードマスター' を設定 → 子ページは 'TypeScript 基礎' とだけ書けばよい。
3. generateMetadata の fetch はページの fetch と自動重複排除
同じ URL なら一度だけ呼ばれる。余分なネットワークコストなし。
4. ファイルコンベンション 4 種を活用 — コード 0 行app/icon.ico・apple-icon.png・opengraph-image.png・twitter-image.png を置くだけで自動的にメタデータが紐づく。
5. OG 画像は 1200×630、Twitter カードは summary_large_image
標準サイズ。検証: https://www.opengraph.xyz/、https://cards-dev.twitter.com/validator
⚡ 実際に試してみよう — generateMetadata 結果シミュレーション
各ページの metadata がどのようにマージされて最終的な head になるかをシミュレーションする。
✏️ JS 코드
📟 コンソール出力
▶ 実行ボタンを押してください
⚠️ ブラウザのサンドボックスで実行 — console.log()のみ対応、alert/fetchは不可
確認クイズ
App Router のルートレイアウトに `title.template = '%s | コードマスター'` があり、子ページが `title: 'Promise<T>'` を設定している場合、実際にレンダリングされる `<title>` は何か?
先に読むとよい概念: next/headers — cookies / headers / redirect