Brotli и Gzip: сжатие, которое незаметно ускоряет загрузку

Есть оптимизация, которую пользователь никогда не заметит как отдельное действие, но почувствует как общую быстроту сайта — сжатие текстовых ресурсов на лету. HTML, CSS, JavaScript, SVG и JSON прекрасно поджимаются: текст по своей природе избыточен, и алгоритмы сжатия легко уменьшают его в три-четыре раза. Если сжатие у вас не настроено, вы передаёте по сети в разы больше байтов, чем нужно, замедляя загрузку и тратя трафик. При этом включается оно буквально парой директив в конфиге сервера. Разберём, как работают Gzip и более современный Brotli, чем они отличаются, как проверить, включено ли сжатие, и как настроить его правильно.

Что такое сжатие текстовых ресурсов на лету

Когда браузер запрашивает страницу, он сообщает серверу, какие методы сжатия понимает, через заголовок Accept-Encoding. Сервер сжимает текстовый ответ подходящим алгоритмом, отдаёт его в сжатом виде и помечает заголовком Content-Encoding. Браузер на своей стороне распаковывает данные и работает с ними как обычно. Всё это происходит прозрачно и за миллисекунды.

Сжатию хорошо поддаются именно текстовые форматы — HTML, CSS, JS, SVG, JSON, XML, шрифты в формате без предварительного сжатия. Типичная HTML-страница ужимается на 60–80%, а минифицированный, но несжатый JS-бандл легко теряет две трети веса. Это напрямую сокращает объём передаваемых данных, ускоряет загрузку и улучшает метрики скорости, о которых речь в материале про то, как улучшить Core Web Vitals и скорость загрузки.

Как работает Gzip

Gzip — ветеран сжатия в вебе, основанный на алгоритме DEFLATE (комбинация LZ77 и кодирования Хаффмана). Суть проста: алгоритм находит повторяющиеся последовательности в тексте и заменяет их короткими ссылками на предыдущие вхождения, а часто встречающиеся символы кодирует более короткими битовыми последовательностями. В разметке и коде повторов масса — теги, классы, ключевые слова, — поэтому Gzip даёт отличный результат.

Gzip поддерживается абсолютно всеми браузерами и серверами уже два десятилетия, работает быстро и нетребователен к ресурсам. Это золотой стандарт по умолчанию: если у вас не настроено вообще ничего, включить Gzip — первоочередная задача. Его поддержка универсальна, и он остаётся надёжным фолбэком даже там, где доступен более продвинутый Brotli.

Что такое Brotli и почему он лучше

Brotli — алгоритм от Google, разработанный специально для веба. Его ключевое преимущество — встроенный словарь часто встречающихся в вебе строк (типичные HTML-теги, CSS-свойства, фрагменты JS), благодаря которому он сжимает текст эффективнее. На практике для текстовых ресурсов Brotli даёт выигрыш примерно на 15–25% по сравнению с Gzip при сопоставимом уровне сжатия — то есть файлы получаются ещё легче.

Brotli поддерживается всеми современными браузерами и передаётся в заголовке Accept-Encoding как значение br. Важная тонкость: Brotli работает только по HTTPS, что сегодня не проблема, поскольку защищённое соединение — стандарт. Если вы ещё не до конца перевели сайт на HTTPS, начните с материала про то, как правильно настроить HTTPS и SSL-сертификат. Оптимальная схема — отдавать Brotli браузерам, которые его поддерживают, и Gzip как фолбэк остальным.

Таблица сравнения Gzip и Brotli

КритерийGzipBrotli
Степень сжатия текстахорошая, базоваяна 15–25% лучше Gzip
Заголовок Content-Encodinggzipbr
Поддержка браузеровабсолютно всевсе современные
Требует HTTPSнетда
Скорость кодированияочень быстраязависит от уровня
Лучшее применениединамика, фолбэкстатика, основной метод

Вывод из таблицы: использовать стоит оба. Brotli как основной метод для современных браузеров, Gzip как универсальный фолбэк. Серверы умеют отдавать нужный вариант автоматически, ориентируясь на Accept-Encoding запроса.

