Гид по технологиям

Как подключить веб‑шрифты в Next.js — локально и через CDN

5 min read Frontend Обновлено 15 Dec 2025
Веб‑шрифты в Next.js — локально и через CDN
Веб‑шрифты в Next.js — локально и через CDN

Крупный план текста на обложке книги

К чему стремиться

  • Минимизировать время рендера текста (FOUT/FOIT).
  • Обеспечить кросс‑браузерную поддержку нужных форматов (.woff/.woff2, при необходимости .ttf/.eot).
  • Соблюдать лицензию шрифта и требования конфиденциальности.

Использование локально хранимых шрифтов в Next.js

Когда хранить шрифт локально:

  • шрифт недоступен в открытых библиотеках;
  • вам нужен полный контроль над кэшированием и политиками безопасности;
  • важна продуктивность без внешних запросов.

Шаги внедрения:

  1. Скачайте файлы шрифтов (проверьте лицензию). Сайты с бесплатными шрифтами: Google Fonts, Fontspace, Dafont — но лицензии различаются.
  2. Конвертируйте шрифты в форматы для веба. Современные браузеры поддерживают .woff2 и .woff; для старых — .ttf и .eot. Используйте проверенные конвертеры или gulp/webpack‑плагины.
  3. Создайте папку fonts в корне проекта и положите туда файлы.
  4. Зарегистрируйте шрифты в глобальном CSS (например, styles/global.css) через правило @font-face.

Пример определения @font-face для жирного начертания шрифта “Mermaid”:

@font-face {
  font-family: 'Mermaid';
  src: url('/fonts/Mermaid-Bold.eot');
  src: url('/fonts/Mermaid-Bold.eot?#iefix') format('embedded-opentype'),
       url('/fonts/Mermaid-Bold.woff2') format('woff2'),
       url('/fonts/Mermaid-Bold.woff') format('woff'),
       url('/fonts/Mermaid-Bold.ttf') format('truetype');
  font-weight: bold;
  font-style: normal;
  font-display: swap;
}

Примечания:

  • Указывайте относительные пути (например, /fonts/…) так, чтобы сервер отдавал файлы корректно.
  • font-display: swap рекомендуется для уменьшения времени до отображения текста (позволяет показать запасной шрифт, а затем «подменить» на нужный).

После регистрации используйте шрифт в стилях компонентов:

h1 {
  font-family: 'Mermaid', sans-serif;
}

Важно: проверьте размер файлов и применяйте субсеттинг (subset) — оставляйте только нужные знаки/языки, чтобы уменьшить вес.

Подключение веб‑шрифтов через CDN в Next.js

Подход через CDN проще: не нужно хранить файлы и создавать @font-face вручную. Популярные поставщики — Google Fonts, Adobe Fonts (Typekit) и пр. Next.js умеет оптимизировать некоторые внешние шрифты автоматически.

Способы подключения через CDN:

  • Через тег в head (подходит для глобальной области).
  • Через @import внутри CSS (подходит для изолированных CSS-файлов).

Подключение через тег link (в head)

Если нужно добавить в head каждой страницы, создайте кастомный документ в Next.js: /pages/_document.js.

Пример (_document.js):

import Document, { Html, Head, Main, NextScript } from 'next/document';

class MyDocument extends Document {
  static async getInitialProps(ctx) {
    const initialProps = await Document.getInitialProps(ctx);
    return { ...initialProps };
  }

  render() {
    return (
      
        
          
        
        
          
); } } export default MyDocument;

Замечания:

  • Тег link делает шрифт доступным глобально.
  • При использовании внешних сервисов проверьте, как это влияет на приватность пользователей.

Подключение через @import в CSS

Можно импортировать шрифт непосредственно в CSS:

@import url('https://fonts.googleapis.com/css2?family=Libre+Caslon+Display&display=swap');

h1 {
  font-family: 'Libre Caslon Display', serif;
}

Разница: @import ограничен областью файла CSS, тогда как в head делает шрифт доступным для всего сайта.

Что лучше: хранить локально или использовать CDN?

Когда выбирать локально:

  • Нужно соответствовать политике конфиденциальности (избегать внешних запросов).
  • Требуется контроль версий и кэширования.
  • Нужен быстрый повторный рендер без внешних задержек.

Когда CDN удобнее:

  • Быстрая настройка и меньше задач для деплоя.
  • Возможность воспользоваться глобальными CDN‑кешами и оптимизациями провайдера (например, Next.js поддержка Google Fonts).

Если выбираете CDN, подумайте о предварительной загрузке (preload) ключевых файлов и о механизме font-display.

Когда этот подход не работает или даёт проблемы

  • Если шрифт имеет жесткие лицензионные ограничения (нельзя хранить локально) — потребуется CDN или коммерческая лицензия.
  • На медленных соединениях внешний запрос к CDN может увеличить первый рендер текста.
  • Для динамических сборок (SSR + критический CSS) может потребоваться дополнительная настройка preloading и inline стилей.

