Last Modified и WordPress

Давайте сегодня рассмотрим такой вопрос: что такое Last Modified и If-Modified-Since, зачем они нужен и как добавить их в WordPress.

Настройка Last modified в WordPress

Что такое Last Modified

Это один из ответов сервера при открытии любой страницы Вашего сайта. Он содержит в себе дату последнего изменения страницы в определенном Unix-формате.

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

Что такое If-Modified-Since

Это заголовок, который посылает поисковая система, содержащий дату последней индексации страницы. Наш сайт на этот заголовок должен правильно среагировать — отдать правильный ответ. Если страница не была изменена за это время — дать ответ 304 Not Modified, который скажет поисковой системе, что страница не менялась и можно переходить к следующей. В случае, если страница была обновлена — отдать ответ 200 OK

Как же это влияет на индексацию?

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

Если поисковик видит, что изменения не было — он просто пропускает страницу и сразу переходит к следующей.

  • Таким образом он может за раз пройти больше страниц
  • Объем новых страниц, попадающих в индекс, увеличивается
  • Нагрузка на Ваш сайт снижается (т.к. поисковик не выкачивает страницы без изменений)
  • Поисковик при сортировке результатов выдачи по дате начнет показывать Ваш сайт

Вот, что пишет у себя Яндекс по поводу Last Modified, если такой заголовок не отдается:

  • в результатах поиска не будет показываться дата рядом со страницами вашего сайта;
  • при сортировке по дате сайт не будет виден большинству пользователей
  • робот не сможет получить информацию о том, обновилась ли страница сайта с момента последнего индексирования. А так как число страниц, получаемых роботом с сайта за один заход, ограничено, изменившиеся страницы будут переиндексироваться реже.

Вывод: отдавать заголовок Last Modified и правильный ответ на If-Modified-Since в крайней степени желательно, если Вы не хотите проблем с индексацией.

результат проверки

Проверить Ваш сайт можно по ссылке.

Как добавить Last Modified?

Интернет пестрит такого рода решениями:

header("Last-Modified: " . date('r',strtotime($post->post_modified)));

Или ковырянием в ядре движка. Оба варианта не подходят. Объясним почему.

Первый вариант предлагается добавлять в header.php. Какие здесь минусы:

  • Это сработает только для записей и страниц, не будет работать для архивов (категорий, тегов, таксономий), для главной
  • На всех страницах, кроме записей и страниц, переменная $post отсутствует, что тоже приведет к ошибке
  • Если раньше заголовки уже отдались, это приведет к фатальной ошибке, необходима проверка
  • Данный код нужно вызывать хуками, а не напрямую в коде
  • Не учитывает добавленные комментарии

Второй вариант сразу отпадает и никогда таким не занимайтесь. Лезть в код ядра НЕЛЬЗЯ! При обновлении — все Ваши правки сотрутся.

Почему необходим If-Modified-Since?

При повторном посещении Вашего сайта поисковая система добавить к запросу заголовок If-Modified-Since и не получив ответа 304 Not Modified — она будет заново выкачивать страницу и сравнивать её. Одним Last-Modified не отделаться. Поисковик должен именно получить ответ на вопрос: «менялась ли страница с».

Как добавить If-Modified-Since

Для этого нужно смотреть наличие $_SERVER['HTTP_IF_MODIFIED_SINCE'] и сравнивать его с датой последнего изменения страницы. Если изменения были — отдать ответ 200, если изменений не было — отдать ответ 304.

Как проверить, работает ли у меня Last Modified?

Создайте у себя на хостинге файл с содержимым:

Откройте его в браузере и проверьте заголовки.

Где найти правильное рабочее решение?

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

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

Результат работы плагина Clearfy:

результат работы плагина clearfy