Favicon Tools検証作成
トラブルシューティング
基礎

favicon が表示されない・更新されない?9つの原因と対処法

· 7 min read

favicon を壊す9つの原因と、それぞれの正確な対処法。10回中9回はキャッシュが原因なので、そこから始めて表を上から下へたどっていきましょう。

<link rel="icon" href="/favicon.ico?v=2" sizes="any">

URLを変えることこそが、ブラウザに新しいファイルを取りに行かせる方法です。ICOをその場で編集するだけでは足りません。

原因と対処法

原因なぜ壊れるか対処法
1. ブラウザまたはCDNのキャッシュブラウザは favicon をほぼどのアセットよりも強くキャッシュし、前面にCDNがあるとさらにもう一層加わります。ハードリフレッシュ(Cmd+Shift+R / Ctrl+F5)し、URL自体が変わるようバージョンのクエリ文字列を付け足します。
2. ファイルパスの誤り相対パスは、ルートではなく現在のページを基準に解決されます。先頭にスラッシュを付けて /favicon.ico とし、そのURLで実際にファイルが読み込まれることを新しいタブで確認します。
3. link タグの欠落・不正アイコンの link がない、rel="icon" のタイプミス、あるいは <head> の外に置かれたタグは、いずれもブラウザがファイルを見つけるのを妨げます。共有レイアウトのマークアップを検証します。
4. フォーマットまたはサイズの誤り小さすぎる favicon、誤ったMIMEタイプ、破損した .ico は、静かにレンダリングに失敗することがあります。サポートされているサイズとフォーマットで書き出し直し、正しいコンテンツタイプで配信します。ICO と PNG を比較し、必要な favicon サイズを確認しましょう。
5. apple-touch-icon が更新されないiOS は favicon.ico を無視し、apple-touch-icon を使います。それが欠けていたり古かったりすると、ホーム画面に誤ったものが表示されます。apple-touch-icon の link を修正してから、ページをホーム画面から削除して再追加します。
6. マニフェストのアイコンの問題Android およびインストール済みPWAでは、アイコンは manifest.json から来ます。そこでのパスの誤りやサイズの誤りは、ホーム画面とスプラッシュのアイコンを壊します。manifest.json 内のアイコンのパスとサイズを修正し、アプリを再インストールします。
7. ビルド出力がタグを取り除く一部のフレームワークはドキュメントのheadを書き換えるため、手書きの link タグがビルドを生き延びません。お使いのスタックのガイドに従ってください:Next.js、React、WordPress、または Shopify。
8. テーマやCMSが独自のアイコンを注入するテーマが独自のサイトアイコンを設定し、マークアップで追加したものを上書きすることがあります。テンプレートではなく、プラットフォーム自身のサイトアイコン設定からアイコンを設定します。
9. ビルドキャッシュが古いファイルを配信するビルドやプラットフォームのキャッシュが、再デプロイ後も古いアイコンを配り続けます。ビルド/プラットフォームのキャッシュをパージし、再デプロイして、もう一度確認します。

次に見るべき場所

フォーマットやサイズが怪しい?用語集で ICO と PNG を比較し、必要な favicon サイズを確認しましょう。iOS の問題?apple-touch-icon の項目を読んでください。マニフェストの問題?manifest.json とは何かを読みましょう。

原因7〜9はプラットフォーム固有のものです。一部のフレームワークやCMSは、素のHTMLとは異なるやり方で favicon を上書きしたりキャッシュしたりします。ビルド出力がタグを取り除いたり、テーマが独自のアイコンを注入したり、ビルドキャッシュが古いファイルを配信したりします。Next.js、React、WordPress、Shopify のガイドが、それぞれ固有のバージョンを扱っています。

キャッシュされた favicon を消す方法

  1. 1

    バージョンのクエリ文字列を付け足す

    link の href を /favicon.ico?v=2 に変えて、ブラウザに新しいファイルを取りに行かせます。

  2. 2

    ページをハードリフレッシュする

    Cmd+Shift+R(macOS)または Ctrl+F5(Windows)でキャッシュをバイパスします。

  3. 3

    CDNのキャッシュをパージする

    サイトの前面にCDNがある場合は、favicon のパスを無効化して、エッジノードが新しいファイルを配信するようにします。

キャッシュを消しても、まだ同じ?

