Как ускорить сайт с несколькими шрифтами и языковыми версиями

Ускорить сайт с несколькими шрифтами и языковыми версиями можно без отказа от фирменной типографики: сократите число начертаний, подготовьте WOFF2-подмножества, загружайте только нужные символы и настройте кэширование. В статье показано, как выстроить такую систему, избежать скачков макета и проверить результат на реальных страницах.
Почему несколько шрифтов замедляют загрузку сайта
Каждая гарнитура и каждое начертание обычно представлены отдельным файлом. Если подключить обычное, полужирное и курсивное начертания сразу для кириллицы, латиницы и дополнительных алфавитов, браузеру придётся загрузить много ресурсов. К этому добавляются CSS-файлы, DNS-запросы, соединения с CDN и обработка шрифта перед отрисовкой текста.
Проблема не всегда заключается только в размере файлов. Веб-шрифт может вызвать невидимый текст до окончания загрузки, позднюю замену системной гарнитуры или изменение ширины строк после отображения. Последствия заметны пользователю: контент появляется неравномерно, кнопки меняют размер, а заголовки и карточки сдвигаются.
На мультиязычном сайте нагрузка возрастает из-за разных наборов символов. Русской странице нужны кириллические знаки, англоязычной — латинские, а для других версий могут потребоваться греческий, иврит, арабский или иные письменности. Загружать весь универсальный файл на каждой странице нерационально: пользователь получает символы, которые ему не нужны.
Начните с аудита гарнитур и начертаний
Перед оптимизацией составьте карту типографики сайта. Зафиксируйте, какие шрифты используются в логотипе, заголовках, основном тексте, интерфейсных элементах и декоративных блоках. Для каждой роли укажите начертание, диапазон насыщенности, языки и страницы, где оно действительно появляется. Такой аудит часто показывает, что несколько подключённых файлов фактически не используются.
- Определите основную гарнитуру для длинного текста и интерфейса.
- Оставьте только реально используемые начертания: например, regular и semibold.
- Проверьте, не подключается ли один и тот же шрифт через несколько CSS-файлов.
- Разделите обязательную типографику и декоративные шрифты, которые можно загружать позже.
- Составьте отдельный список языковых наборов символов для каждой версии сайта.
Практический пример: на сайте используются одна гарнитура для текста, вторая для заголовков и третья для промоматериалов. При проверке выясняется, что третья нужна только на лендинге, а курсив второй гарнитуры не встречается ни на одной странице. Удаление этих зависимостей из общего шаблона полезнее, чем механическое сжатие всех файлов.
Используйте современный формат WOFF2
Для веб-публикации основным форматом обычно выбирают WOFF2: он предназначен для передачи шрифтов в браузер и поддерживает эффективное сжатие. Старые форматы стоит сохранять только при наличии конкретной потребности в совместимости. Не подключайте одновременно несколько копий одного начертания в разных форматах без технической причины — это усложняет CSS и увеличивает число потенциальных загрузок.
Файл шрифта нужно готовить именно для веба, а не просто переименовывать настольный файл. Проверьте лицензию на веб-использование, удалите ненужные таблицы и символы с помощью подходящего инструмента субсеттинга, затем протестируйте отображение знаков, диакритики, валют, кавычек и специальных символов. Оптимизация не должна ломать контент конкретного языка.
Разделите шрифт на языковые подмножества
Подмножество, или subset, — это файл, содержащий не весь шрифтовой набор, а только нужные символы. Для русской версии можно подготовить кириллический файл, для английской — латинский, а для общего интерфейса — небольшой набор базовых знаков. В результате браузер получает меньше данных, а структура проекта становится понятнее.
Если одна страница содержит несколько письменностей, подмножества можно подключать через правило unicode-range. Браузер выбирает файл, когда в тексте встречаются символы из указанного диапазона. Важно проверить не только основной текст, но и навигацию, даты, телефонные номера, названия брендов и пользовательский контент: латинские символы могут встречаться внутри русской страницы.
Для языковых версий с разными URL или доменами полезно разделить критические ресурсы на уровне шаблона. Русская страница не должна автоматически получать наборы для немецкого и английского, если они не используются. При этом не стоит подменять языковую логику только определением языка браузера: учитывайте фактический язык контента и выбранную пользователем версию.
Подключайте только необходимые начертания
Начертание — это не только regular, bold и italic. Современные гарнитуры могут иметь широкий диапазон переменной насыщенности, ширины и оптического размера. Для сайта выбирайте минимальный набор осей и значений, которые используются в дизайне. Если интерфейсу нужны два фиксированных веса, не обязательно загружать полный переменный диапазон без подтверждённой необходимости.
С другой стороны, объединение всех начертаний в один большой файл не всегда ускоряет страницу. Если пользователю на первом экране нужен только regular, а semibold появляется ниже, раздельная загрузка может быть рациональнее. Решение зависит от реального сценария: смотрите на размер ресурсов, порядок их запроса и видимые элементы первого экрана.
Настройте font-display и запасную гарнитуру
Свойство font-display определяет, как браузер ведёт себя до загрузки веб-шрифта и при его появлении. Для большинства контентных страниц разумной отправной точкой является swap: сначала показывается системная или резервная гарнитура, затем она заменяется фирменной. Значение block может дольше скрывать текст, а fallback и optional дают браузеру больше свободы отказаться от поздней загрузки.
Одного font-display недостаточно для стабильного интерфейса. Резервная гарнитура должна быть близка по ширине и высоте знаков к основной. Иначе после замены изменятся переносы, высота кнопок и положение соседних элементов. Для критичных текстовых блоков полезно сравнить метрики шрифтов и при необходимости применить size-adjust, ascent-override, descent-override и line-gap-override.
Осторожно используйте preload
Preload позволяет заранее сообщить браузеру о важном ресурсе, но каждый такой ресурс конкурирует с HTML, CSS, изображениями и скриптами. Поэтому предварительно загружайте только шрифт, который гарантированно нужен на первом экране и совпадает с языком текущей страницы. Не ставьте preload на все гарнитуры, веса и языковые подмножества: это может ухудшить приоритет действительно важных ресурсов.
Если шрифт запрашивается из другого источника, корректно настройте тип ресурса и режим cross-origin. При самостоятельном размещении на том же домене схема проще, но CDN может быть удобен для распределённых пользователей. В обоих случаях проверьте фактическую цепочку загрузки в панели Network: предварительная подсказка должна совпадать с URL, который позже использует CSS.
Настройте кэширование и доставку шрифтов
Шрифты редко меняются по сравнению с содержимым статьи или каталога, поэтому для версионированных файлов можно использовать длительное кэширование. Добавляйте хеш или другой уникальный идентификатор в имя файла при изменении шрифта, чтобы обновлённая версия не конфликтовала со старой копией в браузере. Это позволяет не заставлять повторных посетителей скачивать одинаковые ресурсы заново.
Сервер должен отдавать корректный MIME-тип, поддерживать сжатие там, где оно применимо, и не блокировать запросы к шрифту политиками безопасности. Если используются разные домены, проверьте CORS. Ошибка в заголовках может привести к тому, что браузер отклонит файл, а пользователь увидит системную гарнитуру или нестабильную замену.
Разделите критическую и отложенную типографику
Критическая типографика нужна для содержимого, которое видно сразу: логотипа, заголовка, навигации и основного текста первого экрана. Декоративная гарнитура для блока ниже, всплывающего окна или отдельного промо-модуля может загружаться после основного контента. Это особенно важно для сайтов, где фирменный дисплейный шрифт используется редко, но его файл велик.
Отложенная загрузка не означает, что шрифт нужно скрывать от браузера сложными скриптами. Сначала организуйте корректные CSS-зависимости, затем убедитесь, что необязательные стили не попадают в критический путь рендеринга. Для интерактивных блоков проверяйте сценарий медленного соединения: поздняя гарнитура не должна менять высоту уже прочитанного пользователем текста.
Проверьте производительность на реальных страницах
Тестируйте не только главную страницу. Выберите по одному представителю для каждой языковой версии: статью, карточку товара, каталог и страницу с формой. В инструментах разработчика изучите Waterfall, размер файлов, момент запроса шрифтов, ошибки CORS и изменения макета. Отдельно проверьте страницы с редкими символами и длинными заголовками.
- Зафиксируйте исходный список файлов и порядок их загрузки.
- Проверьте, какие шрифты требуются до первого отображения контента.
- Сравните загрузку русской, латинской и других языковых версий.
- Откройте страницу при ограниченной скорости сети и отключённом кэше.
- Проверьте визуальные сдвиги при замене резервной гарнитуры.
- Повторите тест с включённым кэшем для сценария возвращающегося посетителя.
- Убедитесь, что после субсеттинга не пропали нужные знаки и символы.
Полезно оценивать не только технические метрики, но и визуальный результат. Быстрая страница с плохо подобранным fallback-шрифтом может выглядеть хуже: строки переносятся иначе, а кнопки становятся выше после загрузки основной гарнитуры. Оптимизация считается завершённой, когда уменьшилась нагрузка и сохранилась предсказуемая композиция интерфейса.
Частые ошибки при оптимизации веб-шрифтов
- Подключать весь шрифтовой файл для каждой языковой версии, хотя странице нужен только один алфавит.
- Загружать все веса и стили «на будущее», не сверяя их с макетами и компонентами.
- Использовать preload для множества файлов и тем самым создавать конкуренцию за канал.
- Оставлять font-display без проверки, из-за чего текст скрывается или поздно меняет метрики.
- Выбирать fallback-шрифт только по внешнему виду, не сравнивая ширину знаков и межстрочное поведение.
- Размещать шрифты на другом домене без корректной настройки CORS.
- Сжимать файлы без проверки лицензии, кириллицы, диакритики и специальных символов.
- Проверять только главную страницу и пропускать языковые шаблоны с другой типографикой.
Чеклист быстрого сайта с несколькими гарнитурами
- Используются только необходимые гарнитуры, начертания и значения осей.
- Основные веб-файлы подготовлены в WOFF2 и имеют понятную версию.
- Для языков созданы подходящие подмножества символов.
- unicode-range применяется там, где одна страница содержит несколько письменностей.
- font-display выбран осознанно, а fallback не вызывает заметного скачка макета.
- Preload назначен только действительно критичному ресурсу.
- Шрифты кэшируются, а обновление происходит через версионирование файлов.
- Каждая языковая версия протестирована отдельно на медленной сети.
- В Network нет лишних запросов, ошибок CORS и повторных загрузок.
- После оптимизации проверены читаемость, переносы, кнопки и специальные знаки.
Часто задаваемые вопросы
Нужно ли загружать один шрифт для всех языков?
Нет, универсальный файл не всегда оптимален. Если языковые версии используют разные алфавиты, подготовьте отдельные подмножества и подключайте только нужные наборы. Один общий файл оправдан, когда страницы регулярно смешивают несколько письменностей и разделение не уменьшает итоговую нагрузку.
Сколько начертаний достаточно для обычного сайта?
Фиксированного числа нет: оно определяется дизайн-системой. Для многих интерфейсов достаточно обычного начертания для текста и одного усиленного для заголовков или кнопок. Добавляйте курсив, дополнительные веса и ширины только тогда, когда они реально используются и улучшают восприятие контента.
Можно ли использовать только системные шрифты?
Да, системные шрифты уменьшают число сетевых ресурсов и часто ускоряют первый показ текста. Однако они могут не соответствовать фирменному стилю и по-разному выглядеть на устройствах. Практичный компромисс — оставить системный fallback и загружать брендовый шрифт только там, где его визуальная роль действительно важна.
Помогает ли объединение всех шрифтов в один файл?
Не обязательно. Объединение может сократить количество запросов, но увеличить размер ресурса и заставить страницу получать ненужные символы или начертания. Сравнивайте два варианта по объёму передаваемых данных, моменту отображения текста и повторному использованию файла на разных страницах.
Почему после подключения font-display меняется макет?
Причина обычно в различии метрик основной и резервной гарнитуры. У шрифтов отличаются ширина знаков, высота строки и положение выносных элементов, поэтому после загрузки меняются переносы и размеры блоков. Подберите более близкий fallback и настройте переопределение метрик, а критичные размеры задайте устойчивыми стилями.
Нужен ли preload для каждой языковой версии?
Preload нужен не языку сам по себе, а конкретному критичному шрифту на конкретной странице. Для русской версии это может быть кириллический файл, для английской — латинский. Предварительная загрузка всех вариантов создаёт лишнюю конкуренцию, поэтому проверяйте приоритеты и фактические запросы в браузере.
Вывод
Ускорение мультиязычного сайта начинается не с отказа от красивой типографики, а с точного соответствия между контентом и ресурсами. Проведите аудит, оставьте нужные начертания, подготовьте WOFF2-подмножества, настройте font-display, кэширование и выборочную предварительную загрузку, затем проверьте каждую языковую версию на реальном сценарии.
Если сайту нужен собственный визуальный стиль, создайте и подготовьте гарнитуру в fontgenerator.ru, а затем оптимизируйте её веб-версию под языки, начертания и задачи интерфейса.