Как узнать last modified страницы. Ускорение индексации поисковыми системами


В этой статье мы будем настраивать важнейший заголовок ответа сервера - Last-Modified, благодаря чему нагрузка на сервер снизится на 20-30%, а индексация вашего сайта ускорится в разы. Также мы научим ваш сервер выдавать 304 ошибку, в случае, когда поисковый робот обращается к вашему сайту с заголовком If-Modified-Since.

Зачем нужен заголовок Last-Modified

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

Заголовок Last-Modified содержит в себе дату и время по Гринвичу, когда страница последний раз изменялась. У каждой страницы своя дата. Практически любые из существующих CMS сейчас сохраняют дату редактирования страниц или записей, также дата обновления страницы изменяется, когда кто-либо оставил индексируемый комментарий (все зависит от ваших конкретных настроек). Только вот почему-то далеко не все современные системы администрирования предусматривают отправку той самой даты изменения страницы в виде заголовка и уж, тем более, никак не реагируют на получаемый заголовок If-Modified-Since, но об этом чуть позже.

Дело в том, что поисковый робот может довольно часто заходить на регулярно обновляемый сайт и сканировать его страницы в порядке приоритета, иногда даже приходится выставлять параметр Crawl-delay в robots.txt, чтобы немного умерить пыл излишне активных роботов, перегружающих несчастный сервер, а иногда, наоборот, люди месяцами напряженно работают, не видя никаких результатов, лишь бы только увеличить частоту посещения сайта поисковым роботом . Если такой сайт не сообщает поисковому сканеру о том, когда какие страницы последний раз изменялись и изменялись ли они вообще со времени прошлого визита, сканер в свою очередь проходится по страницам снова и снова, так как будто они изменились, хотя это может быть и не так. А так как количество загружаемых страниц за один заход поискового бота ограничено, он может просто не добраться до ваших новых статей и уйти восвояси, израсходовав лимит на старые страницы, которые и вовсе не обновлялись. Несомненно, рано или поздно сканер все-таки доберется и до новых страниц, но это будет гораздо позже. Это нужно запомнить как аксиому, а кто не верит, читает на сайте Яндекса о last-modified .

То же самое касается и обычных посетителей сайта, ведь если ваша старая статья находится в локальном кеше, а сервер не отправляет заголовок 304 Not Modified, то она будет грузиться снова и снова, каждый раз с нуля, тем самым нагрузка на сервер будет выше. Если же со времени последнего посещения какой-то страницы и добавления ее в кеш ничего не изменилось, нужно, чтобы ваш сервер отправлял в ответе заголовок 304 Not Modified и прекращал дальнейшую генерацию страницы. Зачем каждый раз подгружать старые страницы, если на них ничего не изменилось? Их содержание можно взять из кеша. Элементарно и эффективно!

Ответ сервера на заголовок If-Modified-Since

Мы плавно подошли с вами ко второму, не менее важному моменту - реакции вашего сервера на посылаемый поисковыми ботами заголовок If-Modified-Since. Делают они это для того, чтобы проверить, изменялась ли ваша страница со времени последнего посещения и собственно передают в заголовке это самое время. Ваш сервер в таком случае должен сопоставить время последнего обновления страницы, к которой обратился бот и время ее последнего посещения, которое он вам сообщает. Если с тех пор ничего нового на странице не появилось, сервер должен ответить заголовком 304 Not Modified и остановить передачу данных, выйдя из исполняющего скрипта (в случае с PHP - это функция exit ). Получив 304 ответ, поисковый робот поймет, что делать тут пока больше нечего и пойдет на следующую страницу, тем самым экономя уйму времени.

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

Хочется добавить, что в одной из наших статей мы разбирали еще один интересный способ ускорения индексации сайта. Там речь шла именно о сайтах на движке WordPress и для этого использовались специальные пинг сервера , адреса которых мы привели и указали что с ними нужно делать.

PHP-функция

Итак, давайте перейдем непосредственно к делу и рассмотрим функцию, разработанную нашими специалистами и успешно оттестированную на нескольких сайтах:

