Subsetting шрифтов: как сократить файл без потери символов

Актуально на 22 июля 2026 года. Subsetting шрифтов — это создание подмножества исходного файла, в котором остаются только нужные глифы, таблицы и функции. Такой подход уменьшает объём веб-шрифта, ускоряет загрузку страницы и снижает расход трафика, но требует проверки кириллицы, знаков пунктуации, валют, языковых форм и OpenType-функций.
Что такое subsetting шрифтов и зачем он нужен
Subsetting шрифтов, или создание подмножества, означает удаление из исходного шрифтового файла символов, которые не используются в конкретном проекте. Полный шрифт может включать несколько языковых наборов, альтернативные начертания, математические знаки и служебные данные. Если сайту нужна только русская и английская навигация, нет смысла отправлять посетителю весь набор символов.
Оптимизированный файл особенно полезен для веб-шрифтов в форматах WOFF и WOFF2. Браузеру не требуется загружать невостребованные глифы, поэтому сокращается размер ресурса и время, необходимое для отображения текста. При этом subsetting не является простым архивированием: важно сохранить корректную карту Unicode, нужные OpenType-таблицы, метрики, кернинг и языковые правила.
Какие данные находятся внутри файла шрифта
Шрифтовой файл содержит не только изображения букв. Глиф — это графическое представление символа, а таблица cmap связывает Unicode-коды с глифами. Таблицы hmtx и hhea отвечают за горизонтальные метрики, head и maxp описывают общую структуру, а таблицы GSUB и GPOS обеспечивают замены и позиционирование знаков: лигатуры, локализованные формы, диакритику и кернинг.
При subsetting инструмент анализирует выбранный набор Unicode и удаляет ненужные глифы. Однако некоторые знаки связаны между собой. Например, комбинируемый акцент может использовать отдельный глиф, а OpenType-правило может подставлять альтернативную форму буквы. Поэтому безопасное подмножество должно учитывать не только видимые символы текста, но и зависимости, необходимые для корректного рендеринга.
Когда подмножество действительно уменьшает файл
Наибольший эффект subsetting даёт у многоязычных гарнитур, шрифтов с расширенной пунктуацией и семейств, содержащих большое количество символов. Если из полного файла оставить только кириллицу, латиницу, цифры и базовую пунктуацию, итоговый ресурс обычно становится существенно компактнее. Точный результат зависит от структуры шрифта, количества начертаний и формата сжатия.
Подмножество не заменяет другие способы оптимизации. Для сайта также стоит подключать только используемые начертания, выбирать WOFF2, задавать font-display и не загружать жирный или курсивный вариант без необходимости. Если один проект использует четыре начертания, рациональнее сделать четыре проверенных подмножества, чем подключить полный файл всего семейства.
Как определить нужный набор символов
Начните с инвентаризации контента. Соберите тексты из интерфейса, заголовков, кнопок, системных сообщений, писем, ошибок валидации и динамических данных. Отдельно проверьте шаблоны, которые видит не каждый пользователь: формы оплаты, промокоды, даты, адреса, имена, числовые значения и сообщения от внешних сервисов.
Для статичного лендинга можно составить набор по фактическому тексту страницы. Для продукта с пользовательским вводом такой подход опасен: завтра посетитель введёт фамилию с Ё, латинскую букву в артикуле или знак валюты, которого не было в тестовом тексте. В этом случае формируйте подмножество по поддерживаемым языкам и отдельно добавляйте деловые, технические и интерфейсные символы.
- Соберите все постоянные тексты сайта или приложения.
- Добавьте символы динамических данных и пользовательского ввода.
- Проверьте кириллические Ё и ё, кавычки, тире и неразрывный пробел.
- Включите цифры, математические знаки, проценты и используемые валюты.
- Учтите латиницу в URL, названиях брендов, кодах и электронных адресах.
- Зафиксируйте требования к лигатурам, альтернативным формам и диакритике.
Кириллица: почему базового набора бывает недостаточно
Для русского текста минимальный набор обычно включает прописные и строчные буквы русского алфавита, но на практике этого мало. В интерфейсах встречаются Ё и ё, кавычки-ёлочки, длинное тире, дефис, многоточие, знак номера, проценты, скобки и разные пробельные символы. Если сайт работает с именами и адресами, могут понадобиться буквы других кириллических языков.
Особое внимание уделите пробелам и знакам, которые визуально неочевидны. Обычный пробел, неразрывный пробел и узкий неразрывный пробел имеют разные коды и поведение. Удаление одного из них может незаметно нарушить переносы в ценах, датах или коротких подписях. Проверяйте не только наличие символа, но и его отображение в браузере.
Практический пример: подмножество для русскоязычного сайта
Представим сайт студии, где есть русские и английские заголовки, цены в рублях, кнопка «Скачать», даты и почтовый адрес. Подмножество должно включать кириллицу, латиницу, цифры, базовую пунктуацию, символ рубля, знак процента и необходимые пробельные знаки. Если в интерфейсе используются кавычки-ёлочки и длинное тире, они должны попасть в список явно.
После создания файла протестируйте строки вроде «Ёлка — 1 990 ₽», «Design Studio», «Скидка 20 %» и «support@example.com». Это небольшой, но показательный набор: он проверяет крайние кириллические буквы, смешанный текст, валюту, цифры, пробелы, пунктуацию и латинские символы. Затем добавьте реальные заголовки и сообщения из проекта.
Как создать subsetting шрифтов в рабочем процессе
Рабочий процесс лучше разделить на подготовку, генерацию и проверку. Сначала определите сценарии использования и зафиксируйте список Unicode-символов. Затем создайте отдельное подмножество для каждого начертания и нужного набора языков. После этого проверьте файл в браузерах, на мобильных устройствах и в макетах, где есть реальные тексты.
Шаг 1. Зафиксируйте исходный файл и лицензии
Сохраните оригинальный шрифт отдельно и работайте с копией. Проверьте лицензию: некоторые условия разрешают веб-встраивание, но ограничивают изменение файла или распространение производных версий. Зафиксируйте название семейства, начертание, формат и дату подготовки. Это упростит повторную генерацию, если в проекте появится новый язык или символ.
Шаг 2. Сформируйте список Unicode
Используйте фактические тексты и дополните их символами, которые могут появиться динамически. Не смешивайте в один список всё подряд: для публичного сайта, мобильного приложения и PDF могут потребоваться разные наборы. Чем точнее список, тем меньше файл, но чрезмерная экономия повышает риск пропущенных знаков.
Шаг 3. Создайте подмножество инструментом
Для автоматизации применяют инструменты, которые умеют выбирать глифы по Unicode и сохранять нужные OpenType-таблицы. Один из распространённых вариантов в шрифтовом производстве — утилита pyftsubset из набора fontTools. Независимо от выбранного инструмента задайте формат вывода, список символов и правила сохранения функций, а затем сравните результат с оригиналом.
Шаг 4. Преобразуйте файл в веб-формат
Для веба обычно используют WOFF2, а при необходимости совместимости добавляют WOFF. Не удаляйте метаданные и таблицы без понимания последствий: агрессивная очистка может повлиять на вертикальные метрики, кернинг или работу локализованных форм. Подключите файл в тестовый проект и убедитесь, что браузер действительно выбирает нужный ресурс.
Шаг 5. Проверьте отображение и резервные шрифты
Проверьте весь набор тестовых строк, включая длинные слова, цифры, смешанный текст и редкие знаки. Посмотрите страницу при отключённом веб-шрифте, медленной загрузке и ошибке запроса. Корректный CSS-стек должен предусматривать резервный шрифт, чтобы интерфейс оставался читаемым, если подмножество не загрузилось.
Что нельзя удалять без проверки
Нельзя автоматически исключать знаки только потому, что они не встречаются в видимом тексте. Динамические данные, форматирование чисел и локализованные версии часто используют символы, которых нет на главной странице. Также осторожно обращайтесь с комбинируемыми диакритическими знаками, лигатурами, альтернативными формами, дробями и математическими операциями.
- Ё и ё, если контент содержит русские имена, названия или слова с этой буквой.
- Знак рубля и другие валюты, если сайт показывает цены в нескольких валютах.
- Неразрывный пробел, если важны корректные переносы чисел и единиц измерения.
- Диакритические знаки, если поддерживаются иностранные имена или языки.
- Глифы для лигатур и альтернатив, если они включены в дизайн-систему.
- Символы стрелок, маркеров и иконок, если они входят в шрифтовой интерфейс.
Частые ошибки при оптимизации шрифтов
Самая распространённая ошибка — создавать подмножество по одному экрану, не учитывая остальные состояния продукта. В результате пропадают символы из модальных окон, уведомлений, фильтров и локализованных страниц. Вторая проблема — удаление таблиц OpenType ради минимального размера. Файл становится меньше, но текст может потерять кернинг, лигатуры или корректные формы букв.
Ещё одна ошибка — объединять разные начертания в один непроверенный процесс и считать, что одинаковый список символов гарантирует одинаковое поведение. У отдельных файлов могут отличаться наборы глифов и поддерживаемые функции. Наконец, нельзя проверять результат только по размеру: компактный файл с отсутствующим знаком хуже, чем немного более тяжёлое, но полноценное подмножество.
Чеклист перед публикацией
- Сравните подмножество с исходным файлом и убедитесь, что сохранено нужное начертание.
- Проверьте карту Unicode и наличие всех символов из утверждённого списка.
- Протестируйте кириллицу, латиницу, цифры, пунктуацию, валюты и пробелы.
- Проверьте кернинг, лигатуры, диакритику и локализованные формы, если они используются.
- Откройте страницу в основных браузерах и на мобильном экране.
- Проверьте загрузку через CSS, кэширование и резервный шрифтовой стек.
- Сохраните исходник, параметры генерации и дату текущей версии.
Как выбрать размер подмножества для разных задач
Для статичной промо-страницы подходит узкое подмножество по текстам конкретной страницы. Для корпоративного сайта безопаснее включить полный набор поддерживаемых языков, особенно если контент редактируют разные команды. Для приложения полезно разделить ресурсы по языкам или экранам, если платформа и архитектура загрузки это позволяют. Для PDF важнее полнота встраивания, чем максимальное уменьшение файла.
Если проект использует variable font, оптимизация требует отдельной проверки осей и диапазонов. Удаление ненужных глифов может уменьшить файл, но нельзя потерять вариативность веса, ширины или оптического размера, если интерфейс рассчитывает на неё. Всегда проверяйте не только символы, но и визуальное поведение шрифта в доступных значениях осей.
FAQ: вопросы о subsetting шрифтов
Что такое subsetting шрифтов простыми словами?
Это уменьшенная версия исходного шрифта, в которой оставлены только нужные символы и необходимые шрифтовые данные. Такой файл быстрее загружается, потому что браузер не получает глифы языков и знаков, которые проект не использует.
Можно ли оставить только кириллицу?
Можно, если проект действительно не использует латиницу, цифры и специальные знаки. На практике латинские символы часто нужны для адресов электронной почты, названий брендов, кодов, URL и технических терминов, поэтому список следует составлять по реальным сценариям.
Пропадёт ли жирное или курсивное начертание?
Нет, если каждое начертание обработано отдельно и подключено корректно. Subsetting сокращает набор символов внутри конкретного файла, а не превращает обычный шрифт в жирный или курсивный. После генерации проверьте CSS-свойства font-weight и font-style и убедитесь, что браузер выбирает правильный ресурс.
Нужно ли делать отдельный файл для каждого языка?
Не всегда. Один файл с несколькими языками проще поддерживать, но он может быть больше. Разделение оправдано, когда языковые версии заметно отличаются по набору символов и проект умеет загружать нужный ресурс только для выбранной локали.
Можно ли уменьшить WOFF2 ещё сильнее?
Можно попробовать сократить набор глифов, удалить неиспользуемые начертания и выбрать подходящие параметры генерации, но без проверки результата это рискованно. WOFF2 уже предназначен для эффективной веб-компрессии, поэтому дальнейшая экономия должна быть основана на анализе контента, а не на механическом удалении таблиц.
Что делать, если после subsetting появился квадратик?
Сначала найдите отсутствующий символ в тексте и добавьте его Unicode-код в набор. Затем проверьте, не нужен ли связанный комбинируемый знак или OpenType-глиф, очистите кэш и повторите тест. Если символ присутствует, проверьте CSS-подключение, MIME-тип, загрузку файла и порядок резервных шрифтов.
Вывод: уменьшайте шрифт осознанно
Subsetting шрифтов помогает сократить веб-ресурс без потери качества, если подмножество строится на реальном содержимом и проходит визуальную проверку. Сначала составьте карту символов, затем сохраните нужные OpenType-функции, подключите оптимальный формат и протестируйте все сценарии, включая динамический текст. Создайте собственный шрифт или подготовьте его к использованию на fontgenerator.ru.