HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>21 авг 2025</li>
2 <ul><li>21 авг 2025</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Рассказываем, как правильно использовать тег для подключения внешних ресурсов к нашей странице.</p>
4 </ul><p>Рассказываем, как правильно использовать тег для подключения внешних ресурсов к нашей странице.</p>
5 <p>Иллюстрация: Polina Vari для Skillbox Media</p>
5 <p>Иллюстрация: Polina Vari для Skillbox Media</p>
6 <p>Онлайн-журнал для тех, кто влюблён в код и информационные технологии. Пишем для айтишников и об айтишниках.</p>
6 <p>Онлайн-журнал для тех, кто влюблён в код и информационные технологии. Пишем для айтишников и об айтишниках.</p>
7 <p>С помощью тега &lt;link&gt; к HTML-документу подключают внешние ресурсы. Чаще всего это таблицы стилей (CSS), иконки, шрифты и другие файлы, которые помогают странице быть красивой.</p>
7 <p>С помощью тега &lt;link&gt; к HTML-документу подключают внешние ресурсы. Чаще всего это таблицы стилей (CSS), иконки, шрифты и другие файлы, которые помогают странице быть красивой.</p>
8 <p>В этой статье мы поговорим о том, как устроен тег &lt;link&gt;, какие у него атрибуты и как правильно его использовать в разных задачах.</p>
8 <p>В этой статье мы поговорим о том, как устроен тег &lt;link&gt;, какие у него атрибуты и как правильно его использовать в разных задачах.</p>
9 <p><strong>Содержание</strong></p>
9 <p><strong>Содержание</strong></p>
10 <ul><li><a>Что такое тег &lt;link&gt; и зачем он нужен</a></li>
10 <ul><li><a>Что такое тег &lt;link&gt; и зачем он нужен</a></li>
11 <li><a>Атрибуты тега &lt;link&gt;</a></li>
11 <li><a>Атрибуты тега &lt;link&gt;</a></li>
12 <li><a>Предзагрузка файлов</a></li>
12 <li><a>Предзагрузка файлов</a></li>
13 <li><a>Частые ошибки при подключении стилей или иконок</a></li>
13 <li><a>Частые ошибки при подключении стилей или иконок</a></li>
14 </ul><p>Тег &lt;link&gt; находится внутри &lt;head&gt;. Пользователи его не видят, он только помогает браузеру правильно загрузить и оформить сайт.</p>
14 </ul><p>Тег &lt;link&gt; находится внутри &lt;head&gt;. Пользователи его не видят, он только помогает браузеру правильно загрузить и оформить сайт.</p>
15 <p>Всё, что находится в &lt;head&gt;, загружается до того, как страница отобразится. Это важно: если &lt;link&gt; разместить в другом месте, пользователь увидит мигание - сначала необработанную вёрстку, а потом уже оформленную страницу. Поэтому &lt;link&gt; и помещают в &lt;head&gt;.</p>
15 <p>Всё, что находится в &lt;head&gt;, загружается до того, как страница отобразится. Это важно: если &lt;link&gt; разместить в другом месте, пользователь увидит мигание - сначала необработанную вёрстку, а потом уже оформленную страницу. Поэтому &lt;link&gt; и помещают в &lt;head&gt;.</p>
16 <p>С помощью тега можно решить несколько задач:</p>
16 <p>С помощью тега можно решить несколько задач:</p>
17 <ul><li>подключить таблицы стилей CSS;</li>
17 <ul><li>подключить таблицы стилей CSS;</li>
18 <li>подключить фавиконку - это иконка сайта, которую видно на вкладке браузера;</li>
18 <li>подключить фавиконку - это иконка сайта, которую видно на вкладке браузера;</li>
19 <li>подключить внешние шрифты, например, из Google Fonts;</li>
19 <li>подключить внешние шрифты, например, из Google Fonts;</li>
20 <li>сообщить браузеру, какие файлы нужно загрузить заранее, ещё до того, как они реально понадобятся на странице.</li>
20 <li>сообщить браузеру, какие файлы нужно загрузить заранее, ещё до того, как они реально понадобятся на странице.</li>
21 </ul><p>Тег &lt;link&gt; непарный, ему не нужен закрывающий тег. Всю информацию браузеру мы передаём с помощью атрибутов.</p>
21 </ul><p>Тег &lt;link&gt; непарный, ему не нужен закрывающий тег. Всю информацию браузеру мы передаём с помощью атрибутов.</p>
22 <p>Основные атрибуты, которые мы рассмотрим, - rel и href, type, media, crossorigin, sizes. Вообще, их намного больше, мы выбрали только самые распространённые.</p>
22 <p>Основные атрибуты, которые мы рассмотрим, - rel и href, type, media, crossorigin, sizes. Вообще, их намного больше, мы выбрали только самые распространённые.</p>
23 <p>С этим атрибутом всё просто: он указывает путь к подключаемому файлу. Например, если ваш CSS-файл лежит в папке css, путь будет таким:</p>
23 <p>С этим атрибутом всё просто: он указывает путь к подключаемому файлу. Например, если ваш CSS-файл лежит в папке css, путь будет таким:</p>
24 &lt;link href="css/style.css"&gt;<p>С помощью этого же атрибута подключаются внешние шрифты. Обычно вы выбираете подходящий шрифт в библиотеке, а она сама выдаёт вам готовую ссылку для подключения. Выглядит эта ссылка обычно так:</p>
24 &lt;link href="css/style.css"&gt;<p>С помощью этого же атрибута подключаются внешние шрифты. Обычно вы выбираете подходящий шрифт в библиотеке, а она сама выдаёт вам готовую ссылку для подключения. Выглядит эта ссылка обычно так:</p>
25 &lt;link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&amp;display=swap" rel="stylesheet"&gt;<p>Здесь ещё используется атрибут rel, о нём мы поговорим в следующем разделе.</p>
25 &lt;link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&amp;display=swap" rel="stylesheet"&gt;<p>Здесь ещё используется атрибут rel, о нём мы поговорим в следующем разделе.</p>
26 <p>Следующий атрибут - rel. Он объясняет браузеру, что за связь между HTML-документом и указанным в href файлом. Без этого браузер не поймёт, что вы подключаете именно стили, и может проигнорировать &lt;link&gt;.</p>
26 <p>Следующий атрибут - rel. Он объясняет браузеру, что за связь между HTML-документом и указанным в href файлом. Без этого браузер не поймёт, что вы подключаете именно стили, и может проигнорировать &lt;link&gt;.</p>
27 <p>Для подключения CSS используем:</p>
27 <p>Для подключения CSS используем:</p>
28 &lt;link rel="stylesheet" href="css/style.css"&gt;<p>Всего у rel четыре значения:</p>
28 &lt;link rel="stylesheet" href="css/style.css"&gt;<p>Всего у rel четыре значения:</p>
29 <ul><li>stylesheet - подключение таблицы стилей CSS;</li>
29 <ul><li>stylesheet - подключение таблицы стилей CSS;</li>
30 <li>icon - подключение иконки сайта (favicon);</li>
30 <li>icon - подключение иконки сайта (favicon);</li>
31 <li>preload - предварительная загрузка ресурсов;</li>
31 <li>preload - предварительная загрузка ресурсов;</li>
32 <li>alternate - ссылка на альтернативную версию страницы, например, на другом языке.</li>
32 <li>alternate - ссылка на альтернативную версию страницы, например, на другом языке.</li>
33 </ul><p>В этом атрибуте мы объясняем браузеру, что за тип у файла, который мы собираемся подключить.</p>
33 </ul><p>В этом атрибуте мы объясняем браузеру, что за тип у файла, который мы собираемся подключить.</p>
34 <p>Для таблицы стилей используем:</p>
34 <p>Для таблицы стилей используем:</p>
35 &lt;link rel="stylesheet" href="css/style.css" type="text/css"&gt;<p>А для фавиконки:</p>
35 &lt;link rel="stylesheet" href="css/style.css" type="text/css"&gt;<p>А для фавиконки:</p>
36 &lt;link rel="icon" href="favicon.ico" type="image/x-icon"&gt;<p>Вообще, в большинстве случаев атрибут type писать не обязательно - современные браузеры сами определяют тип файла по расширению. Например, если подключить CSS-файл и написать:</p>
36 &lt;link rel="icon" href="favicon.ico" type="image/x-icon"&gt;<p>Вообще, в большинстве случаев атрибут type писать не обязательно - современные браузеры сами определяют тип файла по расширению. Например, если подключить CSS-файл и написать:</p>
37 &lt;link rel="stylesheet" href="style.css"&gt;<p>Браузер поймёт, что это таблица стилей, даже если вы не указали type="text/css". То же касается фавиконки с расширением .ico.</p>
37 &lt;link rel="stylesheet" href="style.css"&gt;<p>Браузер поймёт, что это таблица стилей, даже если вы не указали type="text/css". То же касается фавиконки с расширением .ico.</p>
38 <p>Но бывают ситуации, когда type лучше всё же указать:</p>
38 <p>Но бывают ситуации, когда type лучше всё же указать:</p>
39 <ul><li><strong>Вы заботитесь о совместимости со старыми браузерами.</strong>Некоторые из них не определяют тип файла по расширению. Особенно старые версии Internet Explorer.</li>
39 <ul><li><strong>Вы заботитесь о совместимости со старыми браузерами.</strong>Некоторые из них не определяют тип файла по расширению. Особенно старые версии Internet Explorer.</li>
40 <li><strong>У файла нестандартное расширение или его вообще нет.</strong>В такой ситуации браузер может и не догадаться, чего вы от него хотите.</li>
40 <li><strong>У файла нестандартное расширение или его вообще нет.</strong>В такой ситуации браузер может и не догадаться, чего вы от него хотите.</li>
41 <li><strong>Код будет встраиваться в другие системы или платформы.</strong>В некоторых CMS или конструкторах сайтов требуется явно указывать типы.</li>
41 <li><strong>Код будет встраиваться в другие системы или платформы.</strong>В некоторых CMS или конструкторах сайтов требуется явно указывать типы.</li>
42 </ul><p>В остальных случаях можно опустить type без проблем. Код останется рабочим.</p>
42 </ul><p>В остальных случаях можно опустить type без проблем. Код останется рабочим.</p>
43 <p>Атрибут sizes адаптирует фавиконку под разные устройства. Его используют вместе с &lt;link rel="icon"&gt;. Он подсказывает браузеру, для каких размеров экрана подходит конкретная иконка.</p>
43 <p>Атрибут sizes адаптирует фавиконку под разные устройства. Его используют вместе с &lt;link rel="icon"&gt;. Он подсказывает браузеру, для каких размеров экрана подходит конкретная иконка.</p>
44 <p>Значение указывается в формате ширина x высота, например:</p>
44 <p>Значение указывается в формате ширина x высота, например:</p>
45 <ul><li>16×16 - маленькая иконка для старых браузеров;</li>
45 <ul><li>16×16 - маленькая иконка для старых браузеров;</li>
46 <li>32×32 - универсальный размер для большинства устройств;</li>
46 <li>32×32 - универсальный размер для большинства устройств;</li>
47 <li>48×48 - для экранов с высоким разрешением;</li>
47 <li>48×48 - для экранов с высоким разрешением;</li>
48 <li>any - используется с векторными SVG-иконками, которые можно масштабировать до любого размера.</li>
48 <li>any - используется с векторными SVG-иконками, которые можно масштабировать до любого размера.</li>
49 </ul><p>В коде это выглядит так:</p>
49 </ul><p>В коде это выглядит так:</p>
50 &lt;link rel="icon" href="images/favicon-small.png" sizes="16x16" type="image/png"&gt; &lt;link rel="icon" href="images/favicon-medium.png" sizes="32x32" type="image/png"&gt; &lt;link rel="icon" href="images/favicon-large.png" sizes="48x48" type="image/png"&gt; &lt;link rel="icon" href="images/favicon.svg" sizes="any" type="image/svg+xml"&gt;<p>Иногда бывает нужно, чтобы сайт выглядел по-своему в разных ситуациях. Например, одни стили - для экрана компьютера, другие - для телефона, а третьи - для печати. Чтобы такое сделать, мы прописываем стили в разных файлах, подключаем их и добавляем к тегу &lt;link&gt; атрибут media. Он подсказывает браузеру, когда использовать конкретный CSS-файл.</p>
50 &lt;link rel="icon" href="images/favicon-small.png" sizes="16x16" type="image/png"&gt; &lt;link rel="icon" href="images/favicon-medium.png" sizes="32x32" type="image/png"&gt; &lt;link rel="icon" href="images/favicon-large.png" sizes="48x48" type="image/png"&gt; &lt;link rel="icon" href="images/favicon.svg" sizes="any" type="image/svg+xml"&gt;<p>Иногда бывает нужно, чтобы сайт выглядел по-своему в разных ситуациях. Например, одни стили - для экрана компьютера, другие - для телефона, а третьи - для печати. Чтобы такое сделать, мы прописываем стили в разных файлах, подключаем их и добавляем к тегу &lt;link&gt; атрибут media. Он подсказывает браузеру, когда использовать конкретный CSS-файл.</p>
51 <p>У атрибута есть несколько значений:</p>
51 <p>У атрибута есть несколько значений:</p>
52 <ul><li>all - стили работают всегда (это значение по умолчанию).</li>
52 <ul><li>all - стили работают всегда (это значение по умолчанию).</li>
53 <li>screen - стили работают, когда пользователь использует устройство с экраном, то есть телефон, планшет, десктоп и прочие.</li>
53 <li>screen - стили работают, когда пользователь использует устройство с экраном, то есть телефон, планшет, десктоп и прочие.</li>
54 <li>print - включается, когда пользователь печатает страницу.</li>
54 <li>print - включается, когда пользователь печатает страницу.</li>
55 <li>speech - для скринридеров - устройств, которые озвучивают текст для людей с проблемами зрения.</li>
55 <li>speech - для скринридеров - устройств, которые озвучивают текст для людей с проблемами зрения.</li>
56 <li>screen and (max-width: 768px) - применяется только к экранам меньше указанной ширины.</li>
56 <li>screen and (max-width: 768px) - применяется только к экранам меньше указанной ширины.</li>
57 </ul><p>Синтаксис выглядит так:</p>
57 </ul><p>Синтаксис выглядит так:</p>
58 &lt;link rel="stylesheet" href="css/style.css" type="text/css"&gt; &lt;link rel="stylesheet" href="css/print.css" media="print" type="text/css"&gt; &lt;link rel="stylesheet" href="css/mobile.css" media="screen and (max-width: 768px)" type="text/css"&gt; &lt;link rel="stylesheet" href="css/desktop.css" media="screen<p>Иногда мы подключаем ресурсы не со своего сайта, а с другого домена. Это называют кросс-доменными запросами. Атрибут crossorigin сообщает браузеру, нужно ли передавать при таком запросе учётные данные: куки, заголовки авторизации и тому подобное.</p>
58 &lt;link rel="stylesheet" href="css/style.css" type="text/css"&gt; &lt;link rel="stylesheet" href="css/print.css" media="print" type="text/css"&gt; &lt;link rel="stylesheet" href="css/mobile.css" media="screen and (max-width: 768px)" type="text/css"&gt; &lt;link rel="stylesheet" href="css/desktop.css" media="screen<p>Иногда мы подключаем ресурсы не со своего сайта, а с другого домена. Это называют кросс-доменными запросами. Атрибут crossorigin сообщает браузеру, нужно ли передавать при таком запросе учётные данные: куки, заголовки авторизации и тому подобное.</p>
59 <p>Значения атрибута:</p>
59 <p>Значения атрибута:</p>
60 <ul><li>anonymous - запрос выполняется без учёных данных. Браузер не будет отправлять cookie, сертификаты и заголовки HTTP basic authentication. Значение по умолчанию.</li>
60 <ul><li>anonymous - запрос выполняется без учёных данных. Браузер не будет отправлять cookie, сертификаты и заголовки HTTP basic authentication. Значение по умолчанию.</li>
61 <li>use-credentials - запрос выполняется с отправкой учётных данных.</li>
61 <li>use-credentials - запрос выполняется с отправкой учётных данных.</li>
62 </ul><p>Пример подключения иконки с другого домена:</p>
62 </ul><p>Пример подключения иконки с другого домена:</p>
63 &lt;link rel="icon" href="https://example.com/favicon.png" type="image/png" crossorigin="anonymous"&gt;<p>В большинстве случаев достаточно использовать anonymous или вообще не указывать атрибут - браузеры работают с ним по умолчанию.</p>
63 &lt;link rel="icon" href="https://example.com/favicon.png" type="image/png" crossorigin="anonymous"&gt;<p>В большинстве случаев достаточно использовать anonymous или вообще не указывать атрибут - браузеры работают с ним по умолчанию.</p>
64 <p>Браузер обычно загружает все ресурсы в том порядке, в котором они прописаны в коде. Но мы можем заранее указать, какие ресурсы хотим загрузить первыми. Это называется предзагрузка (preload). Предзагрузка - часть оптимизации сайта, благодаря ей страница загружается быстрее.</p>
64 <p>Браузер обычно загружает все ресурсы в том порядке, в котором они прописаны в коде. Но мы можем заранее указать, какие ресурсы хотим загрузить первыми. Это называется предзагрузка (preload). Предзагрузка - часть оптимизации сайта, благодаря ей страница загружается быстрее.</p>
65 <p>Чтобы включить предзагрузку, используем атрибут rel="preload", который сообщает браузеру, что ресурс нужно загрузить заранее, и атрибут as, который подсказывает, что именно мы загружаем: изображение, шрифт, скрипт и так далее.</p>
65 <p>Чтобы включить предзагрузку, используем атрибут rel="preload", который сообщает браузеру, что ресурс нужно загрузить заранее, и атрибут as, который подсказывает, что именно мы загружаем: изображение, шрифт, скрипт и так далее.</p>
66 &lt;link rel="preload" href="fonts/main.woff2" as="font" type="font/woff2" crossorigin="anonymous"&gt; &lt;link rel="preload" href="image.jpg" as="image"&gt;<p>В первом примере мы говорим браузеру сначала загрузить шрифт, а во втором - изображение.</p>
66 &lt;link rel="preload" href="fonts/main.woff2" as="font" type="font/woff2" crossorigin="anonymous"&gt; &lt;link rel="preload" href="image.jpg" as="image"&gt;<p>В первом примере мы говорим браузеру сначала загрузить шрифт, а во втором - изображение.</p>
67 <p>Атрибут rel может повлиять на последовательность загрузки и другими способами:</p>
67 <p>Атрибут rel может повлиять на последовательность загрузки и другими способами:</p>
68 <ul><li>prefetch - загружает файл в фоне после основной загрузки страницы. Это делается, если мы ожидаем от пользователя какого-то действия - скажем, перехода на следующую страницу: файл окажется в кэше, и посетитель сразу сможет его использовать.</li>
68 <ul><li>prefetch - загружает файл в фоне после основной загрузки страницы. Это делается, если мы ожидаем от пользователя какого-то действия - скажем, перехода на следующую страницу: файл окажется в кэше, и посетитель сразу сможет его использовать.</li>
69 <li>prerender - полностью загружает следующую страницу в фоне, чтобы при переходе она открылась мгновенно.</li>
69 <li>prerender - полностью загружает следующую страницу в фоне, чтобы при переходе она открылась мгновенно.</li>
70 <li>preconnect - если нужно установить соединение с другим сервером, браузер сделает это заранее. Дело в том, что при соединении серверам нужно обменяться информацией. Обычно это занимает доли секунды, но, если канал перегружен, это может заметно замедлить загрузку.</li>
70 <li>preconnect - если нужно установить соединение с другим сервером, браузер сделает это заранее. Дело в том, что при соединении серверам нужно обменяться информацией. Обычно это занимает доли секунды, но, если канал перегружен, это может заметно замедлить загрузку.</li>
71 <li>dns-prefetch - ускоряет определение IP-адреса внешнего домена. Когда браузеру нужно загрузить ресурс с другого сайта, он сначала должен узнать IP-адрес этого домена. Для этого он делает DNS-запрос. Этот процесс называется разрешением доменного имени и может занять несколько десятков миллисекунд. Если таких ресурсов много, задержка становится заметной. dns-prefetch позволяет сделать всё это заранее.</li>
71 <li>dns-prefetch - ускоряет определение IP-адреса внешнего домена. Когда браузеру нужно загрузить ресурс с другого сайта, он сначала должен узнать IP-адрес этого домена. Для этого он делает DNS-запрос. Этот процесс называется разрешением доменного имени и может занять несколько десятков миллисекунд. Если таких ресурсов много, задержка становится заметной. dns-prefetch позволяет сделать всё это заранее.</li>
72 </ul><p>Если вы укажете rel="preload", но не добавите as, браузер не поймёт, какой тип ресурса вы хотите предзагрузить, и просто не станет этого делать. Кроме того, важно точно указать тип: as="font" - для шрифта, as="image" - для картинки и так далее.</p>
72 </ul><p>Если вы укажете rel="preload", но не добавите as, браузер не поймёт, какой тип ресурса вы хотите предзагрузить, и просто не станет этого делать. Кроме того, важно точно указать тип: as="font" - для шрифта, as="image" - для картинки и так далее.</p>
73 <p>Если вы подключаете файл через preload, но потом нигде его не используете, браузер потратит время и трафик зря. Это может даже замедлить загрузку страницы. Загружайте только то, что действительно понадобится.</p>
73 <p>Если вы подключаете файл через preload, но потом нигде его не используете, браузер потратит время и трафик зря. Это может даже замедлить загрузку страницы. Загружайте только то, что действительно понадобится.</p>
74 <p>Если добавить в preload слишком много ресурсов - например, все шрифты на сайте, - они начнут загружаться одновременно и мешать друг другу. Используйте preload только для действительно ценных элементов.</p>
74 <p>Если добавить в preload слишком много ресурсов - например, все шрифты на сайте, - они начнут загружаться одновременно и мешать друг другу. Используйте preload только для действительно ценных элементов.</p>
75 <p>Узнать больше о теге &lt;link&gt; и его атрибутах вы сможете, прочитав<a>документацию</a>.</p>
75 <p>Узнать больше о теге &lt;link&gt; и его атрибутах вы сможете, прочитав<a>документацию</a>.</p>
76 <a>Курс с трудоустройством: "Профессия Фронтенд-разработчик + ИИ" Узнать о курсе</a>
76 <a>Курс с трудоустройством: "Профессия Фронтенд-разработчик + ИИ" Узнать о курсе</a>