Сжатие — это самая незаметная и при этом одна из самых дешёвых оптимизаций. Несколько строк в конфиге сервера срезают вес текстовых ресурсов в три-четыре раза. Не включить сжатие сегодня — всё равно что добровольно платить за лишний трафик и секунды загрузки.

Как проверить, включено ли сжатие

Прежде чем что-то менять, проверьте текущее состояние. Способов несколько.

  • Заголовок Content-Encoding. Откройте DevTools, вкладка Network, кликните по запросу документа или CSS-файла и в разделе Response Headers найдите content-encoding. Значение br означает Brotli, gzip — Gzip, отсутствие заголовка — сжатие не работает.
  • Сравнение размеров. В колонках Size той же вкладки Network видно переданный и фактический размер: если они сильно отличаются, ресурс сжат.
  • Онлайн-чекеры. Есть сервисы проверки сжатия, куда достаточно ввести URL — они покажут, какой алгоритм применяется и какова экономия.
  • PageSpeed Insights. Аудит «Включите сжатие текста» (Enable text compression) прямо укажет на несжатые ресурсы. Это часть стандартной диагностики при техническом SEO-аудите сайта.

Как включить сжатие на nginx и Apache

Настройка делается на уровне веб-сервера. Разберём два самых распространённых.

Nginx

Gzip включается директивой gzip on; с указанием типов через gzip_types (text/css, application/javascript, application/json, image/svg+xml и так далее) и уровня gzip_comp_level. Для Brotli нужен модуль ngx_brotli: после его подключения добавляются директивы brotli on;, brotli_types и brotli_comp_level. Эти настройки логично делать в рамках общей оптимизации сервера и хостинга для SEO.

Apache

В Apache за Gzip отвечает модуль mod_deflate: в конфиге или .htaccess указываются типы ресурсов для сжатия через директивы AddOutputFilterByType DEFLATE. Для Brotli используется модуль mod_brotli с аналогичной настройкой типов. На многих хостингах эти модули уже доступны, и достаточно прописать несколько строк в .htaccess.

Уровни сжатия и что не сжимать

Уровень сжатия — компромисс между нагрузкой на процессор и размером файла. Высокие уровни дают чуть меньший размер, но тратят больше CPU при кодировании. Для динамического сжатия на лету разумны средние уровни (Gzip 5–6, Brotli 4–5), для заранее сжатой статики можно ставить максимум.

Важно: не сжимайте то, что уже сжато. Изображения JPEG, PNG, WebP, AVIF, видео и архивы уже упакованы своими алгоритмами, и повторное сжатие только сожжёт процессорное время без выигрыша, а иногда даже слегка увеличит размер. Сжимайте только текстовые типы. Про оптимальные форматы самих картинок — отдельный материал про современные форматы WebP и AVIF.

Статическое против динамического сжатия

Есть два режима. Динамическое сжатие происходит в момент запроса: сервер сжимает ответ на лету. Это удобно для HTML, который генерируется индивидуально, но тратит CPU при каждом обращении. Статическое сжатие — это заранее подготовленные сжатые версии файлов (например, style.css.br и style.css.gz рядом с оригиналом): сервер просто отдаёт готовый сжатый файл, не тратя процессор.

Оптимальная стратегия: для статики (CSS, JS) — предварительное статическое сжатие на максимальном уровне, так вы получаете лучший размер без затрат CPU в рантайме. Для динамического HTML — сжатие на лету средним уровнем. Это снимает основную проблему высоких уровней Brotli, которые медленно кодируют, но дают самый компактный результат.

Влияние на скорость, TTFB и Core Web Vitals

Сжатие сокращает объём передаваемых байтов, а значит — время на скачивание ресурсов. Меньше данных по сети — раньше браузер получает CSS и JS, раньше начинает отрисовку, лучше показатели FCP и LCP. На мобильных каналах эффект особенно заметен.

С TTFB нюанс двоякий. Сжатие первого байта HTML практически не задерживает, если уровень разумный, а вот меньший объём ответа ускоряет его доставку. Но если выкрутить динамическое сжатие на максимальный уровень, сервер потратит лишнее время на кодирование тяжёлого HTML, и TTFB может чуть подрасти — поэтому для динамики и держат средние уровни. Связь сжатия с ответом сервера мы разбирали в материале про разгон TTFB до 200 мс.

