dns-prefetch, preconnect, preload: пайплайн префетчинга в 2026
Четыре способа подсказать браузеру что грузить заранее. Когда использовать каждый, как не перегрузить сеть и как выжать максимум из LCP.
В современном вебе сайт грузит десятки сторонних ресурсов: шрифты, аналитика, видео, чаты, картинки с CDN. Каждый — это DNS-резолв, TCP-handshake, TLS-handshake, HTTP-запрос. Несколько сотен миллисекунд на каждое новое соединение. Если эти соединения сделать заранее — основной контент рендерится быстрее.
В этой статье разбираем четыре rel-подсказки браузеру для префетчинга и когда какую использовать.
Четыре уровня подсказок
От самого лёгкого к самому тяжёлому:
- dns-prefetch — резолв DNS
- preconnect — DNS + TCP + TLS handshake
- prefetch — скачать ресурс с низким приоритетом (для будущего использования)
- preload — скачать ресурс с высоким приоритетом (для текущей страницы)
Каждый «сильнее» предыдущего и решает свою задачу.
dns-prefetch
Самая лёгкая подсказка. Браузер начинает DNS-резолв указанного домена, не открывая соединения.
<link rel="dns-prefetch" href="//fonts.googleapis.com">
DNS-резолв занимает обычно 20-50 мс на холодном кеше. Если ресурс с этого домена понадобится позже, время резолва уже потрачено заранее — ресурс начнёт загружаться быстрее на эти 20-50 мс.
Когда использовать:
- На сторонние домены, которые понадобятся точно (аналитика, шрифты, чаты)
- Когда вы НЕ уверены, что соединение точно понадобится —
dns-prefetchдешёвый, не больно если не пригодится - Для нескольких доменов сразу — браузер сделает резолв всех параллельно
Чего не делать:
- Не делайте dns-prefetch на 30 доменов «на всякий случай». Каждый отъедает crawl рейтинг приоритета.
- Не делайте на доменах, к которым обращаетесь по
<link rel="preconnect">— preconnect уже включает DNS-резолв.
preconnect
Браузер делает DNS-резолв И открывает TCP-соединение И инициирует TLS-handshake. Когда придёт реальный запрос — соединение уже готово, можно сразу слать запрос.
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
Сэкономленное время: 100-300 мс (DNS + handshake). На холодном соединении — больше.
Когда использовать:
- Для домена, который точно понадобится (CDN с критичными ресурсами, шрифт-провайдер)
- Когда ресурс будет нужен через 100+ мс от загрузки HTML
- Только 3-5 доменов максимум — больше нагрузит сеть
Важный нюанс — crossorigin:
Если запрашиваете шрифты или другие ресурсы с CORS-запросом, нужен атрибут crossorigin без значения (для credentials="omit") или с crossorigin="use-credentials". Без этого preconnect и реальный запрос откроют разные соединения, и preconnect зря потрачен.
Пример с Google Fonts:
<!-- Правильно -->
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<!-- Неправильно -->
<link rel="preconnect" href="https://fonts.gstatic.com">
Без crossorigin шрифт будет качаться через новое соединение, preconnect сработает впустую.
preload
Самая сильная подсказка. Браузер не только открывает соединение, но и скачивает ресурс с высоким приоритетом.
<link rel="preload" href="/fonts/inter.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/hero-image.webp" as="image">
<link rel="preload" href="/critical.js" as="script">
Используется для критических ресурсов, которые точно нужны для рендера above-the-fold.
Когда использовать:
- Главный шрифт, который применяется в above-the-fold
- Hero-картинка (LCP-кандидат)
- Критический JS-чанк
Атрибут as:
Обязателен для preload. Говорит браузеру какой тип ресурса. Возможные:
font— шрифт (требует crossorigin)image— картинкаscript— JSstyle— CSSfetch— XHR/Fetch запросvideo— видео
Без as браузер не знает приоритет и часто игнорирует preload.
Чего не делать:
- Не preload-ить десятки ресурсов. Если всё имеет высокий приоритет — ничто не имеет высокого приоритета. 3-5 preload на страницу — оптимум.
- Не preload-ить ресурсы, которые могут не понадобиться. Если pre-loaded ресурс не используется на странице, браузер ругается в DevTools «preload was not used».
prefetch
Скачивание ресурса с низким приоритетом, для использования на следующих страницах.
<link rel="prefetch" href="/next-page.html">
<link rel="prefetch" href="/large-bundle.js">
Браузер скачает указанный ресурс в idle-времени, когда основная страница уже отрендерилась и сеть свободна. Если пользователь перейдёт по соответствующей ссылке — ресурс уже в кеше, переход почти мгновенный.
Когда использовать:
- Следующая логичная страница (например, на главной можно prefetch-ить «о компании» если 50% пользователей туда переходят)
- Чанки SPA-приложения, к которым пользователь скорее всего перейдёт
- Большие ресурсы, которые понадобятся «потом, но точно»
Когда не использовать:
- На медленных соединениях (mobile через 3G). Prefetch может «съесть» трафик пользователя и ничего не дать.
- На страницах, где переходы редкие и непредсказуемые.
- Когда вы не уверены, что пользователь пойдёт именно туда.
Современная альтернатива: Speculation Rules API
С 2024 года в Chrome (а с 2026 — в большинстве браузеров) появился Speculation Rules API. Это более продвинутая система предзагрузки страниц:
<script type="speculationrules">
{
"prerender": [{
"where": { "href_matches": "/article/*" },
"eagerness": "moderate"
}]
}
</script>
Браузер начинает prerender (не просто prefetch, а полную загрузку и рендер) указанных страниц в фоне, когда пользователь наводит мышь на ссылку или есть другие признаки намерения кликнуть. Переход — мгновенный.
Это будущее. На современных Chrome и Edge работает уже в 2026, на остальных — постепенно подтягивается.
Стратегия: что и когда использовать
Под типовой коммерческий сайт:
<head>
<!-- Шрифты с CDN -->
<link rel="preconnect" href="https://api.fontshare.com" crossorigin>
<link rel="preload" href="/fonts/main.woff2" as="font" type="font/woff2" crossorigin>
<!-- LCP-картинка -->
<link rel="preload" href="/hero-bg.webp" as="image">
<!-- Аналитика и чат — не критичны, dns-prefetch достаточно -->
<link rel="dns-prefetch" href="//mc.yandex.ru">
<link rel="dns-prefetch" href="//www.googletagmanager.com">
<!-- Внутри body можно prefetch для следующих страниц -->
<link rel="prefetch" href="/uslugi/">
<link rel="prefetch" href="/cases/">
</head>
Это даёт оптимальный баланс — критичные ресурсы preload-ятся с высоким приоритетом, второстепенные домены резолвятся заранее, следующие страницы скачиваются в фоне.
Реальные цифры
На типовом сайте без префетча:
- LCP: 2400 мс
- TTI: 3200 мс
После добавления preload для шрифта и hero-картинки + preconnect для шрифтового CDN:
- LCP: 1800 мс
- TTI: 2700 мс
Прирост — 600 мс к LCP. Большой эффект от минимальных правок в <head>.
Чего избегать
- Слишком много preload — каждый preload забирает приоритет у других ресурсов. Если у вас 20 preload, ни один реально не приоритетный.
- dns-prefetch там, где уже есть preconnect — preconnect уже делает DNS-резолв. Дублирование.
- prefetch на медленных соединениях — респектируйте
prefers-reduced-dataчерез JS-чек. - preload без
as— игнорируется браузером. - preload шрифта без
crossorigin— браузер качает два раза.
Резюме
Префетчинг — мощный и недорогой способ ускорить сайт. dns-prefetch для «возможно нужно», preconnect для «точно нужно скоро», preload для «нужно прямо сейчас», prefetch для «нужно на следующей странице». Применяйте осознанно — не больше 5 preload + 3 preconnect + 5 dns-prefetch на страницу.
Хотите аудит префетчинга вашего сайта? Напишите нам. Бесплатно за 2 рабочих дня.