Блог в котором есть много интересной информации…. Мифы SEO: Всё о заголовке Last-Modified Сервер не возвращает в заголовке время изменения страницы как исправить
HTTP заголовок Last-Modified (последние изменения) передает клиенту время последнего изменения документа (веб-страницы). Клиент (браузер или поисковый робот) отправляет серверу заголовок «If-Modified-Since » и если дата последнего изменения страницы совпадает, сервер возвращает заголовок «304 Not Modified » и не загружает страницу. Если время последнего изменения отличается (или last modified header не настроен) — сервер возвращает заголовок «200 OK » и загружает страницу. То есть вместо повторной перезагрузки страницы и обновления кеша, клиент получает всего лишь заголовок 304 . Клиент экономит трафик, а сервер отдает меньше данных — обоюдная экономия.
Но, зачем была бы эта статья, если не рассказать про пользу, которую настройка заголовка Last-Modified несет для , а если точнее для ускорения индексации сайта. Нетрудно догадаться, что 10 страниц сайта будут проиндексированы быстрее, чем 1000. Тот же принцип, который позволяет оптимизировать загрузку страниц работает и для индексации. Поисковой системе не нужно индексировать 1000 страниц, чтобы найти 10 новых страниц. Благодаря last modified, мы оставляем для робота только новые страницы (или обновленные). Робот приходит на сайт и берет сперва то, что нужно, а потом все остальное.
Настройка заголовка Last-Modified
Следите за корректностью http-заголовков. В частности, важно, содержание ответа, который сервер отдает на запрос «if-modified-since». Заголовок Last-Modified должен отдавать корректную дату последнего изменения документа. Даже если сервер не выдает дату последней модификации документа (last-modified), ваш сайт будет проиндексирован. Однако в этом случае следует учитывать следующее: - в результатах поиска не будет показываться дата рядом со страницами вашего сайта; - при сортировке по дате сайт не будет виден большинству пользователей; - робот не сможет получить информацию о том, обновилась ли страница сайта с момента последнего индексирования. А так как число страниц, получаемых роботом с сайта за один заход, ограничено, изменившиеся страницы будут переиндексироваться реже. Убедитесь, что ваш веб-сервер поддерживает HTTP-заголовок "If-Modified-Since". Этот заголовок позволит веб-серверу сообщать Google, изменился ли контент сайта со времени последнего сканирования. Поддержка этой функции сокращает издержки и нагрузку на полосу пропускания.
Вот примеры того, как настроить отправку заголовка last-modified и правильную обработку If-Modified-Since.
Как настроить meta Last-Modified для статичных html страниц
Как настроить Last-Modified в php
= $LastModified_unix) { header($_SERVER["SERVER_PROTOCOL"] . " 304 Not Modified"); exit; } header("Last-Modified: ". $LastModified); ?>Как настроить Last-Modified .htaccess
RewriteRule .* - RewriteRule .* -Как настроить Last-Modified nginx + php
location ~ .php$ { … if_modified_since off; fastcgi_pass fcgi; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /<путь > /web$fastcgi_script_name; … fastcgi_pass_header Last-Modified; include fastcgi_params; }Проверить Last-Modified
Когда передача заголовка клиенту настроена, не повредит проверка last modified на корректность. Проверить Last-Modified на собственном или стороннем сайта можно через онлайн сервисы .
Или сделать свою проверку на корректную обработку заголовка Last-Modified:
Настройка заголовка Last-Modified и обработка заголовка If-Modified-Since будет крайне полезна любому более или менне крупному сайту. Скорость обработки страниц сайта может стать значительным . Сравнительно несложная настройка не создаст проблем, тем более, что для популярных CMS вроде joomla, wordpress, modx и т.д. существуют готовые решения.
Заголовки Last-Modified и If-Modified-Since для WordPress
Мало кто обращает внимание на HTTP заголовки Last-Modified и If-Modified-Since при оптимизации своего сайта, а зря! Важно, чтобы страница, контент которой не менялся с последнего визита поискового робота отдавала 304 код, который собственно и говорит о том, что данная конкретная страница ничем не дополнялась – Вы не редактировали и не дополняли текст, к этой записи не добавлялись комментарии и т.п.
Если данный http-заголовок отсутствует, то в Яндексе, при сортировке результатов по дате, сайт не будет виден большинству юзеров.
Именно поэтому важно, чтобы Вы не только его правильно настроили, но и каждый раз, когда редактируете запись, обновляли дату на текущую. Это нужно будет делать вручную.
![](https://i0.wp.com/mailbird.kartauspeha.ru/wp-content/uploads/last-modified.jpg)
С комментариями попроще: когда посетитель добавляет комментарий, то в переменную $last_modified_time время добавления комментария заносится автоматически - это и будет датой последнего изменения страницы.
Зачем нужны заголовки Last-Modified и If-Modified-Since?
1. Когда сервер отдаёт такой код, то выполнение всех PHP сценариев на странице даже не запускается. Страница загружается из кэша поиска, а это, как Вы понимаете, весьма существенно снижает нагрузку на сервер к вящей радости Вашего хостера и ускоряет загрузку страницы у посетителя, что тоже не может не радовать.
Как это происходит?
Сканируя интернет, пауки Google и Яндекса сохраняют в своей базе копию каждого сайта. Эта копия служит неким образцом для сравнения: все ли по-прежнему или произошли изменения. И если не настроены заголовки Last-Modified и If-Modified-Since или настроены неправильно, новые страницы сайта проходят индексацию, а главная в кэше поисковиков долго не обновляется, как не обновляется и лента комментариев.
Но для часто обновляемых страниц (новостных лент, обновляемых по многу раз в сутки, активно комментируемых блогов и т.п.) у него есть один недостаток: информация в кэше слишком быстро устаревает и человек, даже перезагружая страницу, не видит свежих новостей, не видит новых комментариев. Но это еще полбеды. Беда в том, что робот этого тоже не видит, если только не включен правильный заголовок Last-Modified.
header("Last-Modified: ".gmdate("D, d M Y H:i:s ")."GMT");
Если Ваш сайт обновляется часто (например, Ваши записи часто комментируют) можно отключить кеширование следующим набором заголовков:
header("Expires: ".gmdate("D, d M Y H:i:s", time() + 7200)." GMT");
Это означает, что действительность сохранённой копии должна перепроверяться при каждом запросе.
Как работает кэширование в браузерах?
Если оно не запрещено вызовом функции no_cache , то в Firefox и в IE страница сохраняется в кэше, при всех последующих запросах выдается именно она.
Чтобы обновить страницу и получить ее свежую версию, нужно нажать комбинацию клавиш Ctrl + F5 , обычная кнопка «Обновить» (F5) не срабатывает. И надо сказать, документы в кэше IE могут храниться очень-очень долго.
В Опере страница кэш очищается по нажатию кнопки «Обновить» или клавиши F5. Сочетание CRTL+F5 в Опере - перезагрузка всех открытых вкладок, Как Вы понимаете, если Вы их много наоткрывали – в процессе ожидания у Вас может отрасти борода.
Если запретить кэширование страницы функцией no_cache , то Опера и Firefox при обращении к такой странице используют механизм с заголовком If-Modified-Since . Таким образом, кэширование происходит, но браузер спрашивает у сервера, изменилась ли страница на самом деле, или нет – это правильная постановка вопроса.
Следовательно, нужно подключить обработку и этого параметра. Я не буду расписывать, что и какая функция означает, просто приведу код, который корректно отдает заголовки и не вызывает конфликтов на большинстве хостингов, с которыми мне приходилось работать. Эта конструкция работает на sweb.ru, eomy.net, timeweb.ru, fastvps.ru, startlogic.com
header("Expires: ".gmdate("D, d M Y H:i:s", time() + 7200)." GMT");
header("Cache-Control: no-cache, must-revalidate");
$mt = filemtime($file_name);
$mt_str = gmdate("D, d M Y H:i:s ")."GMT";
if (isset($_SERVER["HTTP_IF_MODIFIED_SINCE"]) &&
strtotime($_SERVER["HTTP_IF_MODIFIED_SINCE"]) >= $mt)
{header("HTTP/1.1 304 Not Modified");
die;
}
header("Last-Modified: ".$mt_str);
echo $text;
header("Vary: Accept-Encoding");
header("Accept-Encoding:gzip,deflate,sdch");
?>
Таким образом, все, что Вам нужно сделать, это скопировать данный код и добавить его в файл header.php Вашей темы оформления НАД . Т.е. этот код – находится в самом верху файла ДО всего остального кода
![](https://i0.wp.com/mailbird.kartauspeha.ru/wp-content/uploads/last-modified-if-modified-since.jpg)
Внимание! Прежде чем что-то добавлять – сохраните этот файл у себя на компьютере, чтобы можно было восстановить первоначальный вариант, если Ваш не позволяет такую конфигурацию заголовков.
Проверяем результат на сервисе проверки заголовков Last-Modified и If-Modified-Since http://last-modified.com/ru/if-modified-since.html
![](https://i2.wp.com/mailbird.kartauspeha.ru/wp-content/uploads/http-header.jpg)
- Если результат положительный – утираем пот со лба и идем пить чай.
- Если результат отрицательный, ту же конструкцию можно добавить в файл index.php в корне Вашего WordPress (с этим я столкнулась на хостинге timeweb.ru). Точно так же, выше всего остального в нем. Только не забудьте про это, когда будете обновлять – индексный файл перезапишется в стандартном его виде.
Вуаля! Правильно настроив заголовки Last-Modified и If-Modified-Since, мы получили кучу бонусов:
- Увеличили скорость загрузки страниц, что важно для робота Google и приятно для людей.
- Снизили нагрузку на сервер, чем порадовали хостера.
- В поисковой выдаче Яндекса будет отображаться дата последнего обновления страницы, что в отдельных случаях очень актуально для людей, а потому косвенно это положительно отразится на поведенческих факторах.
- Страницы нашего сайта будут участвовать в сортировке поисковых систем по дате – да-да, этим пользуются продвинутые пользователи.
- И, как следствие всего вышесказанного, весьма ускорится индексирование нашего сайта поисковиками.
Syntax
Last-Modified:Directives
Greenwich Mean Time. HTTP dates are always expressed in GMT, never in local time.
Examples
Last-Modified: Wed, 21 Oct 2015 07:28:00 GMTSpecifications
Specification | Title |
---|---|
RFC 7232, section 2.2: Last-Modified | Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests |
Browser compatibility
The compatibility table in this page is generated from structured data. If you"d like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
Update compatibility data on GitHub
Desktop | Mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | Android webview | Chrome for Android | Firefox for Android | Opera for Android | Safari on iOS | Samsung Internet | |
Last-Modified | Chrome Full support Yes | Edge Full support 12 | Firefox Full support Yes | IE Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox Android Full support Yes | Opera Android Full support Yes | Safari iOS Full support Yes | Samsung Internet Android Full support Yes |