Favicon

25 сентября 2026 · ~14 мин чтения

веб html формат-данных брендинг история

Favicon

Favicon (от «favorites icon», иконка избранного) — это маленькая картинка, которой сайт сообщает браузеру и другим программам, как себя изображать: во вкладке, в закладках, в истории, в выдаче поисковика, на домашнем экране телефона. Технически это обычный файл изображения плюс договорённость о том, где его искать.

История

Всё началось с Microsoft. В марте 1999 года вышел Internet Explorer 5, и в нём появилась новая мелочь: если добавить сайт в «Избранное» (Favorites), рядом с закладкой показывалась иконка сайта. Отсюда и название — favorites icon, сокращённо favicon. Кто конкретно придумал, точно не знаю: в англоязычных источниках встречается имя сотрудника Microsoft Бхарата Шьяма (Bharat Shyam), но проверь это в английской Википедии, статья «Favicon».

Механика у IE5 была максимально простой и, как потом выяснилось, спорной: браузер при добавлении в избранное сам запрашивал файл /favicon.ico в корне сайта. Никакого тега в HTML не требовалось. Формат .ico взяли из Windows: это родной формат иконок программ и ярлыков. Была и побочная польза: по количеству запросов к /favicon.ico в логах сервера владельцы сайтов примерно понимали, сколько людей добавило их в закладки.

Какую проблему решали? В конце 90-х закладки были длинным текстовым списком, а сайты хотели выделяться. Иконка — это брендинг размером 16×16 пикселей.

Вехи дальше:

Сегодня у favicon нет владельца. Это не продукт, а набор договорённостей, частично прописанных в стандарте HTML (WHATWG), частично живущих как обычаи браузеров.

Что это такое

Если отбросить историю, favicon складывается из трёх частей.

Первая — файл. Картинка в одном из форматов:

Вторая — способ сообщить, где файл. Либо тег в HTML:

<link rel="icon" href="/favicon.svg" type="image/svg+xml">
<link rel="icon" href="/favicon-32.png" sizes="32x32">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="manifest" href="/site.webmanifest">

либо ничего: тогда браузер по старой традиции IE5 сам сходит на /favicon.ico.

Третья — потребители. Фавикон читает не только браузер. Его берут мессенджеры в превью ссылок, поисковики в выдаче (Google показывает фавиконы в мобильной выдаче с 2019 года, Яндекс — давно), агрегаторы закладок, RSS-читалки, менеджеры паролей, даже сканеры безопасности.

Чем отличается от похожих вещей:

Аналогии из жизни

Вывеска-значок над дверью магазина. В старых городах над лавками вешали не надписи, а символы: крендель у булочной, ножницы у портного, сапог у сапожника. Прохожий узнавал лавку издали, даже не умея читать. Фавикон делает то же самое среди тридцати вкладок: название уже не помещается, а значок видно.

Где ломается: вывеску вешает сам владелец, и она всегда одна. Фавикон каждый «прохожий» (браузер, мессенджер, поисковик) забирает и перерисовывает сам: один ужмёт до 16 пикселей, другой положит на тёмный фон, третий возьмёт устаревшую копию из своего кэша. У вывески один вид, у фавикона — десяток вариантов, и хозяин сайта контролирует их только частично.

Значок на связке ключей. Чтобы не перебирать одинаковые ключи, на них надевают цветные колпачки: красный от квартиры, синий от гаража. Колпачок ничего не открывает, он помогает найти нужное.

Где ломается: колпачок физически прикреплён к ключу. Фавикон с сайтом связан ссылкой, и связь рвётся: сайт может сменить иконку, а браузер месяцами показывать старую. Или сайт за защитой от ботов вместо картинки отдаёт HTML-страницу с проверкой, и «колпачок» внезапно оказывается пустым.

Эмблема футбольного клуба в турнирной таблице. В приложении с результатами рядом с названием команды стоит крошечный герб. Полная эмблема клуба детализированная, с надписями и годом основания, а в таблице — упрощённый силуэт, иначе в 20 пикселях будет каша.

Где ломается: у клуба есть дизайнеры, которые специально рисуют упрощённую версию. У фавикона часто никто ничего не упрощает: берут большой логотип и сжимают автоматически. Результат — мыльное пятно, где ничего не разобрать. Хорошая аналогия описывает, как должно быть, но не как бывает обычно.

Как это работает

Разберём по шагам, что происходит, когда ты открываешь страницу.

Шаг 1. Браузер загружает HTML и разбирает <head>. Он собирает все <link> с rel="icon", rel="apple-touch-icon" и прочими похожими.

