Перевод статьи "Disabling My Favicon: How and Why"

Привет Хабр! Недавно в недельной подборке я увидел эту статейку на английском языке и решил ее перевести так как она показалась мне довольно интересной. Далее перевод.

И так начнем: на моем сайте нет фавикона, и, скорее всего, его никогда не будет.

Нельзя с полной уверенностью сказать, почему я пришел к такому решению, но, учитывая тот момент, что у меня нет логотипа — и я действительно не хочу его иметь — то и создание значка для сайта мне показалось излишним.

Но есть проблемка, фавикон нельзя просто не задать, поскольку большинство веб-браузеров все равно попытаются его запросить. А это в свою очередь означает, что при каждой загрузке страницы будет повторный запрос файла favicon.ico, который определится как Not Found.

Не знаю как вас, а меня это раздражает.

И так, что же нам делать?

Самый простой способ решить эту проблему это сделать прозрачную фавиконку, но это не решает мою проблему так как я хочу избавиться от лишнего запроса а не просто получить успешный ответ при запросе.

Попытка первая

Хотя пропуск тега icon и не приводит к желаемому результату, я решил поэкспериментировать со значениями, которые он дает. Моей первой попыткой было использовать простой хэш:

<link rel="shortcut icon" href="#" />

В целом, хоть это и помогло устранить ответ 404 Not Found в запросе, но затем я столкнулся с другой проблемой - повторно запрошена вся страница. Это объясняется тем, что # в конечном итоге интерпретируется браузером как https://flower.codes/#, как практически и любой другой символ, с которым вы, возможно, захотите поэкспериментировать (пробелы, вопросительные знаки и т. д.).

Итог этого решения: не подходит.

Попытка вторая

И так, мы не можем просто пропустить фавикон и не можем использовать произвольный символ... Что же тогда делать?

Немного покопавшись, я наткнулся на концепцию, с которой большинство веб-разработчиков довольно хорошо знакомы: Data URLs.

Для непосвященных: URI данных позволяют встраивать файлы непосредственно в HTML, а не выполнять внешний запрос. Если максимально упростить, они обычно состоят из определения типа загружаемого файла (например, text/html или text/plain) и содержимого файла.

Это означает, что вместо загрузки внешнего файла вы можете включить его в строку следующим образом:

data:text/html,<script>alert('hi');</script>

Однако для наших целей мы можем определить Data URL, который фактически является пустым, просто опустив как тип контента, так и само содержимое:

<link rel="shortcut icon" href="data:," />

Итог этого решения: подходит.

Хорошо, но... Зачем?

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

Но зачем мне все эти проблемы?

Хотите верьте, хотите нет, но мне на самом деле нравятся фавиконки. Я думаю, что они значительно упрощают организацию вкладок и закладок. Но во всемирной паутине, плотно заполненной ими, отказ от одного на моем собственном сайте казался маленьким способом выделиться (а пройти лишнюю милю, чтобы сделать это «правильным» способом – это просто вишенка на торте).

Если вдруг кому интересно то я веду телеграм канал по фронтенду где выкладываю интересные статьи на разные темы а так же сам периодически пишу шорт-риды которые могут быть вам полезны.

Комментарии (18)


  1. nin-jin
    02.06.2022 18:47
    +50

    Удачи вам выделиться среди всех этих сайтов.


  1. ValeriyFilatov
    02.06.2022 19:00
    -4

    Бывает полезно для локальных сайтов.


    1. san-x
      02.06.2022 19:05
      +1

      но... зачем?? ну правда, в чём польза?

      к статье вопросов нет, для автора, судя по всему, эта задача - просто фофан... а вот к утверждениям о практической пользе у меня определённо вопросы есть.


      1. ValeriyFilatov
        02.06.2022 19:16
        +3

        но… зачем?? ну правда, в чём польза?
        Чтоб лишний раз не отвлекаться на 404 во время отладки.
        Лично мне идея нравится.


        1. pda0
          02.06.2022 21:30
          +12

          location = /favicon.ico {
            log_not_found off;
            access_log off;
          }


          1. ValeriyFilatov
            02.06.2022 21:41

            Тоже хорошо.


          1. Aidar87
            03.06.2022 09:20
            +1

            Автору же не нравится лишний зарос на сервер


            1. pda0
              03.06.2022 11:21
              +1

              Так я не автору ответил, а тому, кому 404 в логах не нравилось.


        1. iig
          03.06.2022 10:48
          +4

          Чтоб лишний раз не отвлекаться на 404 во время отладки.

          touch favicon.ico


  1. SergeyDeryabin
    02.06.2022 19:06
    +7

    Целая статья на хабре для в принципе сомнительного решения не использовать favicon на сайте. Плюс само решение - использовать dataUrl и все. Статья готова


  1. Revertis
    02.06.2022 19:21
    +3

    Не убедил.


  1. alex_shpak
    02.06.2022 22:37
    +17

    Похожим способом можно поставить Emoji в качестве favicon:

    <link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%221em%22 font-size=%2280%22>????</text></svg>">

    Увидел на сайте based.cooking. Если кто знает способ покороче - поделитесь :)


    1. MTonly
      03.06.2022 03:00

      Можно вставить Emoji-симпол в начало элемента <title></title>, будет выглядеть почти как favicon. Но для закреплённых (pinned) вкладок не работает, т.к. на самом деле это всё ж не favicon. Напрашивается стандартизация.


  1. MTonly
    03.06.2022 03:02

    Некоторые роботы тупо слепо запрашивают favicon.ico в корне домена (равно как и Apple-аналоги), даже не заглядывая в код страниц.


  1. ant_dgt
    03.06.2022 09:23

    На практике, наверное, мало кто будет так делать, но в целом статья интересная, спасибо


  1. maxim_zverev
    03.06.2022 11:12

    Фавикон крайне удобен для панели закладок браузера - на каждую закладку по маленькой иконке и всё. Экономит место.


    1. Alexufo
      03.06.2022 21:57

      Я там регулярки храню, и xpath выражения , которые вечно забываю,нету там варианта с иконкой ))


      1. maxim_zverev
        03.06.2022 22:15

        Прямо на первом уровне, на самой панели? У меня такие вещи по папкам закладок, там-то конечно уже можно на представлении не экономить. На первом уровне новостные всякие там, погодные сайты, соцсети.