BrandEvo

Скорость сайта

Кэширование в браузере: как настроить

Кэширование на стороне браузера — самый дешёвый способ сделать сайт быстрее для постоянных посетителей. Разбираем заголовки Cache-Control, ETag и Last-Modified, и какие правила прописывать для CSS, JS, картинок и HTML. В этой статье разбираем кэширование в браузере по шагам — без воды и лишней теории.

CACHE-CONTROLETAGEXPIRESLAST-MODIFIEDNGINXAPACHEСКОРОСТЬCACHE-CONTROLETAGEXPIRESLAST-MODIFIEDNGINXAPACHEСКОРОСТЬ
кэширование

Когда пользователь приходит на сайт во второй раз, многие ресурсы — стили, скрипты, шрифты, картинки — можно вообще не качать заново. Браузер хранит их у себя, если сервер разрешил это специальными заголовками. Правильное кэширование экономит трафик, разгружает сервер и заметно ускоряет повторные визиты.

01Что такое кэширование браузера и зачем оно нужно

Кэш браузера — это локальное хранилище, куда автоматически складываются скачанные с сайта файлы. При повторном открытии страницы браузер сначала смотрит, что у него уже есть, и только потом обращается к серверу. Если у файла есть инструкция «храни 30 дней» — браузер вообще не сделает запрос.

Правильно настроенное кэширование решает три задачи: быстрая загрузка повторных визитов, экономия трафика на стороне пользователя, снижение нагрузки и счетов у владельца. Особенно это важно для сайтов с постоянной аудиторией — блогов, интернет-магазинов, личных кабинетов. О связке скорости с другими факторами мы писали в материале «Как ускорить загрузку сайта».

02Cache-Control: главный заголовок

Современный стандарт управления кэшем — заголовок Cache-Control. Он отправляется сервером вместе с файлом и говорит браузеру, что с этим файлом делать. Основные значения:

  • public — файл может кэшироваться кем угодно, включая промежуточные CDN.
  • private — кэшировать может только сам браузер пользователя.
  • no-cache — кэшировать можно, но каждый раз нужно проверять у сервера, актуален ли файл.
  • no-store — не кэшировать совсем (например, для страниц с конфиденциальной информацией).
  • max-age=31536000 — срок хранения в секундах. 31536000 — это год.
  • immutable — файл точно не изменится, можно вообще не проверять.

Типичный набор для статики выглядит так: Cache-Control: public, max-age=31536000, immutable. Браузер сохранит файл на год и не будет тревожить сервер.

03ETag и Last-Modified: валидация

Иногда нужно, чтобы браузер всё-таки проверял актуальность файла, но не качал его полностью, если ничего не изменилось. Для этого есть два механизма.

Last-Modified

Сервер указывает дату последнего изменения файла. При повторном запросе браузер присылает её в заголовке If-Modified-Since. Если файл не менялся, сервер отвечает кодом 304 «Not Modified» и пустым телом — экономится трафик и время.

ETag

То же самое, но вместо даты — уникальный «отпечаток» содержимого файла. Точнее, но чуть дороже в вычислении. Браузер присылает заголовок If-None-Match, и сервер либо подтверждает кэш, либо отдаёт новую версию.

На практике оба механизма работают вместе и включаются автоматически на большинстве веб-серверов. Их основная роль — для файлов, которым нельзя сразу выставить большой max-age, например, для HTML.

04Какие правила прописывать для разных типов файлов

Простая рабочая схема:

  • CSS и JS с версионированием в имени (style.a3f9.css): max-age=31536000, immutable. Файл точно не изменится, новая версия будет другим именем.
  • Изображения, иконки, шрифты: max-age=31536000, public. Меняются редко, при обновлении меняйте имя файла.
  • HTML страниц: no-cache или max-age=0, must-revalidate. Контент может поменяться, нужно валидировать.
  • API-ответы, ленты: чаще всего no-store или короткий max-age в зависимости от логики.
  • Личные кабинеты, корзина: private, no-store — чтобы не утекло на чужие устройства.

Важный момент: версионирование статики. Если CSS и JS лежат под фиксированными именами без хэша, их нельзя кэшировать надолго — иначе после обновления сайта посетители увидят старую вёрстку. Современные сборщики добавляют хэш в имя файла автоматически, и это решает проблему.

05Где именно настраивать кэширование

Кэширование настраивается на стороне веб-сервера, реже — в коде приложения. Ключевые места:

Nginx

В конфиге сайта прописывают директиву expires и add_header Cache-Control внутри секции location по расширению файлов. Обычно это пара десятков строк, которые ставятся один раз и работают.

Apache

Через .htaccess или конфиг используют модули mod_expires и mod_headers. На большинстве шаред-хостингов всё уже включено и достаточно просто прописать правила.

WordPress и плагины

Плагины кэширования (WP Rocket, LiteSpeed Cache, W3 Total Cache) умеют сами генерировать правила в .htaccess. Это удобно для тех, кто не хочет лезть в конфиги. О выборе плагина мы писали в материале «Плагины кэширования WordPress».

CDN

Если перед сайтом стоит CDN, важно проверить, что его настройки уважают заголовки сервера. Иначе CDN может отдавать всё с собственным сроком кэша, который рассинхронизирован с сайтом.

06Типичные ошибки и как их избежать

Что мы часто видим в аудитах:

  • Cache-Control: no-cache на всё подряд. Часто это след от шаблонной конфигурации хостинга. Браузер каждый раз перепроверяет файлы, скорость падает.
  • Большой max-age на HTML. Пользователь видит старую версию страницы и думает, что сайт сломан.
  • Кэш статики без версионирования. После выкатки правок часть посетителей видит «сломанную» вёрстку.
  • ETag отключён, Last-Modified тоже. Браузер всегда качает файл целиком, даже когда ничего не поменялось.
  • Конфликт CDN и сервера. CDN отдаёт устаревший контент даже после очистки кэша на сервере.

Проверить настройки можно прямо в DevTools: вкладка Network, открыть любой ресурс, посмотреть Response Headers. Также в PageSpeed Insights есть отдельный пункт «Используйте эффективную политику кэширования» — он подсветит файлы без правильных заголовков.

// Как это работает в BrandEvo

Кэширование — без головной боли

В подписке мы настраиваем правила Cache-Control сразу при разработке сайта и следим, чтобы они не сбивались после обновлений плагинов и CMS. Включаем мониторинг скорости и реагируем на просадки.

Официальная документация по теме — Справка Яндекс.Вебмастера.

// Читайте также

Смежные материалы

Хотите быстрый сайт без переделок?

Проверим, как настроено кэширование, сжатие и хостинг, и предложим план, который реально ускорит сайт.


Частые вопросы

Подходит ли подписка BrandEvo моему бизнесу?

Подписка работает для малого и среднего бизнеса в России. Тариф «Старт» — 200 000 ₽/год для услуг и небольших проектов, «E-commerce» — 400 000 ₽/год для интернет-магазинов. Подробное сравнение — на странице тарифов.

Что входит в подписку маркетинга?

Полный цикл: SEO, контекстная реклама, контент-маркетинг, email-рассылки, дизайн, веб-аналитика и разработка под задачу. Не отдельные услуги, а одна команда под результат.

Можно ли начать, если у меня ещё нет сайта?

Да. Если сайта нет — в первый месяц делаем посадочную страницу или лендинг. Если есть — проводим аудит и улучшаем. Создание и поддержка сайта входят в подписку.

Смотреть тарифы →
Карта блога — все статьи