Перевод статьи "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)
ValeriyFilatov
02.06.2022 19:00-4Бывает полезно для локальных сайтов.
san-x
02.06.2022 19:05+1но... зачем?? ну правда, в чём польза?
к статье вопросов нет, для автора, судя по всему, эта задача - просто фофан... а вот к утверждениям о практической пользе у меня определённо вопросы есть.
ValeriyFilatov
02.06.2022 19:16+3но… зачем?? ну правда, в чём польза?
Чтоб лишний раз не отвлекаться на 404 во время отладки.
Лично мне идея нравится.
SergeyDeryabin
02.06.2022 19:06+7Целая статья на хабре для в принципе сомнительного решения не использовать favicon на сайте. Плюс само решение - использовать dataUrl и все. Статья готова
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. Если кто знает способ покороче - поделитесь :)
MTonly
03.06.2022 03:00Можно вставить Emoji-симпол в начало элемента
<title></title>
, будет выглядеть почти как favicon. Но для закреплённых (pinned) вкладок не работает, т.к. на самом деле это всё ж не favicon. Напрашивается стандартизация.
MTonly
03.06.2022 03:02Некоторые роботы
тупослепо запрашиваютfavicon.ico
в корне домена (равно как и Apple-аналоги), даже не заглядывая в код страниц.
ant_dgt
03.06.2022 09:23На практике, наверное, мало кто будет так делать, но в целом статья интересная, спасибо
maxim_zverev
03.06.2022 11:12Фавикон крайне удобен для панели закладок браузера - на каждую закладку по маленькой иконке и всё. Экономит место.
Alexufo
03.06.2022 21:57Я там регулярки храню, и xpath выражения , которые вечно забываю,нету там варианта с иконкой ))
maxim_zverev
03.06.2022 22:15Прямо на первом уровне, на самой панели? У меня такие вещи по папкам закладок, там-то конечно уже можно на представлении не экономить. На первом уровне новостные всякие там, погодные сайты, соцсети.
nin-jin
Удачи вам выделиться среди всех этих сайтов.