HTTP заголовок Last-Modified (последние изменения) передает клиенту время последнего изменения документа (веб-страницы). Клиент (браузер или поисковый робот) отправляет серверу заголовок «
If-Modified-Since» и если дата последнего изменения страницы совпадает, сервер возвращает заголовок «
304 Not Modified» и не загружает страницу. Если время последнего изменения отличается (или last modified header не настроен) - сервер возвращает заголовок «
200 OK» и загружает страницу. То есть вместо повторной перезагрузки страницы и обновления кеша, клиент получает всего лишь
заголовок 304. Клиент экономит трафик, а сервер отдает меньше данных - обоюдная экономия.
Но, зачем была бы эта статья, если не рассказать про пользу, которую настройка заголовка Last-Modified несет для
SEO оптимизации сайта, а если точнее для ускорения индексации сайта. Нетрудно догадаться, что 10 страниц сайта будут проиндексированы быстрее, чем 1000. Тот же принцип, который позволяет оптимизировать загрузку страниц работает и для индексации. Поисковой системе не нужно индексировать 1000 страниц, чтобы найти 10 новых страниц. Благодаря last modified, мы оставляем для робота только новые страницы (или обновленные). Робот приходит на сайт и берет сперва то, что нужно, а потом все остальное.
Да, как и
sitemap xml,
заголовки last-modified являются рекомендаций, а не руководством к действию и поисковые роботы все равно будут индексировать даже старые страниц, но уже в другом порядке. Кроме того, если в результатах поиска рядом со страницами сайта будет показываться дата, это значительно повысит CTR сайта в поиске, что хорошо скажется на
поведенческом факторе сайта.
Настройка заголовка Last-Modified
Крупные поисковые системы рекомендуют вебмастерам использовать обработку заголовков для ускорения индексации или сокращения нагрузки. Вот, что по этому поводу пишут поисковики в своих руководствах.
Цитата из
руководства Яндекса:
Следите за корректностью http-заголовков. В частности, важно, содержание ответа, который сервер отдает на запрос «if-modified-since». Заголовок Last-Modified должен отдавать корректную дату последнего изменения документа. Даже если сервер не выдает дату последней модификации документа (last-modified), ваш сайт будет проиндексирован. Однако в этом случае следует учитывать следующее:
- в результатах поиска не будет показываться дата рядом со страницами вашего сайта;
- при сортировке по дате сайт не будет виден большинству пользователей;
- робот не сможет получить информацию о том, обновилась ли страница сайта с момента последнего индексирования. А так как число страниц, получаемых роботом с сайта за один заход, ограничено, изменившиеся страницы будут переиндексироваться реже.
Цитата из
руководства Google:
Убедитесь, что ваш веб-сервер поддерживает HTTP-заголовок "If-Modified-Since". Этот заголовок позволит веб-серверу сообщать Google, изменился ли контент сайта со времени последнего сканирования. Поддержка этой функции сокращает издержки и нагрузку на полосу пропускания.
Вот примеры того, как настроить отправку заголовка last-modified и правильную обработку If-Modified-Since.
Как настроить meta Last-Modified для статичных html страниц
<meta http-equiv="Last-Modified" content="Sun, 11 Sep 2001 17:31:28 GMT">
Как настроить Last-Modified в php
<?php
$LastModified_unix = 1294844676;
$LastModified = gmdate("D, d M Y H:i:s GMT", $LastModified_unix);
$IfModifiedSince = false;
if (isset($_ENV['HTTP_IF_MODIFIED_SINCE']))
$IfModifiedSince = strtotime(substr($_ENV['HTTP_IF_MODIFIED_SINCE'], 5));
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']))
$IfModifiedSince = strtotime(substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 5));
if ($IfModifiedSince && $IfModifiedSince >= $LastModified_unix) {
header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
exit;
}
header('Last-Modified: '. $LastModified);
?>
Как настроить Last-Modified .htaccess
RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]
RewriteRule .* - [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]
Как настроить 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:
<?php
$ch = curl_init();
$url = 'http://site.ru/1.php ';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'If-Modified-Since: Sun, 01 Sep 2001 17:33:22 GMT'
));
ob_start();
curl_exec ($ch);
curl_close ($ch);
$data = ob_get_contents();
ob_end_clean();
echo nl2br($data);
?>
Настройка заголовка Last-Modified и обработка заголовка If-Modified-Since будет крайне полезна любому более или менне крупному сайту. Скорость обработки страниц сайта может стать значительным
фактором улучшения ранжирования сайта в поиске. Сравнительно несложная настройка не создаст проблем, тем более, что для популярных CMS вроде joomla, wordpress, modx и т.д. существуют готовые решения.
Комментарии
Насколько я понимаю, это очень общие советы? При добавлении такого заголовка нужно проанализировать весь сайт , как он настроен дял подачи нового материала. Если я не права, то следует более детально давать инструкции. Насторойка заголовка last -modified производиться где: в php, .htaccess и других ресурсах одновременно или только где-то в одном документе? Если в .htaccess, то в какой конкретно модуль вставлять эти строки? Все слишком запутано.
Полностью солидарен с Вами, и еще один факт для WordPress ни один пример не работает.
Для WP существует масса решений, неужели не нашли?
Вы правильно подметили, и похоже конверт монстру по барабану ваши замечания,
Беспочвенные обвинения, так не приятны(
Да, это общие советы. Универсального правильного кода быть не может.
Если у вас распространенная cms, начните поиск решения с плагина (на WP, например WP Super Cache хорошо себя показал).
Ну и конечно, не рекомендуем лезть в код без специалистов.
ПАРАМЕТР off для if_modified_since
«не проверять поле “If-Modified-Since” заголовка запроса»
источник http://nginx.org/ru/docs/http/ngx_http_core_module.html#if_modified_since
Сразу видно, что статью писал дилетант
Нато с чего-то начинать…
Свежие статьи вам тоже не понраву? Например, https://convertmonster.ru/blog/google-analytics-blog/chek-list-nastrojki-google-tag-manager/