favicon.ico はどこに置くか?ルートパスの慣例
長年の慣例により、ブラウザや多くのクローラーは、指し示す link タグが無くてもドメインのルートから /favicon.ico をリクエストします。したがってサイトのルートで配信される favicon.ico は、パスで尋ねるものすべてを満たす唯一のファイルです。物理的にどこに置くかはスタックによって異なります(ほとんどのフレームワークでは public/、Next.js では app ディレクトリ)が、最終的に /favicon.ico で応答しなければなりません。
誰も宣言しないルートへのリクエスト
head にアイコンの link が一切なくても、ブラウザ、フィードリーダー、クローラーは、ドメインのまさにルートで /favicon.ico を尋ねます。これは link タグより古い暗黙のリクエストで、多くのクライアントがそれに頼っています。
だからこそファイルはルートパスで解決される必要があります。link タグはそれ以外のすべて(SVG、PNG の各サイズ、apple-touch-icon)をカバーしますが、この一つの URL は、指し示そうがしまいがリクエストされます。
スタックごとのファイルの置き場所
| スタック | ファイルの置き場所 |
|---|---|
| プレーン HTML | サイトのルート、/favicon.ico で配信 |
| Vite / React / Vue | public/、ルートにコピーされる |
| Next.js App Router | app ディレクトリ(app/favicon.ico) |
| WordPress | 「サイトアイコン」設定、アップロードするファイルではない |
| Angular | public/、または angular.json の assets に列挙 |
ファビコンのパスに関するよくある質問
favicon.ico はどこに置きますか?
/favicon.ico で配信される場所です。プレーン HTML ならサイトのルート、ほとんどのフレームワークなら public/、Next.js App Router なら app ディレクトリです。WordPress や Shopify は、ファイルではなく設定で扱います。
ファビコンは本当にルートに置かないといけませんか?
暗黙のリクエストのためには、はい。/favicon.ico をパスで尋ねるクライアントは、それ以外の場所では見つけられません。link タグで指し示せば、追加のアイコンは別の場所に置けます。
link タグがあっても favicon.ico は必要ですか?
はい。link タグはブラウザを担いますが、クローラーや古いクライアントからのパスベースのリクエストは、あなたの HTML を迂回して直接 /favicon.ico に行きます。