Next.jsで複数サイズのPNGファビコンを指定する方法【layout.tsx対応】
Next.js 13以降のApp Router構成では、従来の<link rel="icon">タグを直接書く代わりに、layout.tsx内のexport const metadataでファビコンを指定できます。
2025/11/11
🔹 基本構文:複数のPNGファビコンを指定
以下のように、icons.iconに配列で複数のPNGファイルを登録できます。
// app/layout.tsx
import type { Metadata } from "next";
export const metadata: Metadata = {
metadataBase: new URL("https://example.com"),
icons: {
icon: [
{ url: "/icons/favicon-16x16.png", sizes: "16x16", type: "image/png" },
{ url: "/icons/favicon-32x32.png", sizes: "32x32", type: "image/png" },
{ url: "/icons/favicon-192.png", sizes: "192x192", type: "image/png" },
],
apple: [
{ url: "/icons/apple-touch-icon.png", sizes: "180x180", type: "image/png" },
],
shortcut: ["/icons/favicon.ico"],
other: [
{ rel: "mask-icon", url: "/icons/safari-pinned-tab.svg", color: "#5bbad5" },
],
},
manifest: "/site.webmanifest",
themeColor: "#ffffff",
};
この書き方なら、public/icons/以下にファイルを整理してもOKです。
実際の公開URLは /icons/ファイル名 になります。
📁 ファイル配置例(publicディレクトリ)
public/
├── icons/
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ ├── favicon-192.png
│ ├── apple-touch-icon.png
│ ├── safari-pinned-tab.svg
│ └── favicon.ico
└── site.webmanifest
📱 site.webmanifest のサンプル
{
"name": "My Next App",
"short_name": "NextApp",
"icons": [
{ "src": "/icons/favicon-192.png", "sizes": "192x192", "type": "image/png" },
{ "src": "/icons/favicon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "maskable any" }
],
"start_url": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#ffffff"
}
💡 ルート直下じゃなくてもOKな理由
Next.jsではpublicフォルダ配下のファイルはすべて自動的に静的配信されます。
つまりpublic/icons/xxx.pngを置けば、ブラウザからは/icons/xxx.pngとしてアクセス可能。
ルート直下に置かなくても、metadata.iconsでパスを明示すれば問題ありません。
🧭 SEO・SNS向けOGP設定も一緒に
ファビコン設定と同時に、OGP(Open Graph Protocol)やcanonicalリンクもmetadataで指定できます。
これにより、検索エンジンやSNSシェア時の見栄えを最適化できます。
export const metadata: Metadata = {
title: "Next.jsで複数PNGファビコンを指定する方法",
description: "layout.tsxのmetadataを使って複数のPNGファビコンを登録する方法を解説。",
alternates: { canonical: "https://example.com/blog/nextjs-favicon-metadata" },
openGraph: {
title: "Next.jsで複数PNGファビコンを指定する方法",
description: "App Router対応のNext.jsファビコン設定方法を紹介。",
url: "https://example.com/blog/nextjs-favicon-metadata",
images: [{ url: "https://example.com/ogp/nextjs-favicon.png" }],
},
};
✅ まとめ
metadata.icons.iconに配列で複数PNGを指定できるpublic/icons/以下でもOK- Apple Touch Iconやmanifestもmetadataで一括管理可能
- OGPやcanonical指定でSEO・SNS対応も完璧
📚 関連タグ
.htaccessは階層で引き継がれる?Apacheの挙動を徹底解説
SEO対策に必須!検索上位を狙うsitemap.xmlの完全ガイド
Google Search Consoleの「代替ページ(適切なcanonicalタグあり)」とは?原因と解決法を徹底解説!
Microsoft純正の新しいコンソールエディタ「edit」が復活!| edit.exe インストール方法
Googleサイト確認のTXTレコードをnslookupで確認する方法【SEO対策】
Googleサーチコンソールに反映されるための最低限のSEO構造とは
【Anker Soundcore Liberty 4】イヤーピース紛失!代替品はAmazonで購入
JavaScriptでタイムゾーン変換!UTCとJST(日本時間)の変換方法
git switchの使い方とgit checkoutとの違い
HTMLとJavaScriptモジュールでクラスを定義し、ボタンから呼び出す方法
JavaScriptでTensorFlow.jsを動的に読み込む方法|HTMLに直接書かずに機械学習を実行する
ffmpegでMOVファイルを逆再生する方法【音声付き対応】
Windows 11でタスクマネージャー以外からアプリを終了させる方法【PowerShell・コマンドプロンプト】
JavaScriptでPCの空き容量やメモリ量を取得できる?Chromeの制限と代替手法
PowerShellでNode.jsの最新バージョン一覧を確認する方法【Volta/Windows対応】
Next.jsでbasePathを/homepage2にしてS3へ静的デプロイする完全手順
NextAuthなし・APIルートなしで実装:Next.js + AWS Amplify だけでメール/パスワード認証を完結する方法
「Next.js pnpm build (ビルド)後の出力ファイルが見当たらない」トラブルシュート&静的デプロイ
AWS Amplify CLIでS3やZIPから手動デプロイ【実行コマンド付き】
Next.jsで複数サイズのPNGファビコンを指定する方法【layout.tsx対応】
Next.jsでのtypeとinterfaceの違いと使い分け方
Next.js useState と useRef の違いは?最適な使い分け
GraphQL接続の落とし穴:Amplify Hosting(amplifyapp.com) vs S3+Next.js(静的書き出し)比較