Function lastModified($gmdate) { $IfModifiedSince = false; if (isset($_ENV["HTTP_IF_MODIFIED_SINCE"]) or isset($_SERVER["HTTP_IF_MODIFIED_SINCE"])) { $IfModifiedSince = strtotime(substr(($_ENV["HTTP_IF_MODIFIED_SINCE"] ? $_ENV["HTTP_IF_MODIFIED_SINCE"] : $_SERVER["HTTP_IF_MODIFIED_SINCE"]), 5)); } if ($IfModifiedSince && $IfModifiedSince >= strtotime($gmdate)) { header($_SERVER["SERVER_PROTOCOL"]." 304 Not Modified"); exit; } header("Last-Modified: ".$gmdate); }

Хочется подчеркнуть, что функция в качестве единственного аргумента принимает дату и время по Гринвичу - gmdate() , а не date() , просьба не путать, пожалуйста. Принимаемый функцией аргумент - это и есть дата и время последнего изменения страницы. То, где вы будете ее брать - зависит от системы администрирования, вот, например, в WordPress ее можно получить так:

$WordpressPageLastModified = get_the_modified_date("r");

А что, если нет никакой системы администрирования и речь идет о статичной странице сайта, в которую изменения вносятся вручную, прямо в коде. На этот случай мы тоже придумали решение, как отправлять в заголовке дату ее последнего изменения:

$StaticPageLastModified = gmdate("D, d M Y H:i:s \G\M\T", filemtime($_SERVER["DOCUMENT_ROOT"]."/index.php"));

В данном случае мы используем функцию filemtime() , которая возвращает время последнего редактирования файла в формате Unix time.

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

Проверка ответа сервера

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

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

В области поисковой оптимизации сайтов (SEO) гуляет вообще очень много разных мифов. Какие-то из них имеют под собой основу, какие вообще взялись не пойми откуда. В этой заметке рассмотрим один из них — использование заголовка ответа last-Modified.

Некоторое время назад к нам попал некий документ, озаглавленный «Рекомендации Ingate для веб студий по продвигаемым сайтам». И одна из «рекомендаций» была следующей:

После редизайна или на новом разрабатываемом сайте должна быть прописана дата последней модификации страниц сайта (Last Modified)

Для добавления на сайт на PHP информации о дате последней модификации страниц необходимо в самое начало исходного кода каждой страницы вставить скрипт

header ("Last-Modified: " . date("D, d M Y H:i:s", time()) . " GMT");
?>

Именно эта дикая ахинея, эта несусветная чушь и откровенно бредовый код и сподвигли меня написать эту заметку. Здесь я постараюсь объяснить, что такое Last-Modified, зачем он нужен и как его используют браузеры и поисковые машины.

Что такое Last-Modified

Веб-сервер при передаче информации клиенту (браузеры или поисковому роботу) сообщает довольно много дополнительных данных. Их можно посмотреть в консоли браузера, например:

настройте сервер на выдачу корректных заголовков ответов (например, если страница не существует, выдавать ошибку 404, а если поступил запрос If-Modified-Since, то выдавать код 304, если страница с указанной в запросе даты не изменялась).

Также можно увидеть, что если сервер никак не реагирует на условный запрос GET, то он ничем не отличается от обычного запроса. То есть, заголовок Last-Modified с текущим временем, к тому же и неправильно сформированным (привет Интегйту!) вообще не нужен!

Так нужен ли Last-Modified или нет?

Вообще нужен. Но важно понимать, что не сам заголовок играет какую-либо роль, а весь сценарий условных запросов, который должен быть реализован сайтом до конца. Именно в этом случае мы получим высокую скорость индексации сайта.

Но зачастую реализовать это в готовой CMS бывает весьма затруднительно. Возможно для этого потребуется довольно значительные изменения кода самой CMS.

Хотя для ряда CMS это можно реализовать включением кэширования страниц. Если CMS кэширует страницы, создавая и отдавая фактически статичные файлы, то сам веб-сервер будет правильно отвечать на условные запросы. Например, в WordPress это можно реализовать с помощью плагина WP Super Cache :