Альтернативные подходы

  • Использовать системные семейства шрифтов (sans-serif, serif, monospace) как запасной вариант.
  • Подключать только критические начертания локально (например, bold + regular), а редкие — через CDN.
  • Инструменты типа fontsubsetting, gulp‑fonter, fontmin для уменьшения веса шрифтов.

Мини‑методология внедрения (шаги для команды)

  1. Оценка требований: языки, начертания, лицензии, ожидаемая аудитория.
  2. Решение: локально vs CDN.
  3. Подготовка: скачать/сконвертировать/проверить лицензию или выбрать URL CDN.
  4. Интеграция: @font-face или link/@import в проект.
  5. Оптимизация: font-display, preload, субсеттинг, кэширование.
  6. Тестирование: на разных браузерах и устройствах, FOUT/FOIT поведение.
  7. Документирование и мониторинг производительности.

Чеклист по ролям

Разработчик:

  • Проверил пути к файлам и mime‑типы.
  • Установил font-display и preload для критических шрифтов.
  • Настроил CI, чтобы шрифты попадали в финальный билд.

Девопс:

  • Настроил отдачу шрифтов с корректным Cache-Control и CORS.
  • Внёс файлы в систему доставки (если локально) или проверил SLA CDN.

Дизайнер:

  • Утвердил набор начертаний и запасные шрифты.
  • Подготовил рекомендации для fallback и размеров.

PM/Продукт:

  • Проверил лицензии и соответствие GDPR/политике приватности.
  • Утвердил приоритеты по производительности.

Критерии приёмки

  • Шрифты корректно отображаются в целевых браузерах (Chrome, Firefox, Safari, Edge).
  • Время до отображения текста не ухудшилось критически (FOUT/FOIT контролируется).
  • Лицензии и политика конфиденциальности соблюдены.
  • CI/деплой корректно выкладывает файлы (локальный) или ссылка на CDN доступна.

Примечания по конфиденциальности и лицензиям

  • Подключение шрифтов через внешний CDN может отправлять пользовательские запросы третьим лицам. Проверьте GDPR/CCPA последствия.
  • Всегда проверяйте лицензию шрифта перед локальным размещением — некоторые шрифты запрещают распространение.

Совместимость и миграционные советы

  • Для постепенной миграции: сначала подключите шрифт через CDN, затем при успехе перенесите локально и отключите CDN.
  • Проверьте старые браузеры: если целевая аудитория использует IE11, добавьте .eot; в большинстве современных проектов это необязательно.

Факты и практические замечания

  • Современные браузеры поддерживают .woff2 и .woff лучше всего; .woff2 даёт меньший размер и предпочтителен.
  • font-display: swap уменьшает время, пока пользователь увидит текст, но может вызвать краткую смену внешнего вида.
  • Субсеттинг шрифтов (оставлять только нужные символы) часто сокращает размер пакета значительно.

Короткое объявление для команды (100–200 слов)

Мы обновили стратегию подключения веб‑шрифтов в проекте Next.js. Доступны два варианта: быстрый — импорт через Google Fonts (CDN) и более контролируемый — локальная хостинг‑стратегия с @font-face. Рекомендуем для начала CDN для быстрого прототипа, затем перейти на локальное хранение с субсеттингом и preload для продакшен‑релиза. Проверьте лицензионные ограничения и настройте кэширование у DevOps. Документация и чеклисты в репозитории.

Социальный предпросмотр (рекомендации)

OG заголовок: Подключение веб‑шрифтов в Next.js — локально и через CDN OG описание: Пошаговое руководство по подключению и оптимизации веб‑шрифтов в Next.js: @font-face, Google Fonts, preload, субсеттинг и чеклисты для команд.

Краткое резюме

  • Локальная хостинг‑модель даёт контроль и часто лучшую производительность.
  • CDN‑подключение быстрее в установке и может использовать преимущества провайдера.
  • Всегда учитывайте лицензию, конфиденциальность и оптимизацию (font‑display, preload, субсеттинг).

Важно: протестируйте на целевых устройствах и зафиксируйте поведение FOUT/FOIT до и после изменений.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Редактирование фото золотого часа в Lightroom
Фотография

Редактирование фото золотого часа в Lightroom

Включение Ctrl+Shift+C/V в Bash Windows 10
Windows

Включение Ctrl+Shift+C/V в Bash Windows 10

Как удалить Chromium, если он не удаляется
Безопасность

Как удалить Chromium, если он не удаляется

Разрешить рекламу в Google Chrome
браузер

Разрешить рекламу в Google Chrome

Microsoft Photos: слайдшоу и Spot Fix
Приложения

Microsoft Photos: слайдшоу и Spot Fix

Исправить ошибки uiwatchdog.exe — руководство
Безопасность

Исправить ошибки uiwatchdog.exe — руководство