К основному содержимому

Включить сжатие gzip/Brotli на хостинге cPanel

Хостинг и cPanel · 15.10.2025 · 4 мин чтения
Иллюстрация к статье «Включить сжатие gzip/Brotli на хостинге cPanel»

Сжатие gzip уменьшает размер HTML, CSS и JS файлов на 60–80% перед отправкой в браузер. Это один из самых быстрых способов улучшить PageSpeed без изменения кода.

Включить gzip через .htaccess

<IfModule mod_deflate.c>
  # Включить сжатие для текстовых типов
  AddOutputFilterByType DEFLATE text/html
  AddOutputFilterByType DEFLATE text/css
  AddOutputFilterByType DEFLATE text/javascript
  AddOutputFilterByType DEFLATE application/javascript
  AddOutputFilterByType DEFLATE application/x-javascript
  AddOutputFilterByType DEFLATE text/xml
  AddOutputFilterByType DEFLATE text/plain
  AddOutputFilterByType DEFLATE application/json
  AddOutputFilterByType DEFLATE image/svg+xml
  AddOutputFilterByType DEFLATE application/x-font-ttf
  AddOutputFilterByType DEFLATE font/opentype

  # Не сжимать уже сжатые форматы
  SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|webp|zip|gz)$ no-gzip
</IfModule>

Проверка сжатия

После добавления кода проверьте сжатие:

  1. Откройте gzip-test online
  2. Или в Chrome DevTools: Network → выберите документ → Headers → Content-Encoding: gzip

Brotli: ещё лучше gzip

Brotli сжимает на 15–20% лучше gzip. На cPanel Brotli включается в разделе Software → Optimize Website.

# Если доступен mod_brotli:
<IfModule mod_brotli.c>
  AddOutputFilterByType BROTLI_COMPRESS text/html text/css application/javascript
</IfModule>

Кэширование в браузере

В паре со сжатием настройте кэш — это ещё больше ускорит повторные визиты:

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 1 month"
  ExpiresByType text/css "access plus 1 year"
  ExpiresByType application/javascript "access plus 1 year"
  ExpiresByType image/jpeg "access plus 1 year"
  ExpiresByType image/png "access plus 1 year"
  ExpiresByType image/webp "access plus 1 year"
</IfModule>
✅ Сжатие + кэш браузера — обязательный минимум для любого сайта. PageSpeed Insights прямо указывает на их отсутствие как на проблему.

Частые ошибки при включении сжатия

Большинство проблем со сжатием видны сразу по заголовкам ответа или по логам Apache.

Invalid command 'SetEnvIfNoCase', perhaps misspelled or defined by a module not included in the server configuration

Модуль mod_setenvif не подключён на сервере, хотя .htaccess уже содержит правило с ним. На части тарифов виртуального хостинга список разрешённых модулей ограничен — уберите строку с SetEnvIfNoCase или обратитесь в поддержку, чтобы проверить список включённых модулей Apache.

ERR_CONTENT_DECODING_FAILED

Браузер получил заголовок Content-Encoding: gzip, но тело ответа сжато не было или сжато дважды — типично, если сжатие включено одновременно на уровне cPanel (Optimize Website) и вручную в .htaccess. Оставьте только один уровень сжатия, не оба сразу.

PageSpeed Insights: "Включите сжатие текста" — не устранено

Такое сообщение после правки .htaccess обычно означает, что тестируется закэшированная версия страницы у CDN или прокси перед хостингом (тот же Cloudflare), который снимает заголовки сжатия origin-сервера и переупаковывает ответ по-своему. Проверяйте заголовки напрямую на origin, в обход CDN, либо сбросьте кэш CDN.

gzip и Brotli: сравнение

ПараметрgzipBrotli
Степень сжатия HTML/CSS/JS60–80%65–85%
Нагрузка на CPU при сжатииНижеВыше на максимальном уровне
Поддержка браузерамиВсе браузерыВсе современные браузеры
Доступность на shared-хостингеПочти вездеНе на всех тарифах

Разница между gzip и Brotli заметна на больших текстовых файлах — на типичной странице в 50–100 КБ выигрыш всего в несколько килобайт, и его легко потерять на неудачно настроенном уровне сжатия (максимальный уровень Brotli создаёт заметную нагрузку на CPU при каждом первом запросе без кэша).

Когда сжатие не даст эффекта

Изображения (JPEG, PNG, WebP), видео и уже архивированные файлы (ZIP, GZ) сжатию не подлежат — они уже используют собственные алгоритмы компрессии, и повторное сжатие либо не уменьшает размер, либо увеличивает его за счёт заголовков. Правило SetEnvIfNoCase Request_URI ... no-gzip в примере выше существует именно для этого — не пропускайте его. Если провайдер полностью отключил mod_deflate на уровне сервера (актуально для некоторых бюджетных тарифов), правки в .htaccess ничего не изменят — нужно подтверждение от поддержки, что модуль доступен.

Как проверить результат

Заголовки ответа сервера — самый надёжный источник, надёжнее визуальных индикаторов в онлайн-тестах:

curl -H "Accept-Encoding: gzip, br" -I https://example.com/ | grep -i "content-encoding\|content-length"

Заголовок Content-Encoding: gzip или br в ответе подтверждает, что сжатие работает. Дополнительно сравните Content-Length со сжатием и без — разница в разы для текстовых файлов подтверждает эффект. Если заголовок отсутствует при явном запросе Accept-Encoding, сжатие не активно, несмотря на правки в конфиге.

Статья помогла?
← Назад в базу знаний Задать вопрос поддержке