メタデータの追加とOG画像の作成方法
メタデータAPIを使用すると、SEOとウェブ共有性を向上させるためにアプリケーションのメタデータを定義できます。これには以下が含まれます:
- 静的な
metadata
オブジェクト - 動的な
generateMetadata
関数 - 静的なまたは動的に生成されたファビコンとOG画像を追加するために使用できる特別なファイル規約
上記のすべてのオプションを使用すると、Next.jsは自動的にページに関連する<head>
タグを生成します。これはブラウザの開発者ツールで確認できます。
デフォルトフィールド
ルートがメタデータを定義していなくても、常に追加される2つのデフォルトのmeta
タグがあります:
- meta charsetタグはウェブサイトの文字エンコーディングを設定します。
- meta viewportタグは、異なるデバイスに合わせてウェブサイトのビューポート幅とスケールを調整します。
他のメタデータフィールドは、Metadata
オブジェクト(静的メタデータ用)またはgenerateMetadata
関数(生成メタデータ用)で定義できます。
静的メタデータ
静的メタデータを定義するには、静的layout.js
またはpage.js
ファイルからMetadata
オブジェクトをエクスポートします。例えば、ブログルートにタイトルと説明を追加するには:
利用可能なオプションの完全なリストは、generateMetadata
ドキュメントで確認できます。
生成メタデータ
generateMetadata
関数を使用して、データに依存するメタデータをfetch
できます。例えば、特定のブログ投稿のタイトルと説明を取得するには:
内部的には、Next.jsはメタデータをUIとは別にストリーミングし、解決され次第HTMLにメタデータを注入します。
データリクエストのメモ化
メタデータとページ自体の両方で同じデータを取得する必要がある場合があります。重複したリクエストを避けるために、Reactのcache
関数を使用して戻り値をメモ化し、データを一度だけ取得できます。例えば、メタデータとページの両方でブログ投稿情報を取得するには:
ファイルベースのメタデータ
以下の特別なファイルがメタデータ用に利用可能です:
これらを静的メタデータに使用するか、コードでこれらのファイルをプログラム的に生成できます。
ファビコン
ファビコンは、ブックマークや検索結果でサイトを表す小さなアイコンです。アプリケーションにファビコンを追加するには、favicon.ico
を作成し、アプリフォルダのルートに追加します。

コードを使用してプログラム的にファビコンを生成することもできます。詳細はファビコンドキュメントを参照してください。
静的OG画像
Open Graph(OG)画像は、ソーシャルメディアでサイトを表す画像です。アプリケーションに静的OG画像を追加するには、アプリフォルダのルートにopengraph-image.png
ファイルを作成します。

フォルダ構造の深い場所にopengraph-image.png
を作成することで、特定のルートにOG画像を追加することもできます。例えば、/blog
ルートに固有のOG画像を作成するには、blog
フォルダ内にopengraph-image.jpg
ファイルを追加します。

より具体的な画像は、フォルダ構造の上位にあるOG画像よりも優先されます。
jpeg
、png
、webp
などの他の画像形式もサポートされています。詳細はOpen Graph画像ドキュメントを参照してください。
生成OG画像
ImageResponse
コンストラクタを使用すると、JSXとCSSを使用して動的な画像を生成できます。これはデータに依存するOG画像に便利です。
例えば、各ブログ投稿に固有のOG画像を生成するには、blog
フォルダ内にopengraph-image.ts
ファイルを追加し、next/og
からImageResponse
コンストラクタをインポートします:
ImageResponse
は、フレックスボックスや絶対配置、カスタムフォント、テキストラッピング、中央揃え、ネストされた画像などの一般的なCSSプロパティをサポートしています。サポートされているCSSプロパティの完全なリストを参照してください。
知っておくと便利:
- 例はVercel OG Playgroundで利用可能です。
ImageResponse
は、HTMLとCSSをPNGに変換するために@vercel/og
、satori
、resvg
を使用します。- フレックスボックスとCSSプロパティのサブセットのみがサポートされています。高度なレイアウト(例:
display: grid
)は機能しません。