До основного вмісту

Увімкнути стиснення 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, стиснення не активне, попри правки в конфігу.

Чи була стаття корисною?
← Назад до бази знань Поставити питання підтримці