Главная / База знаний / Скорость и Core Web Vitals / Кэширование настроено неправильно
База знаний

Кэширование настроено неправильно

Браузер не кеширует статику, каждый раз загружает заново. Cache-Control, Expires, ETag.

Скорость и Core Web Vitals · 3 мин чтения

Симптом

Причина

Браузер кэширует ресурс только если сервер явно указывает, что файл можно хранить локально. Если в ответе отсутствуют заголовки Cache-Control, Expires, ETag или они заданы с нулевыми значениями, браузер считает файл «не кэшируемым» и каждый раз запрашивает его заново. Причины могут быть:

  1. Неправильная конфигурация веб‑сервера – отсутствуют директивы, задающие кэш‑политику для статических файлов.
  2. Обратный прокси / CDN – перезаписывает заголовки, убирая кэш‑инструкции.
  3. Неправильный MIME‑тип – некоторые типы файлов не кэшируются по умолчанию.
  4. Сжатие – если включено gzip/deflate, но не выставлен ETag, браузер не может использовать кэш.

Как проверить

  1. Проверка заголовков в ответе
    bash curl -I https://example.com/static/app.css Ищите строки: Cache-Control: Expires: ETag:

  2. Проверка в инструментах разработчика
    - Откройте вкладку Network.
    - Перезагрузите страницу.
    - Выберите любой статический файл и посмотрите заголовки ответа.

  3. Проверка конфигурации сервера
    - Для Nginx: nginx -T | grep -i cache
    - Для Apache: apachectl -t -D DUMP_MODULES и проверьте наличие mod_headers.

  4. Проверка прокси/CDN
    - Отключите временно CDN (если используется) и повторите запросы.
    - Смотрите заголовки, которые приходят от прокси (Via, X-Cache).

Решение

1. Настройка Nginx

# Для всех статических файлов
location ~* \.(css|js|png|jpg|jpeg|gif|svg|ico|woff2?)$ {
    expires 30d;                     # срок жизни в кэше
    add_header Cache-Control "public, max-age=2592000, immutable";
    add_header ETag $upstream_cache_status;
    try_files $uri =404;
}

2. Настройка Apache

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType text/css "access plus 30 days"
    ExpiresByType application/javascript "access plus 30 days"
    ExpiresByType image/webp "access plus 30 days"
    ExpiresByType image/svg+xml "access plus 30 days"
</IfModule>

<IfModule mod_headers.c>
    Header set Cache-Control "public, max-age=2592000, immutable"
</IfModule>

3. Проверка после изменений

curl -I https://example.com/static/app.css

Ответ должен содержать:

Cache-Control: public, max-age=2592000, immutable
Expires: Mon, 25 Apr 2026 00:00:00 GMT
ETag: "abcd1234"

4. Очистка кэша браузера

После обновления заголовков браузер может продолжать использовать старые файлы. Очистите кэш вручную или дождитесь истечения срока жизни.

5. Если используется CDN

Связанные

SEO КП · нужна помощь?

Не хотите разбираться сами?

Запустите технический аудит сайта за 5 минут — получите PDF-отчёт с разбором всех 64 параметров и конкретными точками роста. Или закажите комплексное SEO-продвижение сайта — починим всё это и возьмём на себя дальнейшую оптимизацию.

Запустить аудит за 199 ₽ Узнать про продвижение →