Вот не было у меня печали, пока не установил себе сегодня плагин Seo Scan. Хороший плагин, который показывает, что может не понравиться google в вашем сайте и сервере. И мой сайт кое в чем не понравился точно - это отсутствие last-modified.
Немного теории, сам только сегодня про это узнал. Last-modified - это http заголовок, который посылает сигнал о том, были ли на такой-то странице изменения или нет, посылая ответ If-Modified-Since с кодом 304. Как то так...
Хотя без всего этого сайт будет индексироваться, как говорит Яндекс, но есть и существенные минусы при отсутствии этого заголовка:
в результатах поиска не будет показываться дата рядом со страницами сайта;
при сортировке по дате сайт не будет виден пользователям;
робот не сможет получить информацию о том, обновилась ли страница сайта с момента последнего индексирования. А так как число страниц, получаемых роботом с сайта за один заход, ограничено, изменившиеся страницы будут переиндексироваться реже.
Как видите, минусов много, и в первую очередь - это не очень шустрая индексация и переиндексация сайта. То есть, вы внесли в статью ПОЛЕЗНОЕ изменение, а я их сейчас делаю много каждый день, а Яндекс и Google могут увидеть это только через пару месяцев! Нет, такой хоккей нам не нужен, теперь я разобьюсь в лепешку, а исправлю этот недочет!
Как проверить last-modified?
Проверить можно разными способами, в wordpress самое простое - это установить вышеупомянутый плагин Seo Scan , у меня он выдал такое:
Скорость сервера тоже барахлит, но это другая история, потом поковыряюсь и с этим. Можно так же проверить last-modified через сервис с одноименным названием last-modified.com
Как видите, и тут показывает отсутствие ответа If-Modified-Since - Last Modifed не найден! А можно использовать сервис Яндекса Проверка ответа сервера
Тут тоже самое - Код статуса HTTP: "304 Not Modified" - значит не работает система. Хотя через какое-то время явная ошибка пропала, но код ответа 304 так и не появился.
Сразу стало интересно, а у кого-то хоть это работает? Решил проверить это у тех блогеров, которые сами писали мануалы на эту тему:
Да, у парня из ТОПа по этому запросу Last-Modified найден, а значит это возможно и для меня. Кстати, в его статье перечисляются многие способы настройки Last Modified, попробуем и их, хотя я нашел и другие.
Как настроить last-modified?
Буду описывать все способы, которые попробовал и сразу говорить, заработало у меня или нет. Но имейте в виду, что если не заработало у меня, то это не значит, что не заработает у вас.
1. Первый способ - установка плагина
Самый простой способ для тех, у кого WordPress - это установить плагины, для этого предназначенные, например: Add Headers, If Modified Since или If Modified Since Header.
У меня ни один из этих плагинов не дал результата, не знаю почему. Может это заработает у вас?
2. Второй способ - PHP код
Сервис last-modified.com , описанный выше, предлагает в файл header.php, в самое начало, поместить такой php код:
<?php
$LastModified_unix = 1294844676 ; // время последнего изменения страницы
$LastModified = gmdate ( "D, d M Y H:i:s \G\M\T" , $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 ) ;
?>
Мне это тоже не помогло. Предлагаю так же попробовать разместить его в файле index.php в корне сайта, но мне и это не помогло.
3. Третий способ - запись в .htaccess
Если у вас сервер на Apache, то скорее всего у вас это заработает. Нужно в файл .htaccess в корне сайта вставить код:
RewriteRule . * - [ E = HTTP_IF_MODIFIED_SINCE : % { HTTP : If - Modified - Since } ]
RewriteRule . * - [ E = HTTP_IF_NONE_MATCH : % { HTTP : If - None - Match } ]
У меня не заработало, так как у меня стоит связка Ngnix + Apache и все эти манипуляции с .htaccess чаще всего не срабатывают.
После всех этих мучений подумал: а чего это я один мучаюсь? Напишу как в службу поддержки хостинга, там люди грамотные, может подскажут? Написал, сижу, жду.
Пришел ответ от техподдержки:
Всё просто. Страницы вашего сайта генерируются php-скриптами которые не выдают браузеру этот заголовок.
Веб-сервер (nginx) для статических файлов (jpg, gif, css, js и т.д.) выдаёт в заголовке last-modified дату последнего изменения файла. Примеры на скриншотах.
Если у вас нет очень большой посещаемости сайта то кэшировать страницы сайта на стороне браузера нет смысла.
В общем, кажется мне не светит настроить last-modified в этой конфигурации нормально. Может мне отказаться от ngnix в пользу apache? Сервер у меня нормальный, а посещаемость на фантастическая. Может попробовать?
Ну а чтобы просто так не сидеть, а напрячь еще и вас, читатели, решил пока опубликовать этот пост, может вы знаете, как включить last-modified в моем случае?
P.S. Решил проблему просто: отключил ngnix, оставил только apache, все заработало, в производительности разницы не заметил.
ну да, только отключение ssi помогает
Аналогично, все перепробовал ничего не помогло. Как только отключил на сервере в настройках www-домена ssi - сразу все заработало.
Аналогично, все перепробовал ничего не помогло. Как только отключил на сервере в настройках www-домена ssi - сразу все заработало.
Для WordPress помогают плагины AddHeaders или платный Clearfy, только чтоб Last Modified заработал надо отключить SSI в настройках сайта (мне так сказали).
Сейчас пробовал сделать заголовок не на wordpress-сайте - приведенный в статье php-код помог.
Очень странно, на одном сайте не срабатывает Presence of Cache-Control key in header - ничего не понимаю! Может тема барахлит?
Очень странно, на одном сайте не срабатывает Presence of Cache-Control key in header - ничего не понимаю! Может тема барахлит?
Поставил плагин Add Headers - он решил все проблемы с этими заголовками.
Поставил плагин Add Headers - он решил все проблемы с этими заголовками.