Фавиконы в Next.js App Router

Автор

App Router может создавать элементы значков на основе файлов со специальными именами или объекта metadata. Оба подхода допустимы, но их смешение без понятного правила легко приводит к конкурирующим объявлениям.

Дерево App Router, связывающее файлы значков со страницами
Файловые соглашения следуют сегментам маршрутов App Router.

Выберите файловые соглашения

Поместите favicon.ico в корень app. Поддерживаемые файлы icon могут находиться в сегменте маршрута, а apple-icon описывает значок для устройств Apple.

Next.js обнаруживает эти файлы, определяет нужные атрибуты и добавляет соответствующие элементы link в head. Значок внутри сегмента применяется к маршрутам этого сегмента.

Соглашения о значках в App Router
ФайлРасположениеНазначение
favicon.icoapp/Запасной значок сайта
icon.svgсегмент appЗначок браузера
apple-icon.pngсегмент appЗначок Apple
manifest.webmanifestсегмент appМанифест для установки

Используйте metadata для явных путей

Если ресурсы находятся в public или на хостинге изображений, объявите metadata.icons в layout или page. Укажите icon, apple и при необходимости shortcut с согласованными URL.

Метаданные дочернего сегмента могут заменять составные поля, унаследованные от родительского. Проверяйте итоговый head на нескольких маршрутах, а не предполагайте, что все родительские записи объединились.

Для значка, создаваемого по запросу, Next.js также поддерживает icon.tsx и icon.js. Функция возвращает изображение с явно заданными размером и типом содержимого. Используйте этот подход для действительно динамических композиций: статический файл проще кэшировать, проверять и одинаково отдавать при разных развёртываниях.

Подключите манифест и его значки

Статический файл манифеста или функция manifest.ts может описывать название приложения, цвета и значки для установки. URL значков манифеста должны быть общедоступными и указывать на файлы с объявленными размерами.

Не смешивайте роль манифеста и фавикона вкладки: значок установки 512×512 не заменяет автоматически icon.svg или favicon.ico.

Проверьте в производственной среде

Выполните производственную сборку, откройте по одному маршруту из каждого затронутого сегмента и изучите элементы link. Затем откройте URL каждого ресурса напрямую и убедитесь, что middleware его не перехватывает.

При использовании basePath или CDN проверьте полученные URL в опубликованной среде. Локальный запуск не всегда выявляет неверный публичный базовый адрес или правило перезаписи.

Первоисточники

Частые вопросы

Нужно писать элементы link вручную?

Нет. Файловые соглашения или metadata.icons могут создать их автоматически. Выберите один понятный источник настроек.

Куда поместить favicon.ico?

В App Router соглашение favicon.ico поддерживается в корне каталога app.

Заменяет ли manifest.ts файл icon.svg?

Нет. Манифест, помимо прочих данных, описывает значки для установки приложения, а icon.svg непосредственно задаёт значок браузера.

Попробуйте на практике

Генератор бесплатно создаст полный набор за секунды, без отправки изображений на сервер.

Создать ресурсы для Next.js

Что ещё почитать и попробовать

Другие инструменты LFFavicon и руководства с ответами на самые частые вопросы.

Инструменты

Руководства