Проверим его в работе. Я включил этот плагин, открыл браузер в анонимном режиме и сделал два запроса одной страницы. Хорошо видно, что второй ответ правильный — 304 Not Modified:

Вместо заключения

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

Ну и поменьше слушайте сеошников, которые не знают элементарных основ работы интернета.

Вот не было у меня печали, пока не установил себе сегодня плагин Seo Scan. Хороший плагин, который показывает, что может не понравиться google в вашем сайте и сервере. И мой сайт кое в чем не понравился точно - это отсутствие last-modified.

Немного теории, сам только сегодня про это узнал. Last-modified - это http заголовок, который посылает сигнал о том, были ли на такой-то странице изменения или нет, посылая ответ If-Modified-Since с кодом 304. Как то так...

Хотя без всего этого сайт будет индексироваться, как говорит Яндекс, но есть и существенные минусы при отсутствии этого заголовка:

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

Как видите, минусов много, и в первую очередь - это не очень шустрая индексация и переиндексация сайта. То есть, вы внесли в статью ПОЛЕЗНОЕ изменение, а я их сейчас делаю много каждый день, а Яндекс и Google могут увидеть это только через пару месяцев! Нет, такой хоккей нам не нужен, теперь я разобьюсь в лепешку, а исправлю этот недочет!

Как проверить last-modified?

Проверить можно разными способами, в wordpress самое простое - это установить вышеупомянутый плагин Seo Scan , у меня он выдал такое:


В общем, кажется мне не светит настроить last-modified в этой конфигурации нормально. Может мне отказаться от ngnix в пользу apache? Сервер у меня нормальный, а посещаемость на фантастическая. Может попробовать?
Ну а чтобы просто так не сидеть, а напрячь еще и вас, читатели, решил пока опубликовать этот пост, может вы знаете,

P.S. Решил проблему просто: отключил ngnix, оставил только apache, все заработало, в производительности разницы не заметил.

СОВЕТ ВЕБМАСТЕРУ: Умение зарабатывать в интернете - это только пол дела, вторая половина - это умение ВЫГОДНО обналичивать электронные деньги. Вот список офшорных банковских карт, на которые можно выводить средства и потом снимать с них хрустящие купюры:

1. Payoneer - Самая популярная в мире платежная система для фрилансеров. Выдает карты, находится в США.

2. EpayService - Американская платежная система, очень популярна во многих странах, бесплатно дает карту MasterCard в EVRO для жителей СНГ и Европы.

3. Skrill - Единственная платежная система которая работает с криптовалютами и при этом выпускает бесплатные банковские карты MasterCard.

4. AdvCash - Офшорный банк находится в Белизе, можно открыть счет в долларах, евро, фунтах и рублях.

5. Payeer - Штаб квартира этой платежной системы находится в Грузии, тут так же можно открыть счет в долларах, евро и рублях.


Домен RU - 99 руб
Домен РФ - 99 руб

HTTP-заголовок Last-Modified сообщает клиенту время последнего изменения страницы (объекта). Если клиент (браузер, поисковый робот) получил заголовок Last-Modified, то при следующем обращении к адресу, при условии, что страница (объект) есть в локальном кеше, он добавит вопрос If-Modified-Since (не изменилась ли страница после даты, полученной в Last-Modified). В свою очередь сервер, получив запрос If-Modified-Since должен сверить полученную временную метку с временем последнего изменения страницы и, если страница не изменялась ответить 304 Not Modified.

Экономия Трафика

Если страница не изменилась, то сервер прекратит передачу данных после отправки заголовков с кодом 304 Not Modified, тело страницы, изображения и другие объекты передаваться не будут.

Снижение нагрузки на сервер