Нюансы CDN: Cloudflare сжимает сам

Если вы используете CDN, сжатием часто занимается именно он, причём прозрачно. Cloudflare, например, по умолчанию применяет Brotli и Gzip к текстовым ответам на своей стороне, отдавая каждому браузеру оптимальный вариант. В этом случае настраивать сжатие на собственном сервере для внешнего трафика может быть необязательно — но проверить, что оно реально работает на конечной выдаче, всё равно нужно.

Важно не получить конфликт двойного сжатия и убедиться, что CDN корректно проксирует и сжимает нужные типы. Подробно про работу сетей доставки — в материале про CDN для SEO и ускорения сайта. Если CDN нет, сжатие на своём сервере обязательно.

Чек-лист настройки сжатия

  1. Проверьте в DevTools заголовок content-encoding для HTML, CSS и JS.
  2. Если сжатия нет — включите как минимум Gzip на сервере (mod_deflate или gzip on).
  3. Подключите Brotli (ngx_brotli или mod_brotli) как основной метод для современных браузеров.
  4. Перечислите в типах все текстовые форматы: HTML, CSS, JS, JSON, SVG, XML.
  5. Исключите из сжатия уже упакованные форматы: JPEG, PNG, WebP, AVIF, видео, архивы.
  6. Для статики настройте предварительное сжатие на максимальном уровне.
  7. Для динамического HTML используйте средние уровни, чтобы не нагружать CPU.
  8. Если есть CDN — проверьте, что сжатие работает на его стороне без двойной обработки.
  9. Перепроверьте через PageSpeed Insights, что аудит сжатия текста стал зелёным.

Сжатие Brotli и Gzip — это тот случай, когда несколько строк конфигурации дают мгновенный и измеримый прирост скорости без какого-либо риска. Если ваш сайт до сих пор отдаёт несжатый HTML и JS, вы теряете секунды загрузки и платите за лишний трафик. Доверьте настройку сервера профессионалам — закажите доработку сайта с полной серверной оптимизацией или комплексное продвижение сайтов, где скорость — один из факторов выхода в ТОП Яндекса и Google.

Услуги LSI Продвижение

Наша команда предлагает полный спектр услуг по SEO-продвижению и технической доработке сайтов. Мы работаем только белыми методами, ориентируемся на реальный бизнес-результат — трафик, заявки и продажи, а не только позиции в отчёте, — и выстраиваем продвижение системно, под конкретные задачи и нишу вашего проекта. Начать можно с бесплатной диагностики, чтобы понять текущее состояние сайта и точки роста, а затем перейти к комплексной работе. Выберите подходящую услугу из списка ниже:

Закажите SEO продвижение сайта

Выведем ваш сайт в ТОП Яндекса и Google. Бесплатная консультация — разберём сайт, найдём точки роста и предложим стратегию продвижения.

Оставить заявку Бесплатный SEO аудит
Аудит сайта

