Скорость загрузки — один из немногих факторов ранжирования, который работает сразу для всей страницы. Если сервер отдаёт HTML, CSS и JavaScript в «распакованном» виде, страница весит в разы больше, дольше открывается и хуже попадает в топ. Gzip и кеширование решают эту проблему за пять минут настройки. Разбираю на конкретных цифрах и примерах конфигураций, как включить сжатие, не сломать кэш прокси и проверить результат без платных сервисов.
Что такое Gzip и зачем для SEO важна скорость загрузки
Представьте обычную страницу: HTML-код, стили и скрипты. В несжатом виде они занимают немало места — HTML часто весит 50–100 КБ, CSS 20–50 КБ, а JavaScript и вовсе 100–500 КБ. Сумма по одной странице легко доходит до 200–650 КБ только на базовые ресурсы, без учёта картинок и шрифтов.
Gzip — это алгоритм сжатия без потерь для текстовых файлов. Он убирает повторяющиеся фрагменты кода и сокращает размер HTML, CSS, JavaScript, JSON, XML и SVG на 60–80%. Страница, которая весила 500 КБ, после сжатия «сжимается» до 100–150 КБ. Браузер получает меньший файл, скачивает его быстрее, а сервер тратит меньше трафика и ресурсов.
Почему это важно именно для SEO:
- Поисковые системы, в первую очередь Google, учитывают скорость страниц в ранжировании — как на десктопе, так и на мобильных устройствах.
- Медленная страница увеличивает показатель отказов: пользователи уходят, не дождавшись загрузки.
- Меньший объём данных снижает нагрузку на хостинг и улучшает показатели Core Web Vitals, особенно Large Contentful Paint.
Простыми словами: сжатие делает сайт быстрее, а скорость напрямую влияет на позиции и поведенческие факторы. Отдельно стоит упомянуть, что вопрос скорости обсуждался подробно в статье про скорость загрузки сайта для SEO — Gzip и кэш там выступают базовыми элементами оптимизации.
Как включить gzip в nginx
Это самый популярный вариант на современных серверах. Достаточно добавить несколько строк в конфиг nginx.conf или в блок server:
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 1000;
gzip_comp_level 6;
gzip_vary on;
gzip_proxied any;
gzip_buffers 16 8k;
Разберу ключевые директивы. gzip on включает сжатие. gzip_types перечисляет MIME-типы, которые нужно сжимать — по умолчанию nginx не сжимает ничего, кроме HTML. gzip_min_length 1000 не сжимает файлы меньше 1 КБ, чтобы накладные расходы на сжатие не превысили выгоду. gzip_comp_level 6 — рекомендуемый уровень: баланс между размером и нагрузкой на процессор.
Как включить gzip в Apache через .htaccess
Если сайт работает на Apache, используйте модуль mod_deflate. Правила прописываются в файле .htaccess:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/json application/javascript text/xml application/xml text/javascript
DeflateCompressionLevel 6
SetOutputFilter DEFLATE
</IfModule>
AddOutputFilterByType выбирает типы файлов для сжатия, DeflateCompressionLevel задаёт уровень, а SetOutputFilter DEFLATE применяет фильтр к ответу. Убедитесь, что модуль включён на сервере — проверить это можно через phpinfo() или у хостинг-провайдера.
Как проверить, что сжатие работает
Самый быстрый способ — запросить заголовки страницы через командную строку:
curl -sI 'https://example.ru/' | grep -i content-encoding
Если в ответе появляется строка Content-Encoding: gzip, сжатие активно. Если вывод пустой — сервер не сжимает файлы, и настройку нужно повторить. Для проверки через браузер откройте DevTools, вкладку Network, обновите страницу и посмотрите на колонку Content-Encoding у ресурсов.
Кеширование браузера: Cache-Control и Expires
Сжатие экономит трафик при первом посещении, но настоящую экономию даёт кэш. Когда браузер один раз скачал стили, скрипты и картинки, он должен сохранить их локально и не запрашивать заново на повторных визитах. За это отвечают заголовки кэширования.
Cache-Control — основной современный заголовок. Он задаёт стратегию в одном месте:
<IfModule mod_expires.c>
Header set Cache-Control "public, max-age=31536000"
</IfModule>
Значение max-age=31536000 означает, что ресурс можно хранить в кэше год. Директива public разрешает сохранять ответ и у браузера, и у общих прокси. Для статических файлов с уникальными именами (с хешем в названии, как в современных сборках) это идеальный вариант.
Expires — более старый аналог, который задаёт конкретную дату окончания жизни ресурса:
<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType text/html "no-cache"
</IfModule>
Здесь важный нюанс: HTML стоит помечать как no-cache, чтобы пользователи всегда получали актуальную версию страницы, а не старую из кэша. Статику — изображения, стили, скрипты — наоборот, кэшируем надолго.
Хорошая практика — настраивать оба заголовка вместе: Cache-Control как основной, а Expires как запасной для старых браузеров и прокси. Об этом же рассказано в материале про HSTS и security-заголовки, где кэш рассматривается среди прочих HTTP-заголовков, влияющих на безопасность и производительность.
Как проверить сжатие и кеш: инструменты и Lighthouse
Настроить заголовки — половина дела, вторую составляет проверка. Есть несколько способов убедиться, что всё работает.
Через командную строку. Сравниваем длину ответа со сжатием и без него:
# Без сжатия
curl -sI 'https://example.ru/' | grep -i content-length
# Со сжатием
curl -sI -H 'Accept-Encoding: gzip' 'https://example.ru/' | grep -i content-length
Если вторая цифра заметно меньше — сжатие работает. Аналогично проверяем кэш:
curl -sI 'https://example.ru/' | grep -iE "cache-control|expires"
Через Lighthouse. Этот инструмент встроен в DevTools Chrome и даёт комплексную оценку. Откройте вклад Performance, запустите аудит — Lighthouse покажет, сколько ресурсов отдаётся со сжатием, какие заголовки кэша присутствуют и насколько ускорится повторная загрузка. Отдельный раздел Review Insights проверяет наличие Cache-Control для кэшируемых активов.
Через онлайн-сервисы. Есть публичные проверки GZIP и заголовков кэша по URL — удобно, когда нужно быстро глянуть чужой сайт без установки чего-либо локально. Они сразу показывают Content-Encoding и значения Cache-Control.
Сводная таблица, что и как проверять:
| Параметр | Что смотреть | Инструмент |
|---|---|---|
| Сжатие | Content-Encoding: gzip |
curl, DevTools, онлайн-проверка |
| Уровень сжатия | Разница Content-Length | curl |
| Кэш статики | Cache-Control, Expires |
curl, Lighthouse |
| Повторная загрузка | Время без сети | Lighthouse Performance |
Типичные ошибки: не сжаты изображения и нет кеша для статики
На практике оптимизация скорости часто упирается в одни и те же недоработки. Перечислю самые частые.
1. Сжатие того, что уже сжато. Изображения в JPG, PNG, WebP, шрифты woff2/ttf, PDF и медиафайлы уже сжаты алгоритмами со потерями или без. Пытаться сжимать их снова через Gzip бессмысленно — файл почти не уменьшится, а процессор будет работать вхолостую. Сжимать нужно только текст: HTML, CSS, JavaScript, JSON, XML и SVG.
2. Отключение кэша для статики. Если стили и скрипты помечены как no-cache, браузер будет скачивать их заново на каждой странице. Это главная причина, почему сайт «тормозит» даже со включённым Gzip. Статике нужен долгий кэш, HTML — без кэша.
3. Слишком маленький gzip_min_length. Если сжимать файлы меньше 1 КБ, накладные расходы превысят пользу. Для маленьких ресурсов лучше оставить исходный размер.
4. Забытая директива Vary: Accept-Encoding. Без неё прокси-серверы и CDN могут отдать несжатый файл браузеру, который сжатие поддерживает. В nginx это решает gzip_vary on, о которой говорилось выше.
5. Проверка только одного параметра. Часто включают Gzip и забывают о кэше, или наоборот. А ведь вместе они дают синергию: сжатие экономит трафик при первой загрузке, кэш — вообще исключает повторную на повторах.
Отдельного внимания заслуживает проверка robots.txt: неправильно закрытые от индексации ресурсы могут не попасть в обработку и выглядеть как ошибка, хотя технически всё настроено. Подробнее — в статье про robots.txt: как настроить и читать.
Как проверить в seoquest.ru (/check/free)
Все перечисленные пункты удобно свести в одну проверку. Бесплатная проверка сайта на seoquest.ru оценивает сжатие как один из ключевых параметров Health Score: если Gzip не включён, это заметный минус, а размер страницы после сжатия должен быть в 3–5 раз меньше исходного. Сервис показывает и заголовки кэша — так вы сразу видите, где статика не кэшится, а где HTML случайно «завис» в кэше.
Что получится после проверки:
- чёткий список, какие ресурсы не сжаты;
- рекомендации по заголовкам Cache-Control и Expires;
- общая оценка скорости, которую можно сравнить до и после настройки.
Это удобнее, чем гадать по отдельным заголовкам: один отчёт объединяет данные о сжатии, кэше и размере страницы. Попробовать можно без регистрации — инструмент доступен в бесплатной проверке.
Итог
Gzip и кеширование — самый простой и дешёвый способ ускорить сайт. Сжатие уменьшает вес HTML, CSS и JavaScript в 3–5 раз, а кэш избавляет браузер от повторных запросов одной и той же статики. Настройка занимает минуты: несколько строк в конфиге nginx или файле .htaccess, проверка через curl или Lighthouse и финальная оценка в бесплатной проверке seoquest.ru. Результат — быстрее открывающиеся страницы, ниже отказы и выше позиции в поиске.
Хотите убедиться, что на вашем сайте всё настроено правильно? Проверьте сайт бесплатно и посмотрите раздел скорости в своём аудите — сервис покажет, где не хватает сжатия и кэша.
Часто задаваемые вопросы
Нужно ли сжимать изображения через Gzip?
Нет. Картинки в JPG, PNG, WebP уже сжаты отдельными алгоритмами. Сжимать нужно только текст: HTML, CSS, JavaScript, JSON, XML и SVG. Для картинок лучше использовать современные форматы вроде WebP.
Влияет ли сжатие на нагрузку на сервер?
Да, но незначительно. Уровень 6 — оптимальный баланс между размером файла и расходом процессора. На современных серверах нагрузка почти незаметна.
Что выбрать: Gzip или Brotli?
Настройте оба. Современный nginx сам выберет: если браузер поддерживает Brotli — отдаст его (он сжимает на 15–20% лучше), иначе переключится на Gzip как fallback.
Как понять, что кэш настроен правильно?
HTML должен отдаваться без долгого кэша (no-cache), а статика — изображения, стили и скрипты — с max-age в несколько месяцев или лет. Проверить заголовки можно через curl или Lighthouse.
Сколько времени занимает настройка?
Пять минут: добавить директивы в конфиг сервера, перезапустить его и проверить ответ через curl -sI. Эффект от этого — мгновенный.