Куда кладётся favicon.ico? Соглашение о корневом пути
По давнему соглашению браузеры и многие краулеры запрашивают /favicon.ico из корня вашего домена даже без тега <link>, указывающего на него. Так что favicon.ico, отдаваемый в корне сайта, — это единственный файл, который удовлетворяет всё, что спрашивает по пути. Где вы физически его размещаете, зависит от стека (public/ для большинства фреймворков, каталог app для Next.js), но он должен в итоге отвечать по /favicon.ico.
Корневой запрос, который никто не объявляет
Даже если в вашем <head> вообще нет ссылки на иконку, браузеры, агрегаторы лент и краулеры всё равно попросят /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/ или перечислен в assets в angular.json |
Частые вопросы о пути favicon
Куда положить favicon.ico?
Туда, откуда он отдаётся по /favicon.ico: корень сайта для чистого HTML, public/ для большинства фреймворков, каталог app для Next.js App Router. WordPress и Shopify обрабатывают его через настройку, а не через файл.
Favicon действительно должен быть в корне?
Для неявного запроса — да. Клиенты, запрашивающие /favicon.ico по пути, не найдут его нигде больше. Дополнительные иконки могут жить в других местах, пока ваши теги <link> указывают на них.
Нужен ли мне favicon.ico при наличии тегов <link>?
Да. Теги <link> обслуживают браузеры, но запросы по пути от краулеров и старых клиентов обходят ваш HTML и идут прямо к /favicon.ico.