Last-Modified — это HTTP-заголовок, который сообщает браузеру и поисковым системам дату последнего изменения страницы. В Битрикс его можно использовать для оптимизации кеширования и снижения нагрузки на сервер.
Краткий ответ
В Битрикс заголовок Last-Modified отправляется через header() и часто используется вместе с проверкой If-Modified-Since для отдачи 304 Not Modified.
<?php
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
?>
Зачем нужен Last-Modified
Заголовок помогает:
- уменьшить нагрузку на сервер
- ускорить загрузку страниц
- улучшить SEO
- оптимизировать работу браузерного кеша
Как работает Last-Modified
Схема работы:
- сервер отправляет дату изменения страницы
- браузер сохраняет её
- при следующем запросе отправляется If-Modified-Since
- сервер решает, отдавать 304 или новый контент
Рабочий пример для Битрикс
Простой вариант установки Last-Modified
<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true)
{
die();
}
$lastModified = date("D, d M Y H:i:s", strtotime("now")) . " GMT";
header("Last-Modified: " . $lastModified);
?>
Продвинутый вариант с If-Modified-Since
<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true)
{
die();
}
// дата последнего изменения (например, из БД)
$lastModifiedTime = strtotime("2026-06-10 12:00:00");
$lastModified = gmdate("D, d M Y H:i:s", $lastModifiedTime) . " GMT";
// проверка запроса от браузера
if (!empty($_SERVER['HTTP_IF_MODIFIED_SINCE']))
{
$ifModifiedSince = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
if ($ifModifiedSince >= $lastModifiedTime)
{
header("HTTP/1.1 304 Not Modified");
exit;
}
}
// отправка заголовка
header("Last-Modified: " . $lastModified);
?>
Как использовать Last-Modified в Битрикс правильно
Лучшее место для установки заголовка — component.php или init.php, в зависимости от архитектуры проекта.
Пример с инфоблоками
<?php
$lastChange = CIBlockElement::GetList(
[],
["IBLOCK_ID" => 5],
false,
["nTopCount" => 1],
["TIMESTAMP_X"]
);
if ($item = $lastChange->Fetch())
{
$lastModifiedTime = strtotime($item["TIMESTAMP_X"]);
header("Last-Modified: " . gmdate("D, d M Y H:i:s", $lastModifiedTime) . " GMT");
}
?>
Связка Last-Modified и кеширования
Last-Modified хорошо работает вместе с кешированием Битрикс:
- компонентный кеш
- managed cache
- HTTP cache
Типичные ошибки
1. Отправка заголовка после вывода HTML
echo "test";
header("Last-Modified: ..."); // ❌ ошибка
2. Неверный формат даты
HTTP требует формат GMT.
3. Отсутствие проверки If-Modified-Since
Без неё сервер всегда отдает 200 OK.
4. Установка в шаблоне
Лучше не размещать header в template.php.
Лучшие практики
- используйте GMT формат даты
- добавляйте If-Modified-Since проверку
- берёте дату из реального источника (БД)
- не отправляйте заголовки после вывода контента
- сочетайте с кешированием Битрикс
FAQ
Что делает Last-Modified?
Сообщает браузеру дату последнего изменения страницы.
Зачем нужен If-Modified-Since?
Позволяет отдавать код 304, если страница не изменилась.
Можно ли использовать в Битрикс?
Да, это стандартная практика оптимизации.
Где лучше устанавливать заголовок?
В component.php, init.php или контроллере.
Заключение
Last-Modified в Битрикс — это простой и эффективный способ оптимизации загрузки страниц. При правильной реализации он снижает нагрузку на сервер, ускоряет сайт и улучшает SEO-показатели.