generateMetadata
このページでは、generateMetadata
と静的メタデータオブジェクトを使用したコンフィグベースのメタデータのすべてのオプションについて説明します。
補足:
metadata
オブジェクトとgenerateMetadata
関数のエクスポートは、サーバーコンポーネントでのみサポートされています。
- 同じルートセグメントから
metadata
オブジェクトとgenerateMetadata
関数の両方をエクスポートすることはできません。
- 初回ロード時、
generateMetadata
が完全に解決され、loading.js
のコンテンツを含むまでストリーミングはブロックされます。
静的メタデータを定義するには、layout.js
またはpage.js
ファイルからMetadata
オブジェクトをエクスポートします。
サポートされているオプションの完全なリストについては、メタデータフィールドを参照してください。
動的メタデータは、現在のルートパラメータ、外部データ、または親セグメントのmetadata
など、動的な情報に依存します。これは、Metadata
オブジェクトを返すgenerateMetadata
関数をエクスポートすることで設定できます。
generateMetadata
関数は、以下のパラメータを受け取ります:
generateMetadata
は、1つ以上のメタデータフィールドを含むMetadata
オブジェクトを返す必要があります。
補足:
- メタデータが実行時の情報に依存しない場合、静的な
metadata
オブジェクトを使用する必要があります。
fetch
リクエストは、generateMetadata
、generateStaticParams
、レイアウト、ページ、サーバーコンポーネント間で同じデータに対して自動的にメモ化されます。fetch
が利用できない場合は、React cache
を使用できます。
searchParams
はpage.js
セグメントでのみ利用可能です。
- Next.jsの
redirect()
およびnotFound()
メソッドもgenerateMetadata
内で使用できます。
title
属性は、ドキュメントのタイトルを設定するために使用されます。シンプルな文字列または省略可能なテンプレートオブジェクトとして定義できます。
title.default
は、タイトルを定義していない子ルートセグメントのためのフォールバックタイトルとして使用できます。
title.template
は、子ルートセグメントで定義されたtitles
にプレフィックスまたはサフィックスを追加するために使用できます。
補足:
title.absolute
は、親セグメントで設定されたtitle.template
を無視するタイトルを提供するために使用できます。
補足:
-
layout.js
title
(文字列)とtitle.default
は子セグメントのデフォルトタイトルを定義します(独自のtitle
を定義しないセグメント)。最も近い親セグメントのtitle.template
が存在する場合、それを拡張します。
title.absolute
は子セグメントのデフォルトタイトルを定義します。親セグメントのtitle.template
を無視します。
title.template
は子セグメントの新しいタイトルテンプレートを定義します。
-
page.js
- ページが独自のタイトルを定義しない場合、最も近い親の解決されたタイトルが使用されます。
title
(文字列)はルートのタイトルを定義します。最も近い親セグメントのtitle.template
が存在する場合、それを拡張します。
title.absolute
はルートのタイトルを定義します。親セグメントのtitle.template
を無視します。
page.js
ではtitle.template
は効果がありません。ページは常にルートの終端セグメントであるためです。
metadataBase
は、完全修飾URLを必要とするmetadata
フィールドのベースURLプレフィックスを設定するための便利なオプションです。
metadataBase
により、現在のルートセグメント以下で定義されたURL関連のmetadata
フィールドは、相対パスを使用できます。
- フィールドの相対パスは
metadataBase
と組み合わせて完全修飾URLを形成します。
- 設定されていない場合、
metadataBase
は自動的にデフォルト値が設定されます。
補足:
metadataBase
は通常、すべてのルートでURL関連のmetadata
フィールドに適用するために、ルートのapp/layout.js
で設定されます。
- 絶対URLを必要とするすべてのURL関連の
metadata
フィールドは、metadataBase
オプションで設定できます。
metadataBase
はサブドメイン(例:https://app.acme.com
)またはベースパス(例:https://acme.com/start/from/here
)を含むことができます。
metadata
フィールドが絶対URLを提供する場合、metadataBase
は無視されます。
metadataBase
を設定せずにURL関連のmetadata
フィールドで相対パスを使用すると、ビルドエラーが発生します。
- Next.jsは、
metadataBase
(例:https://acme.com/
)と相対フィールド(例:/path
)間の重複するスラッシュを単一のスラッシュ(例:https://acme.com/path
)に正規化します。
設定されていない場合、metadataBase
はデフォルト値を持ちます。
Vercelの場合:
- 本番デプロイメントでは、
VERCEL_PROJECT_PRODUCTION_URL
が使用されます。
- プレビューデプロイメントでは、
VERCEL_BRANCH_URL
が優先され、存在しない場合はVERCEL_URL
にフォールバックします。
これらの値が存在する場合、デフォルト値として使用され、それ以外の場合はhttp://localhost:${process.env.PORT || 3000}
にフォールバックします。これにより、Open GraphイメージがローカルビルドとVercelのプレビュー、本番デプロイメントの両方で機能します。デフォルトを上書きする場合は、URLを計算するために環境変数を使用することをお勧めします。これにより、ローカル開発、ステージング、本番環境のURLを設定できます。
これらの環境変数の詳細については、システム環境変数ドキュメントを参照してください。
URL構成は、デフォルトのディレクトリトラバーサルセマンティクスよりも開発者の意図を優先します。
metadataBase
とmetadata
フィールド間の末尾のスラッシュは正規化されます。
metadata
フィールドの「絶対」パス(通常、URLパス全体を置き換える)は、「相対」パス(metadataBase
の末尾から開始)として扱われます。
例えば、次のmetadataBase
が与えられた場合:
上記のmetadataBase
を継承し、独自の値を設定するmetadata
フィールドは、次のように解決されます:
metadata フィールド | 解決されたURL |
---|
/ | https://acme.com |
./ | https://acme.com |
payments | https://acme.com/payments |
/payments | https://acme.com/payments |
./payments | https://acme.com/payments |
../payments | https://acme.com/payments |
https://beta.acme.com/payments | https://beta.acme.com/payments |
補足:
- Open Graph 画像については、ファイルベースのメタデータ API を使用する方が便利な場合があります。設定のエクスポートと実際のファイルを同期する必要がなく、ファイルベースの API が自動的に正しいメタデータを生成します。
補足: 可能な限り、ファイルベースのメタデータ API を使用してアイコンを設定することをお勧めします。設定のエクスポートと実際のファイルを同期する必要がなく、ファイルベースの API が自動的に正しいメタデータを生成します。
補足: Chromium ベースの Microsoft Edge では、msapplication-*
メタタグはサポートされなくなったため、もはや必要ありません。
非推奨: Next.js 14 現在、metadata
の themeColor
オプションは非推奨です。代わりに viewport
設定を使用してください。
Web Application Manifest 仕様で定義されているウェブアプリケーションマニフェスト。
(意外にも)X(以前の Twitter)以外にも使用される Twitter の仕様。
Twitter カードマークアップリファレンスについてさらに詳しく学ぶ。
非推奨: Next.js 14 現在、metadata
の viewport
オプションは非推奨です。代わりに viewport
設定を使用してください。
歴史的に興味深いレコード、ドキュメント、その他の資料のコレクションを説明します(出典)。
特定のFacebook ソーシャルプラグインのために、Facebook アプリまたはFacebookアカウントをウェブページに接続できます Facebook ドキュメント
補足: appIdまたはadminsのいずれかを指定できますが、両方は指定できません。
複数のfb:adminsメタタグを生成する場合は、配列値を使用できます。
すべてのメタデータオプションは、組み込みのサポートでカバーされるはずです。ただし、サイト固有のカスタムメタデータタグや、新しくリリースされたメタデータタグがある場合があります。other
オプションを使用して、任意のカスタムメタデータタグをレンダリングできます。
同じキーの複数のメタタグを生成する場合は、配列値を使用できます。
以下のメタデータタイプは、現在組み込みのサポートがありません。ただし、レイアウトやページ自体にレンダリングすることは可能です。
<link>
要素には、外部リソースが必要になる可能性があることをブラウザに示唆するいくつかのrel
キーワードがあります。ブラウザはこの情報を使用して、キーワードに応じて先読み最適化を適用します。
メタデータ API は直接これらのヒントをサポートしていませんが、新しい ReactDOM
のメソッドを使用して、ドキュメントの <head>
に安全に挿入することができます。
ページレンダリング(ブラウザ)のライフサイクルの早い段階でリソースの読み込みを開始します。MDNドキュメント。
事前に接続元への接続を開始します。MDNドキュメント。
リソースが要求される前にドメイン名を解決しようとします。MDNドキュメント。
補足:
- これらのメソッドは現在、クライアントコンポーネントでのみサポートされており、初期ページ読み込み時にはサーバーサイドレンダリングされます。
next/font
、next/image
、next/script
などのNext.jsの組み込み機能が、関連するリソースヒントを自動的に処理します。
Metadata
型を使用して、メタデータに型安全性を追加できます。IDEで組み込みのTypeScriptプラグインを使用している場合、手動で型を追加する必要はありませんが、明示的に追加することもできます。
JavaScriptプロジェクトでは、JSDocを使用して型安全性を追加できます。
Version | Changes |
---|
v13.2.0 | viewport 、themeColor 、colorScheme は viewport 設定を推奨して非推奨になりました。 |
v13.2.0 | metadata と generateMetadata が導入されました。 |