Comments

  • Станислав

    Проверил свой сайт curl-ом — сжатие не включено вообще. Отдаю гостям в три раза больше байтов, чем нужно, годами. Спасибо, что открыли глаза, сегодня же правлю конфиг nginx.

  • Алла Фомина

    А в чём практическая разница между статическим и динамическим сжатием? У меня в основном отдаётся статика — CSS и JS собранные. Что выбрать?

    • Анатолий Кузнецов

      Алла, для собранной статики идеален статический Brotli: файлы .br генерируются один раз при сборке на максимальном уровне 11, а сервер просто отдаёт готовое — без нагрузки на процессор. Динамическое сжатие оставьте для HTML, который формируется на лету, там уровень 4-6. Комбинация даёт лучший результат.

  • Борис

    Включил Brotli на nginx, уровень выставил 11. TTFB немного вырос на динамике. Прочитал ваш раздел про уровни — оказывается, для on-the-fly надо ставить 4-6. Снизил, стало лучше.

  • Женя

    Начинающий, торможу: если у меня сайт за Cloudflare, мне вообще надо что-то настраивать на сервере? Вы пишете, что CDN сжимает сам.

    • Анатолий Кузнецов

      Женя, если сайт за Cloudflare, он действительно сжимает ответы на своей стороне для посетителей. Но настроить сжатие на сервере всё равно стоит: оно работает на участке между вашим сервером и Cloudflare и на случай, если запрос идёт мимо кэша. Так что да, оба уровня полезны.

  • Виталий Крючков

    Подскажите, а картинки JPEG и PNG тоже сжимать через Gzip/Brotli? Или в разделе про то, что не сжимать, как раз про них речь — они ведь уже сжаты.

  • Оксана

    Спасибо за таблицу сравнения Gzip и Brotli. Наглядно, что Brotli жмёт текст плотнее, но не везде поддерживается. Теперь понятно, зачем держать оба.

  • Денис Романов

    У меня Apache, а не nginx. Директивы из вашего раздела для Apache сработали через mod_deflate, но Brotli пришлось отдельно ставить модулем. Может, стоит про это отдельно упомянуть?

  • Галина

    Проверила через DevTools — в заголовке ответа content-encoding: gzip. Значит, всё работает? Или надо ещё как-то убедиться, что жмётся именно то, что нужно?

  • Артур

    Вопрос по TTFB: динамическое сжатие ведь добавляет нагрузку на процессор при каждом запросе. На высоконагруженном сайте это не съест выигрыш от меньшего размера?

    • Анатолий Кузнецов

      Артур, динамическое сжатие действительно грузит процессор, но на уровнях 4-6 нагрузка невелика и почти всегда перекрывается экономией на передаче. Ключ — не ставить 11 на лету. На высоконагруженных проектах статику отдавайте предсжатой, а динамику жмите умеренно — тогда TTFB не пострадает.

  • Людмила Серова

    Незаметная оптимизация, а эффект приятный — сайт реально стал шустрее открываться на мобильном интернете. Пара строк в конфиге, а Core Web Vitals подросли.

  • Пётр

    А зачем вообще Gzip, если есть Brotli? Не проще ли везде поставить только Brotli и не городить два алгоритма?

    • Анатолий Кузнецов

      Пётр, Brotli поддерживают не все клиенты и не все прокси, поэтому Gzip держат как универсальный запасной вариант. Сервер сам выбирает по заголовку Accept-Encoding: понимает браузер Brotli — отдаёт его, нет — Gzip. Убрать Gzip совсем — значит рискнуть тем, что часть клиентов получит несжатое.

  • Инна Дорохова

    У меня на сайте была такая же ситуация: думала, что тормозит база, а оказалось — несжатый JS на 400 килобайт. После Brotli стал отдаваться как 90. Магия.

  • Владислав

    Спасибо за раздел про то, что не сжимать. Я по незнанию гонял через gzip уже сжатые архивы и видео — только процессор грел впустую.

  • Марат Сафин

    А как проверить, что Cloudflare действительно отдаёт Brotli, а не Gzip? Хочу убедиться, что получаю максимум сжатия для посетителей из России.

  • Екатерина

    Настроила по чек-листу, всё работает. Единственное — не сразу поняла, что для статического Brotli файлы .br надо генерить заранее при сборке. Может, стоит выделить это ярче.

  • Юрий Лапшин

    Влияет ли сжатие на SEO напрямую или только через скорость? Хочу понять, ради галочки в Lighthouse это или реально даёт вклад в Core Web Vitals и ранжирование.

    • Анатолий Кузнецов

      Юрий, напрямую поисковики за сам факт сжатия не поднимают, но оно уменьшает вес ответа и ускоряет загрузку, а это уже влияет на LCP и общую оценку скорости — а скорость подтверждённый фактор. Так что это не ради галочки: реальный вклад в Core Web Vitals есть. Мы всегда проверяем сжатие первым делом на техаудитах.

  • Надежда

    Отличный разбор! Особенно ценно, что вы показали, как проверить, включено ли сжатие, до того как что-то менять. А то легко настроить в никуда и думать, что работает.

  • Оставить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.