見えている状態たいていの意味次の一手
404:favicon が見つからないブラウザが /favicon.ico を要求したのに、サーバーにそこには何もありませんでした。フレームワークのビルドが出力にファイルをコピーしなかった直後によくあります。/favicon.ico を直接開きます。404 になるなら、ファイルがデプロイされていません。これはキャッシュではなくビルドかパスの問題なので、キャッシュをいじっても決して解決しません。
直接URLでも古いアイコンが読み込まれる/favicon.ico を開くと古い画像が表示される、つまりファイルそのものが古いのです。いくらハードリフレッシュしても動きません。ビルドステップかCDNが古いファイルを配っています。プラットフォーム/CDNのキャッシュをパージし、再デプロイしてから、タブを確認する前に直接URLを開き直します。
URLでは正しいファイル、タブでは誤ったアイコン直接URLは正しいのに、タブはまだ誤っている。2つ目の link タグ(テーマ、プラグイン、またはフレームワークのデフォルト)が、あなたのものを上回っています。ソースを表示して rel="icon" タグを数えます。ブラウザは理解できる最後のものを採用するので、3つ目を足すのではなく、負けているものを取り除きます。
あるブラウザでは正常、別のブラウザでは欠落各ブラウザ、そして各Chromeプロファイルは、それぞれ独自の favicon ストアを持ち、一部は古いエントリを何日も保持します。サイトのせいだと決める前に、新しいプライベートウィンドウかクリーンなプロファイルで確認します。

その表を上から下へたどってください。各行が1つのレイヤーを除外するので、キャッシュについて推測するのをやめ、サーバーが実際に返しているものを読み始められます。

失敗するケースが気にするサイズ

Example favicon at 16 by 16 pixels
16px
Example favicon at 32 by 32 pixels
32px
Example favicon at 48 by 48 pixels
48px
Example favicon at 96 by 96 pixels
96px
Example favicon at 180 by 180 pixels
180px
実際のピクセル寸法でレンダリングしています。Google は検索にアイコンを表示する前に少なくとも 48×48 を求め、iOS は 180×180 の apple-touch-icon を求めます。16px でしか存在しないアイコンは、その両方に失敗します。

スキャンで対処を確認する

推測は時間がかかります。公開中のサイトを取得し、見つかったすべての favicon タグを列挙し、欠落や破損しているものにフラグを立てる自動スキャンを実行して、対処が本当に反映されたことを確かめましょう。

ブラウザやデバイスをまたいで手動でもテストしたいですか?favicon のテストと確認の方法をご覧ください。

よくある質問

なぜ favicon が表示されないのですか?

最も一般的な原因は、ブラウザの強力なキャッシュ、誤ったまたは相対的なファイルパス、そして <head> 内の <link> タグの欠落や不正です。ハードリフレッシュし、/favicon.ico が直接解決されることを確認し、タグをチェックしましょう。

favicon を強制的に更新するには?

アイコンのURLにバージョンのクエリ文字列を付け足します。例:/favicon.ico?v=2。これでブラウザはそれを新しいファイルとして扱います。そのあとハードリフレッシュするか、サイトのキャッシュを消します。

なぜ favicon がデスクトップでは表示されるのに iPhone では表示されないのですか?

iOS は favicon.ico ではなく apple-touch-icon を使います。その 180×180 の PNG の link が欠けていると、iOS はスクリーンショットにフォールバックします。apple-touch-icon の link を追加し、ページをホーム画面に再追加しましょう。

Google 検索で favicon が更新されるまでどれくらいかかりますか?

Google はサイトを再クロールするときに favicon を更新し、それには数日から数週間かかることがあります。アイコンが少なくとも 48×48 であること、有効な rel=icon タグで参照されていること、そして Googlebot が到達できることを確認しましょう。

なぜ favicon が見つからない、または 404 が返るのですか?

ブラウザがパスでアイコンを要求したのに、サーバーにそこには何もありませんでした。/favicon.ico を新しいタブで直接開きます:404 になるなら、そのURLにファイルが一度もデプロイされていません。たいていはフレームワークのビルドが出力にコピーしなかったか、link タグのパスが誤っています。キャッシュではなく、ファイルが着地する場所を直しましょう。

favicon が欠けています。ファイルは実際にはどこにあるべきですか?

定番のタブアイコンには、/favicon.ico が解決されるよう、サイトのルートに実ファイルを置きます。フレームワークによって、そこへの届き方が変わります:Next.js は app/favicon.ico を読み、Vite やほとんどのSPAは public/ をルートにコピーし、WordPress や Shopify はファイルではなくサイトアイコン設定を通じて配信します。ビルドが一度もファイルを書き込まなかった場所をタグが指していると、ソースが正しく見えてもアイコンは「欠けている」ことになります。

キャッシュを消してみましたが、まだ同じです。どうすれば?

キャッシュを消すのをやめて、サーバーが返すものを読みましょう。/favicon.ico を直接開きます:404 ならビルドかパスの問題、古い画像なら古いビルドかCDNのファイル、そしてタブでは誤ったアイコンだが正しいファイルなら、2つ目の link タグが勝っているということです。結果ごとに別々の対処を指し示します。上のエスカレーション表をご覧ください。

Generate your icon set

Keep reading