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" }],
  },
};

✅ まとめ

📚 関連タグ

.htaccessは階層で引き継がれる?Apacheの挙動を徹底解説

MBTI診断

SEO対策に必須!検索上位を狙うsitemap.xmlの完全ガイド

Google Search Consoleの「代替ページ(適切なcanonicalタグあり)」とは?原因と解決法を徹底解説!

Microsoft純正の新しいコンソールエディタ「edit」が復活!| edit.exe インストール方法

Googleサイト確認のTXTレコードをnslookupで確認する方法【SEO対策】

Googleサーチコンソールに反映されるための最低限のSEO構造とは

PHPで複数ファイルを順番に削除する方法

MBTI診断 | あなたの性格タイプを分析

PDFファイル結合|パスワード設定ツール

【Anker Soundcore Liberty 4】イヤーピース紛失!代替品はAmazonで購入

JavaScriptでタイムゾーン変換!UTCとJST(日本時間)の変換方法

pnpmとは?npmとの違いとインストール方法

git switchの使い方とgit checkoutとの違い

HTMLとJavaScriptモジュールでクラスを定義し、ボタンから呼び出す方法

JavaScriptでTensorFlow.jsを動的に読み込む方法|HTMLに直接書かずに機械学習を実行する

ChatGPT風リンクバッジをCSSで作成する

ffmpegでMOVファイルを逆再生する方法【音声付き対応】

Windows 11でタスクマネージャー以外からアプリを終了させる方法【PowerShell・コマンドプロンプト】

macOSでドメイン名から情報を取得する方法【初心者向け】

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(静的書き出し)比較

Homebrewの「update」と「upgrade」の違い+バージョン確認方法|Macのパッケージ管理

.DS_StoreをGitでアップしない方法|macユーザー向け