Вебформат

Главная/Блог/ИТ-специалистам

ИТ-специалистам21 мая 20268 мин

HTTP-кэширование в Битрикс: ускорить индексацию и снять нагрузку

SEO-специалисты регулярно просят настроить заголовок Last-Modified в Битрикс. Задача кажется простой, но прячет много подводных камней. Разбираем, какие HTTP-заголовки управляют кэшем, почему Битрикс по умолчанию его запрещает и как отдавать ботам статус 304.

Поделиться
HTTP-кэширование в Битрикс · Last-Modified, ETag и статус 304

HTTP-кэширование позволяет ускорить индексацию сайта поисковыми роботами и снизить нагрузку на сервер. На больших каталогах правильно настроенное кэширование снимает заметную часть нагрузки от карточек товаров - до 30-40%. Но в 1С-Битрикс эта настройка сложнее, чем кажется, и с ходу не включается.

Статья - для веб-разработчиков, SEO-специалистов и владельцев сайтов на Битрикс, которым нужна быстрая индексация и меньше лишней нагрузки. Разберём логику заголовков и то, как мы поднимаем кэширование под Битрикс.

Зачем кэшировать на уровне HTTP

Когда страница не менялась, нет смысла отдавать её заново - ни боту, ни браузеру. HTTP-кэширование сообщает клиенту дату изменения, и при повторном заходе сервер отвечает коротким 304 Not Modified вместо полной генерации страницы.

  • Яндекс.Вебмастер рекомендует отдавать Last-Modified: чтобы показывать дату в выдаче, попадать в результаты с фильтром по дате и не пересканировать неизменённые страницы.
  • Google PageSpeed Insights требует явные заголовки кэширования для всех ресурсов.
  • Сервер разгружается: вместо рендера страницы отдаёт 304 - это особенно заметно на каталогах в десятки тысяч товаров.

Заголовки, которые управляют кэшем

  • Cache-Control - главный заголовок с директивами: max-age (срок жизни в секундах), public/private, no-cache, no-store, must-revalidate.
  • Expires - дата, до которой кэш считается валидным; ресурс не запрашивают повторно до этого момента.
  • Last-Modified - дата последнего изменения. Браузер при повторном запросе шлёт If-Modified-Since, и сервер отвечает 304, если ничего не поменялось.
  • ETag - то же, но вместо даты хэш содержимого. Браузер шлёт If-None-Match.
  • Date, Pragma, Age - вспомогательные: время сервера, устаревший аналог no-cache из HTTP/1.0 и возраст записи на промежуточных прокси.

Почему Битрикс по умолчанию запрещает кэш

Большинство сайтов на 1С-Битрикс из коробки отдают заголовки, которые запрещают браузерное кэширование:

Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Так Битрикс по умолчанию запрещает кэш

Это побочный эффект вызова session_start() с параметрами по умолчанию - сессия запускается на каждой странице и проставляет запрещающие заголовки. Поэтому просто включить Last-Modified не выходит: сначала нужно убрать это поведение для нужных страниц.

Сколько нагрузки снимает кэш

Замеры повторных заходов на двух интернет-магазинах показывают, ради чего всё затевается:

  • В течение суток - 3-5% повторных заходов.
  • В течение месяца - 15-30%.
  • В течение полугода - 30-40% заходов поисковых ботов приходится на уже виденные страницы.

Каждый такой заход на неизменённую страницу можно закрыть коротким 304 вместо полной генерации. На большом каталоге это и есть та самая снятая нагрузка.


Как мы поднимаем кэширование под Битрикс

Готового переключателя нет, поэтому реализуем механизм, который сам решает, что и насколько кэшировать:

  • 01Конфигурация. Список инфоблоков с шаблонами URL, отдельные наборы значимых полей для людей и для ботов, разные сроки max-age под каждую группу.
  • 02Индексная таблица. В памяти (Memory engine) храним по каждому элементу даты значимых изменений и ETag - отдельно для людей и для ботов.
  • 03Проверка запроса. Сверяем URL с шаблонами, достаём идентификатор элемента, проверяем условные заголовки If-Modified-Since и If-None-Match.
  • 04Ответ. Если значимых изменений нет - отдаём 304. Если есть - проставляем заголовки кэширования в событии OnEndBufferContent.

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

  • last-modified.com - показывает, отдаёт ли страница Last-Modified и возвращает ли 304 Not Modified.
  • redbot.org - разбирает заголовки и подсказывает ошибки кэширования.

Если индексация идёт медленно или сервер не справляется с нагрузкой - сначала стоит понять, в кэше дело или в чём-то ещё. Базовую диагностику можно провести самому (самостоятельный аудит сайта на 1С-Битрикс), а запас прочности под наплыв трафика проверяют нагрузочным тестированием. Если хотите, чтобы кэширование настроили под ваш каталог, - разберём задачу на диагностике.

Нужно ускорить и разгрузить сайт на Битрикс?

Обсудим ваш проект - посмотрим, как ваш сайт отдаёт заголовки кэширования, где теряется скорость индексации и нагрузка на сервер, и предложим, что настроить.