Шаг 2. Выбор кандидата. Если вариантов несколько, браузер выбирает по атрибутам sizes и type. Грубо: для вкладки на обычном экране нужна 16×16, на Retina — 32×32; SVG подходит под всё, если браузер его понимает. Правила выбора у каждого браузера свои, и в спецификации они описаны как рекомендации, а не жёсткий алгоритм. Поэтому в разных браузерах одна и та же страница может показывать разные иконки.

Шаг 3. Фоллбэк (запасной путь). Если тегов нет вообще, браузер делает GET /favicon.ico. Отсюда знаменитые тысячи 404-ошибок в логах nginx у сайтов, которые про фавикон забыли.

Шаг 4. Загрузка и проверка. Браузер скачивает файл и пытается его декодировать. Если вместо картинки пришёл HTML (редирект на страницу логина, заглушка антибот-защиты, страница 404 с кодом 200), иконка не отрисуется, и браузер покажет свою серую «глобус»-заглушку.

Шаг 5. Кэширование. Фавиконы кэшируются агрессивно и отдельно от обычного кэша. В Chrome, например, есть отдельная база Favicons в профиле пользователя. Поэтому смена фавикона — классическая боль: ты поменял файл, а у всех постоянных посетителей недели висит старый. Лечится сменой URL (/favicon.svg?v=2) — тот же приём cache busting, что и для CSS.

Шаг 6. Отрисовка. Браузер масштабирует картинку под место. SVG-фавикон может содержать CSS с @media (prefers-color-scheme: dark) и сам перекрашиваться под тёмную тему — растровый так не умеет.

Отдельная тема — встраивание фавикона прямо в HTML через data URI. Это схема data: (RFC 2397, 1998 год), которая позволяет положить содержимое файла прямо в атрибут:

<img src="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAA..." alt="">

Здесь base64 — способ записать двоичные байты печатными символами (ценой примерно +33% к объёму). И тут есть красивая деталь: любой ICO-файл начинается с байтов 00 00 01 00, а в base64 это всегда превращается в AAABAA. Увидел строку, начинающуюся с AAABAA, — перед тобой иконка Windows. Следующие байты тоже читаются: AAABAAEAEBAA... означает «один образ, ширина 0x10, высота 0x10», то есть 16×16. А если ширина закодирована нулём, это значит 256 пикселей — так ICO обходит то, что под размер отведён всего один байт.

Одна иконка — много копий

На современном сайте «фавикон» — это обычно 4–6 файлов: SVG для десктопных браузеров, PNG 32×32 как запасной, favicon.ico для старых клиентов и автоматических запросов, apple-touch-icon 180×180 для iPhone и две иконки 192/512 в манифесте для Android. Каждый потребитель берёт своё, и забытый вариант всплывёт именно там, где ты не проверял.

Где встречается в обычной жизни

Где встречается в IT и бизнесе

Кто пользуется

Коротко — все. Фавикон есть практически у каждого сайта из верхних миллионов по посещаемости. Точной доли не знаю; оценки, которые попадались, — подавляющее большинство. Поищи отчёт HTTP Archive Web Almanac, там регулярно считают такие вещи.

Интересные случаи:

Альтернативы и конкуренты

У фавикона нет прямого конкурента — это единственный механизм «значок сайта во вкладке». Зато есть альтернативы для задачи «показать иконку чужого сайта у себя».

Когда НЕ стоит использовать

Проверяй, что скачалась картинка, а не HTML

Сайты за анти-DDoS и антибот-защитой (Qrator, Cloudflare и подобные) на запрос скрипта вместо файла часто отвечают HTML-страницей с проверкой — с кодом 200. Скрипт честно сохранит её как favicon.ico. Прежде чем использовать скачанное, проверь тип файла командой file или посмотри на первые байты: ICO начинается с 00 00 01 00, PNG — с 89 50 4E 47, SVG — с <svg или <?xml. А если встраиваешь в base64, сверяй байт-в-байт, а не «на глаз».

Связанные понятия

Литература и источники

Где встретилось у меня

Вчера в проекте сайта по недвижимости собирали блок «партнёрские ресурсы»: нужно было найти иконки нескольких сервисов, скачать их фавиконы и логотипы, встроить часть из них как base64 прямо в шаблон и сделать запасные плашки-монограммы. Один из сайтов за антибот-защитой вместо иконки отдал HTML. Отдельно обсуждали, как вытянутые логотипы поведут себя в квадратной ячейке 26×26 (object-fit: cover против contain).

Краткое резюме