Next.js App Routerのファビコン

著者

App Routerでは、規約に従ったファイルかmetadataオブジェクトからアイコン要素を生成できます。どちらも有効ですが、ルールを決めずに混在させると宣言が競合しやすくなります。

アイコンファイルとページをつなぐApp Routerの構成図
ファイル規約はApp Routerのルートセグメントに従います。

ファイル規約を選ぶ

favicon.icoをappのルートに置きます。対応するiconファイルはルートセグメント内に配置でき、apple-iconはApple端末向けのアイコンを定義します。

Next.jsはこれらを検出して属性を決定し、対応するlink要素をheadへ追加します。セグメントに置いたアイコンは、そのセグメント内のルートに適用されます。

App Routerのアイコン規約
ファイル配置場所用途
favicon.icoapp/サイトの代替アイコン
icon.svgappのセグメントブラウザのアイコン
apple-icon.pngappのセグメントApple用アイコン
manifest.webmanifestappのセグメントインストール用マニフェスト

metadataでパスを明示する

画像をpublicや画像ホストに置く場合は、layoutまたはpageにmetadata.iconsを指定します。一貫したURLを使い、icon、apple、必要に応じてshortcutを設定してください。

子セグメントのメタデータは、親から継承した複合フィールドを置き換える場合があります。親の項目がすべて統合されると思い込まず、複数のルートで最終的なheadを確認してください。

必要時に生成するアイコンにはicon.tsxやicon.jsも使えます。関数はサイズとコンテンツタイプを明示して画像データを返します。この方式は実際に動的な構成が必要な場合に使いましょう。静的ファイルのほうが、キャッシュや確認、デプロイ間での一貫した配信が簡単です。

マニフェストとアイコンを接続

静的マニフェストまたはmanifest.ts関数で、アプリ名、色、インストール用アイコンを定義できます。アイコンのURLは公開され、指定サイズのファイルを指す必要があります。

マニフェストとタブ用ファビコンの役割は別です。512×512のインストール用アイコンがicon.svgやfavicon.icoを自動で置き換えることはありません。

本番環境でテストする

本番ビルドを実行し、対象の各セグメントからひとつずつルートを開いてlink要素を確認します。各画像のURLも直接開き、ミドルウェアに妨げられないことを確かめてください。

basePathやCDNを使う場合は、デプロイ先で生成URLをテストします。公開ベースや書き換えルールの誤りは、ローカルだけではわからないことがあります。

一次資料

よくある質問

link要素を手書きする必要がありますか?

いいえ。ファイル規約またはmetadata.iconsで生成できます。設定元を明確にひとつに決めてください。

favicon.icoはどこに置きますか?

App Routerのfavicon.ico規約はappディレクトリのルートで利用できます。

manifest.tsはicon.svgの代わりになりますか?

いいえ。マニフェストはインストール用アイコンなどのデータを定義し、icon.svgはブラウザ用アイコンを直接提供します。

実際に作ってみる

ファイル一式を数秒で無料生成。画像をアップロードする必要はありません。

Next.js向けの画像を生成

次に読むガイド・試すツール

LFFaviconのその他のツールと、よくある疑問に答えるガイドをご紹介します。

ツール

ガイド