Правильная реализация проверки времени последнего изменения страницы может значительно (до 30% и более) сократить нагрузку на сервер. Под правильной реализацией подразумевается проверка времени до начала генерации страницы на динамическом сайте. В таком случае все действия для генерации страницы (запрос контента из базы данных, парсинг шаблонов, получение комментариев и др) выполняться не будут. Особенно это актуально для сайтов с высокой посещаемостью и долгой продолжительностью визита пользователя. Пример: пользователь находится на сайте спортивных новостей и постоянно обновляет главную страницу в ожидании публикации результата матча. За несколько минут страница может быть запрошена и получена десятки раз. Если заголовок Last-Modified отдается и запрос If-Modified-Since обрабатывается правильно, то реально страница будет передана один раз, а на все последующие запросы будет выдан ответ 304 Not Modified.

Ускорение индексации поисковыми системами

Поисковые системы через руководство для вебмастеров рекомендуют отсылать заголовок Last-Modified и правильно обрабатывать If-Modified-Since.

Убедитесь, что ваш веб-сервер поддерживает HTTP-заголовок If-Modified-Since. Этот заголовок позволит веб-серверу сообщать Google, изменилось ли содержание сайта со времени последнего сканирования. Поддержка данной функции сократит нагрузку на пропускную способность и издержки.

Google: Руководство для веб-мастеров

Следите за корректностью HTTP-заголовков. В частности, важно, содержание ответа, который сервер отдает на запрос If-Modified-Since. Заголовок Last-Modified должен отдавать корректную дату последнего изменения документа. Даже если сервер не выдает дату последней модификации документа (Last-Modified), ваш сайт будет проиндексирован. Однако в этом случае следует учитывать следующее:

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

HTTP заголовок Last-Modified сообщает клиенту время последнего изменения страницы (объекта). Если клиент (браузер, поисковый робот) получил заголовок Last-Modified , то при следующем обращении к адресу, при условии, что страница (объект) есть в локальном кеше, он добавит вопрос If-Modified-Since (не изменилась ли страница после даты, полученной в Last-Modified). В свою очередь сервер, получив запрос If-Modified-Since должен сверить полученную временную метку с временем последнего изменения страницы и, если страница не изменялась ответить 304 Not Modified .

Экономия Трафика

Если страница не изменилась, то сервер прекратит передачу данных после отправки заголовков с кодом 304 Not Modified , тело страницы, изображения и другие объекты передаваться не будут.

Снижение нагрузки на сервер

Правильная реализация проверки времени последнего изменения страницы может значительно (до 30% и более) сократить нагрузку на сервер. Под правильной реализацией подразумевается проверка времени до начала генерации страницы на динамическом сайте. В таком случае все действия для генерации страницы (запрос контента из базы данных, парсинг шаблонов, получение комментариев и др) выполняться не будут. Особенно это актуально для сайтов с высокой посещаемостью и долгой продолжительностью визита пользователя. Пример: пользователь находится на сайте спортивных новостей и постоянно обновляет главную страницу в ожидании публикации результата матча. За несколько минут страница может быть запрошена и получена десятки раз. Если заголовок Last-Modified отдается и запрос If-Modified-Since обрабатывается правильно, то реально страница будет передана один раз, а на все последующие запросы будет выдан ответ 304 Not Modified .

Ускорение индексации поисковыми системами

Поисковые системы через руководство для вебмастеров рекомендуют отсылать заголовок Last-Modified и правильно обрабатывать If-Modified-Since .


Убедитесь, что ваш веб-сервер поддерживает HTTP-заголовок If-Modified-Since . Этот заголовок позволит веб-серверу сообщать Google, изменилось ли содержание сайта со времени последнего сканирования. Поддержка данной функции сократит нагрузку на пропускную способность и издержки.

Следите за корректностью http-заголовков. В частности, важно, содержание ответа, который сервер отдает на запрос if-modified-since . Заголовок Last-Modified должен отдавать корректную дату последнего изменения документа. Если сервер не выдает дату последней модификации документа, ваш сайт будет проиндексирован, но:
- в результатах поиска не будет показываться дата рядом со страницами вашего сайта;
- при сортировке по дате сайт не будет виден большинству пользователей;
- робот не сможет получить информацию о том, обновилась ли страница сайта с момента последнего индексирования. А так как число страниц, получаемых роботом с сайта за один заход, ограничено, изменившиеся страницы будут переиндексироваться реже.






2024 © gtavrl.ru.