Как настроить preload для шрифта без лишних сетевых запросов

Чтобы настроить preload для шрифта без лишних сетевых запросов, заранее загружайте только тот файл WOFF2, который нужен для текста в первом экране, и полностью совпадайте с URL в CSS. Укажите тип ресурса, режим CORS и проверьте вкладку Network: один шрифт должен загружаться одним запросом, без повторного обращения браузера.
Актуальность материала: 22 июля 2026 года. Инструкция подходит для сайтов, где шрифты подключаются локально или с CDN, а основная задача — ускорить появление текста и не создать дополнительную загрузку того же файла.
Что делает preload для шрифта
Preload — подсказка браузеру, что определённый ресурс понадобится странице в ближайшее время. Для шрифта она позволяет начать загрузку файла раньше, чем браузер дойдёт до правила в CSS и поймёт, что этот ресурс нужен для отрисовки текста. Это особенно полезно для гарнитуры, которая используется в заголовке или основном тексте первого экрана.
Preload не заменяет подключение шрифта в CSS и не отменяет обычный запрос. Он лишь меняет момент старта загрузки. После получения файла браузер использует его при обработке правила font-face. Если предварительная загрузка настроена с другим адресом, форматом или режимом запроса, браузер может скачать тот же шрифт повторно.
Что проверить перед настройкой
До добавления preload определите, какие начертания действительно видны пользователю до прокрутки. Не стоит предварительно загружать всю коллекцию начертаний, если на первом экране используется один обычный или полужирный стиль. Каждый лишний ресурс конкурирует за пропускную способность с HTML, CSS, изображениями и скриптами.
- Определите семейство, начертание и толщину, которые нужны первому экрану.
- Проверьте, что файл доступен в формате WOFF2 и не требует устаревших форматов без необходимости.
- Найдите точный URL файла в правиле font-face.
- Уточните, размещён ли ресурс на том же домене или на CDN.
- Убедитесь, что сервер отдаёт корректный MIME-тип для шрифта и разрешает CORS при междоменной загрузке.
Пошаговая настройка предварительной загрузки
Шаг 1. Найдите шрифт первого экрана
Откройте CSS и найдите правило font-face, которое применяется к видимому сразу тексту. Зафиксируйте семейство, значение font-weight, стиль font-style и путь в свойстве src. Например, заголовок может использовать семейство Brand Sans, толщину 700 и файл brand-sans-bold.woff2. Именно этот файл, а не весь набор гарнитуры, станет кандидатом для preload.
Шаг 2. Выберите точный файл WOFF2
URL предварительно загружаемого ресурса должен побайтно соответствовать адресу, который браузер увидит в CSS. Проверьте путь, регистр символов, расширение, параметры запроса и версию файла. Адрес с параметром version=2 и адрес без него могут считаться разными ресурсами. Даже небольшое расхождение способно привести к двум обращениям к серверу.
Шаг 3. Задайте обязательные параметры
В элементе link для предварительной загрузки укажите rel со значением preload, href с точным адресом файла, as со значением font и type со значением font/woff2. Для шрифта также добавьте crossorigin со значением anonymous. Такой режим должен совпадать с тем, как браузер получает шрифт; это снижает риск повторного запроса, особенно при использовании CDN.
Шаг 4. Синхронизируйте preload с CSS
Проверьте, что CSS ссылается на тот же файл и не подменяет его другим источником. Если в предварительной загрузке указан обычный стиль, а заголовок требует italic, браузер всё равно запросит курсив отдельно. Аналогично различаются веса 400 и 500. Preload ускоряет конкретный ресурс, но не угадывает нужное начертание.
Согласуйте также домен и протокол. Не используйте в preload адрес CDN, если CSS получает файл с основного домена. Не смешивайте HTTP и HTTPS. При сборке проекта убедитесь, что хеш в имени файла обновляется одновременно в HTML и таблице стилей; устаревшая ссылка создаёт бесполезный запрос или ошибку 404.
Шаг 5. Проверьте результат в DevTools
Откройте инструменты разработчика браузера, перейдите на вкладку Network и включите фильтр по Font или по расширению woff2. Обновите страницу с очищенным кешем. В колонке Initiator должно быть видно, что ресурс начал загружаться через preload, а в списке запросов он должен присутствовать один раз. Проверьте статус ответа, размер, время и отсутствие повторной загрузки после применения CSS.
Практические примеры для разных сценариев
Локальный шрифт для заголовка
Представим страницу, где первый экран использует только Brand Sans Bold в формате WOFF2. В HTML предварительно загружается файл /fonts/brand-sans-bold.woff2, а в CSS правило font-face указывает тот же путь, тот же формат и толщину 700. В этом случае браузер получает подсказку заранее, а затем применяет уже загруженный ресурс к заголовку без второго обращения.
- Загружайте один файл, если первый экран использует одно начертание.
- Сохраняйте одинаковый абсолютный или относительный путь в HTML и CSS.
- Оставляйте font-display: swap, если текст должен оставаться видимым во время загрузки.
- Не добавляйте файлы кириллицы и латиницы отдельно, если конкретный набор уже объединён в одном ресурсе.
Шрифт на CDN
При размещении файла на CDN проверьте два условия: сервер должен разрешать запросы с домена сайта, а адрес в preload и CSS должен совпадать. Атрибут crossorigin со значением anonymous указывают и для междоменного шрифта. Если CDN меняет URL, добавляет редирект или подставляет разные параметры кеширования, сначала устраните это расхождение, а затем оценивайте пользу preload.
Переменный шрифт
Переменный шрифт может покрывать диапазон толщин одним файлом, но это не означает, что его всегда нужно загружать заранее. Оцените размер ресурса и роль на первом экране. Если один variable font используется для заголовка и текста сразу, preload может быть оправдан. Если файл тяжёлый и нужен только после взаимодействия, лучше не повышать его приоритет без необходимости.
Когда preload лучше не использовать
Предварительная загрузка не является универсальным ускорителем. Она повышает приоритет выбранного ресурса, поэтому чрезмерное количество подсказок может замедлить более важные операции. На странице с несколькими гарнитурами выбирайте только те файлы, которые необходимы для раннего содержимого, а остальные оставляйте для обычной загрузки после обнаружения CSS.
- Не загружайте заранее шрифты, которые используются только в нижней части страницы.
- Не добавляйте preload для каждого веса и стиля без проверки реального использования.
- Не дублируйте подсказки в нескольких шаблонах или компонентах.
- Не применяйте preload к файлу, который меняется при каждом запросе и плохо кешируется.
- Не заменяйте оптимизацию размера шрифта одной только предварительной загрузкой.
Частые ошибки и способы их исправить
- Указывают неверное значение as. Для шрифта нужно использовать font, иначе браузер иначе распределяет приоритет и может предупредить о неиспользованной подсказке.
- Забывают crossorigin. Для font-ресурсов режим запроса важен; добавьте anonymous и проверьте, что сервер допускает такой запрос.
- Предварительно загружают файл из CSS с другим URL. Сверьте путь, протокол, домен, параметры и имя файла символ в символ.
- Загружают WOFF2, но CSS использует другой формат или другой вес. Preload должен относиться к фактически выбранному браузером файлу.
- Добавляют preload на все страницы сайта. Подключайте подсказку только там, где соответствующее начертание действительно нужно пользователю.
- Игнорируют кеш и редиректы. Стабильный прямой адрес обычно предсказуемее цепочки перенаправлений.
- Проверяют только наличие запроса. Оцените также порядок загрузки, статус ответа, применение шрифта и отсутствие повторного обращения.
Чеклист перед публикацией
Используйте чеклист после внедрения, а не только во время написания шаблона. Он помогает отделить реальное ускорение ранней отрисовки от ситуации, когда сайт просто получает больше высокоприоритетных запросов.
- Определите шрифт, который виден в первом экране.
- Выберите его точный файл WOFF2.
- Сопоставьте URL в preload и в CSS.
- Укажите rel=preload, as=font и type=font/woff2.
- Добавьте crossorigin=anonymous.
- Проверьте корректный ответ сервера и CORS для CDN.
- Откройте Network с очищенным кешем.
- Убедитесь, что файл загружается один раз и применяется к нужному тексту.
Часто задаваемые вопросы
Нужно ли добавлять preload для каждого шрифта сайта?
Нет. Предварительно загружайте только шрифты, необходимые для раннего содержимого страницы. Для остальных гарнитур и начертаний обычная загрузка через CSS обычно создаёт меньше конкуренции за сеть и не добавляет бесполезных высокоприоритетных запросов.
Почему шрифт после preload всё равно загружается дважды?
Чаще всего причина в несовпадении URL или режима запроса. Проверьте протокол, домен, путь, параметры, регистр имени, формат файла и наличие crossorigin. Также убедитесь, что HTML и CSS не ссылаются на разные версии или разные начертания одной гарнитуры.
Работает ли preload для шрифта с другого домена?
Да, но CDN или другой сервер должен разрешать междоменную загрузку шрифта. Используйте crossorigin со значением anonymous и настройте корректные заголовки CORS. Без разрешения браузер может заблокировать ресурс, а предварительная загрузка не даст ожидаемого результата.
Можно ли предварительно загружать файл формата TTF?
Технически браузер может загружать разные форматы, но для веба обычно выбирают WOFF2 как более подходящий сжатый формат. Preload должен указывать фактический MIME-тип и формат ресурса. Если CSS выбирает WOFF2, нет смысла заранее загружать TTF, который затем не будет применён.
Связан ли preload с font-display?
Да, но это разные механизмы. Preload определяет, когда браузер начнёт получать файл, а font-display задаёт поведение текста до окончания загрузки шрифта. Часто их используют вместе: предварительная загрузка ускоряет получение нужного файла, а swap позволяет показать текст системным шрифтом на время ожидания.
Нужно ли использовать preconnect вместе с preload?
Не всегда. Preconnect заранее устанавливает соединение с доменом, а preload запрашивает конкретный ресурс. Для внешнего CDN preconnect может помочь при сложном соединении, но он тоже расходует ресурсы. Добавляйте его только после проверки, что домен действительно нужен на раннем этапе и задержка соединения заметна.
Как понять, что preload не приносит пользы?
Если файл не используется в первом экране, загружается с ошибкой, появляется после критических ресурсов или не меняет время отображения текста, подсказка может быть лишней. Сравните загрузку с preload и без него на очищенном кеше, затем проверьте водопад запросов, применение шрифта и количество обращений к серверу.
Вывод
Правильный preload для шрифта — это точная подсказка для одного действительно нужного файла, согласованная с CSS, форматом WOFF2 и режимом CORS. Начните с шрифта первого экрана, проверьте Network и удалите все подсказки, которые не ускоряют отрисовку или создают повторные запросы.