Пара заголовков позволяет не передавать страницу заново, если она не менялась. Разбираем механизм, случаи, когда это действительно нужно, и ошибку, которая делает настройку вредной.
Коротко
- Код 304 сообщает, что страница не изменилась.
- Это экономит ресурсы сервера и ускоряет обход.
- Заголовок, который всегда одинаков, прячет обновления.
- Настройка имеет смысл на больших сайтах.
Как это работает
Сервер сообщает дату изменения страницы
В заголовке ответа.
Робот запоминает её
Вместе с содержимым.
При следующем визите он спрашивает
Изменилось ли что-то с этой даты.
Сервер отвечает
Либо новой страницей, либо кодом 304.
По документации код 304 сообщает, что страница не изменилась с прошлого обхода, и позволяет переиспользовать сохранённую версию, экономя ресурсы и трафик сервера. Тот же механизм работает и с меткой версии содержимого вместо даты.
Зачем это нужно
| Эффект | Кому заметен |
|---|---|
| Экономия ресурсов сервера | Большим сайтам |
| Меньше передаваемых данных | Всем |
| Обход тратится на изменившееся | Каталогам с тысячами страниц |
| Снижение нагрузки при обходе | Сайтам на слабом хостинге |
| Быстрее замечаются обновления | Часто обновляемым разделам |
На сайте в сотню страниц эффект почти незаметен, на каталоге в сотни тысяч — существенный. Это настройка для больших сайтов, и включать её в список первоочередных работ для небольшого сайта смысла нет. Про бюджет обхода — в статье про краулинговый бюджет.
Чем опасна неправильная настройка
Что ломается
- Дата всегда текущая — смысла нет
- Дата всегда одна и та же — обновления не видны
- Код 304 отдаётся всегда — изменения скрыты
- Дата не совпадает с реальным изменением
Как должно быть
- Дата меняется при реальном изменении
- И только при нём
- Код 304 приходит, когда изменений нет
- Поведение одинаково для всех типов страниц
Третья строка слева — единственный случай, когда лучше вообще не настраивать. Сервер, который всегда отвечает «не изменилось», прячет обновления: страницу переписали, а поиск продолжает считать её прежней. Это хуже отсутствия заголовка, потому что ошибка не видна ни в браузере, ни в отчётах.
Как проверить
Посмотрите заголовки ответа страницы
Есть ли дата изменения.
Повторите запрос с условием
Инструментом проверки ответа сервера.
Убедитесь, что приходит 304
Если страница не менялась.
Измените страницу и повторите
Теперь должен прийти код 200.
Проверьте разные типы страниц
Главная, категория, товар, статья.
Четвёртый шаг — единственная проверка, которая находит самую вредную ошибку. Первые три покажут, что механизм работает; только изменение страницы покажет, что он реагирует на изменения. Про проверку ответов — в статье про технический аудит.
Когда этим заниматься
| Ситуация | Приоритет |
|---|---|
| Каталог на десятки тысяч страниц | Имеет смысл |
| Робот обходит сайт медленно | Одна из мер |
| Слабый хостинг и высокая нагрузка | Имеет смысл |
| Небольшой сайт | Не приоритет |
| Есть мусорные адреса в индексе | Сначала уберите их |
Последняя строка важнее остальных по порядку действий. Экономить обход настройкой заголовков, когда робот ходит по десяткам тысяч ненужных адресов, — всё равно что чинить кран при открытой плотине. Про уборку — в статье про мусорные страницы в индексе.
Частые вопросы
Что делает код 304?
Сообщает, что страница не изменилась с прошлого обхода, и позволяет переиспользовать сохранённую версию. Это экономит ресурсы и трафик сервера.
Зачем настраивать эти заголовки?
Чтобы обход тратился на изменившиеся страницы, а не на повторную передачу неизменных. Эффект заметен на каталогах с десятками тысяч страниц.
Чем опасна неправильная настройка?
Сервер, который всегда отвечает «не изменилось», прячет обновления: страницу переписали, а поиск считает её прежней. Это хуже отсутствия заголовка.
Как проверить, что всё работает?
Запросить страницу с условием и убедиться, что приходит код 304, затем изменить страницу и убедиться, что приходит код 200. Вторая проверка важнее первой.
Читайте также
Продвинем сайт в поиске
Соберём семантику, доведём структуру и текст до уровня топа и будем вести проект до заявок.
Обсудить SEO-продвижение