Случай 1: Last-Modified отсутствует
Если ваш сайт на статическом HTML — добавьте директиву в конфигурацию веб-сервера. Для Apache в .htaccess:
<IfModule mod_headers.c>
Header set Last-Modified "%{time:%a, %d %b %Y %H:%M:%S GMT}"
</IfModule>
Для Nginx:
location / {
if_modified_since before;
add_header Last-Modified $date_gmt;
}
Важно: эти директивы работают только для статичных файлов. Для динамических страниц (PHP, CMS) дату последнего изменения нужно передавать из кода.
Случай 2: CMS не отдаёт Last-Modified
WordPress, 1С-Битрикс, Joomla и другие популярные CMS могут не отправлять заголовок по умолчанию. Решения:
- WordPress: установите плагин кеширования (WP Rocket, W3 Total Cache) — они добавляют Last-Modified при генерации статического кеша.
- 1С-Битрикс: в настройках компонента включите «Управляемый кеш» или добавьте в header.php код:
Header("Last-Modified: ".gmdate("D, d M Y H:i:s", time())." GMT"); — но это не учитывает реальные изменения контента. Лучше использовать API для получения даты последнего обновления элемента инфоблока.
- Самописная CMS: на странице детального просмотра записи вызовите
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $lastModifiedTimestamp) . ' GMT'); перед любым выводом.
Случай 3: 304 не возвращается, хотя Last-Modified есть
Самая частая причина — кеширующий плагин или CDN не передаёт условный запрос на origin-сервер. Проверьте настройки:
- Cloudflare: включите «Cache Level: Standard» и убедитесь, что не стоит правило, принудительно возвращающее 200.
- Nginx + FastCGI cache: добавьте в конфигурацию:
fastcgi_hide_header Last-Modified; не нужно, наоборот — убедитесь, что заголовок не удаляется.
- Apache mod_expires: не блокирует Last-Modified, но если стоит
Header unset Last-Modified — удалите.
Другая причина — динамическая генерация страницы с уникальным контентом при каждом запросе (например, случайные отзывы, счётчики, время сессии). В таких случаях сервер не может определить единую дату изменения, и условные запросы неэффективны. Решение — кешировать страницу целиком или исключить из индексации динамические параметры.