favicon の最小構成(SVG + ICO + apple-touch-icon + manifest)
現代のブラウザ向けには SVG 1 枚、レガシー向けに 32px の ICO、iOS 向けに 180px PNG、Android 向けに manifest の 192 / 512 / maskable。大量のサイズを並べる時代は終わっている。
目次 9 sections
調査時点: 2026-10。Evil Martians の記事は 2026-01 の編集注記で「現在も有効」と確認されている。
favicon は、ブラウザのタブ・ブックマーク・ホーム画面・検索結果に出るサイトのアイコン。かつては 16 / 32 / 48 / 57 / 72 / 114 / 144… と十数サイズの PNG を並べるのが定番だったが、SVG 対応が揃った現在は 5 ファイルと manifest 1 つで足りる。
ファイル構成
| ファイル | 形式・サイズ | 役割 |
|---|---|---|
favicon.ico | ICO(32×32。16×16 を同梱してもよい) | レガシーブラウザ、RSS リーダー、/favicon.ico を直接取りに来るツール向け。ルート直下に置き、ハッシュ付きの名前にしない |
icon.svg | 正方形の SVG | 現代ブラウザの主アイコン。ブラウザが縮小するので複数サイズは不要 |
apple-touch-icon.png | PNG 180×180 | iPhone / iPad の「ホーム画面に追加」。透過は不可(黒で埋められる)。角丸は OS が付けるので自分で丸めない |
icon-192.png | PNG 192×192 | Android のホーム画面 |
icon-512.png | PNG 512×512 | PWA のスプラッシュ |
icon-mask.png | PNG 512×512、purpose: maskable | Android ランチャーが形を切り抜いても崩れないよう、中央 80% に絵を収めた版 |
manifest.webmanifest | JSON | 上の 3 つの PNG を icons に列挙する |
HTML
<link rel="icon" href="/favicon.ico" sizes="32x32"><link rel="icon" href="/icon.svg" type="image/svg+xml"><link rel="apple-touch-icon" href="/apple-touch-icon.png"><link rel="manifest" href="/manifest.webmanifest">ICO の sizes は 32x32 にする。かつて推奨された sizes="any" は、Chrome が ICO と SVG の両方を取りに行く不具合を招いたため、2023 年に 32x32 へ改められた。これで Chrome は SVG を優先する。
manifest
{ "name": "サイト名", "icons": [ { "src": "/icon-192.png", "type": "image/png", "sizes": "192x192" }, { "src": "/icon-mask.png", "type": "image/png", "sizes": "512x512", "purpose": "maskable" }, { "src": "/icon-512.png", "type": "image/png", "sizes": "512x512" } ]}PWA にしないサイトでも、Android のホーム画面アイコンのために置く価値はある。
ダークモード
SVG の中に <style>@media (prefers-color-scheme: dark) { ... }</style> を書けば、Chrome と Firefox はタブの配色に合わせて色を切り替える。ただし Safari はこのメディアクエリを favicon では無視する(WebKit bug 309949、2026-04 時点で未修正)。確実に両方で見せたいなら、背景を塗ったタイル型のアイコンにして配色の切り替えに依存しない設計のほうが安全。
Google 検索結果の favicon
- 正方形(1:1)で、最小 8×8px。見栄えのために 48×48px より大きいものを推奨
- 対応形式は ICO / PNG / GIF / JPEG / BMP / TIFF / PPM。SVG は列挙されていないので、ICO か PNG も置いておく
relはicon/shortcut icon/apple-touch-icon/apple-touch-icon-precomposedを見る- 検索結果に使われるのはホスト名ごとに 1 つ。サブディレクトリに置いた favicon はサイト全体には効かない
- Googlebot-Image が favicon を、Googlebot がホームページをクロールできる必要がある
- 反映は数日〜数週間。URL を頻繁に変えない
生成の仕方
SVG を 1 枚描き、ビルドスクリプトで PNG に書き出すのが楽。Node なら @resvg/resvg-js で SVG → PNG、ICO は PNG を ICO コンテナ(6 バイトのヘッダ + 16 バイトのエントリ + PNG 本体)に包めば Vista 以降のすべての環境で読める。apple-touch-icon と maskable は角丸を付けず全面塗りで、maskable だけ絵を 12% ほど内側に縮める。
落とし穴
- favicon はブラウザのキャッシュが強い。差し替えが反映されないときはプライベートウィンドウで確認する
- apple-touch-icon に透過 PNG を使うと、iOS が透過部分を黒で塗る
- 16px での見え方を必ず確認する。細い線や小さな文字は潰れる
関連
更新履歴
- 2026-10-17: 初版。ブログの favicon を作り直す際の調査
出典
同じトピック — Web
- 単一画面の Canvas ツールのスタック選定(vanilla TS / Svelte / Preact と PWA ツーリング)
- DAM カラオケ検索(clubdam)の挙動と制約
- Core Web Vitals と画像最適化
- フロントエンドのフレームワークとツールの動き(2025)
- HTML-in-Canvas API
- HTML-in-Canvas の実現性(a11y・性能・セットアップ・シェーダー)
- iOS Safari で canvas の画像を保存させる(download 属性 / Web Share / 長押し)
- 日本語 Web フォントのライセンスとサブセット化
- 個人サイトのライブウィジェットと外部 API の制限
- モダン CSS / Web API の対応状況(2025-2026)
- OPFS(Origin Private File System)
- Google Places API のキーの守り方(ブラウザ露出 vs サーバ中継)
- iOS の PWA 制限
- 機能別 React / TS ライブラリ対応表(2026-04 時点)
- URL 長の上限と日本語の URL エンコード膨張
- 書き出すテキストファイルの UTF-8 BOM と Markdown 継続行
- 縦書き Web の実装(writing-mode・ルビ・圏点・縦中横・禁則)
- PWA の Web Share Target(Android)の実測と落とし穴
- WebAssembly(Wasm)
- YouTube oEmbed で動画タイトルとチャンネル名を取る