Вот не было у меня печали, пока не установил себе сегодня плагин Seo Scan. Хороший плагин, который показывает, что может не понравиться google в вашем сайте и сервере. И мой сайт кое в чем не понравился точно — это отсутствие last-modified.
Немного теории, сам только сегодня про это узнал. Last-modified — это http заголовок, который посылает сигнал о том, были ли на такой-то странице изменения или нет, посылая ответ If-Modified-Since с кодом 304. Как то так…
Хотя без всего этого сайт будет индексироваться, как говорит Яндекс, но есть и существенные минусы при отсутствии этого заголовка:
- в результатах поиска не будет показываться дата рядом со страницами сайта;
- при сортировке по дате сайт не будет виден пользователям;
- робот не сможет получить информацию о том, обновилась ли страница сайта с момента последнего индексирования. А так как число страниц, получаемых роботом с сайта за один заход, ограничено, изменившиеся страницы будут переиндексироваться реже.
Как видите, минусов много, и в первую очередь — это не очень шустрая индексация и переиндексация сайта. То есть, вы внесли в статью ПОЛЕЗНОЕ изменение, а я их сейчас делаю много каждый день, а Яндекс и Google могут увидеть это только через пару месяцев! Нет, такой хоккей нам не нужен, теперь я разобьюсь в лепешку, а исправлю этот недочет!
Как проверить last-modified?
Проверить можно разными способами, в wordpress самое простое — это установить вышеупомянутый плагин Seo Scan, у меня он выдал такое:
Сразу стало интересно, а у кого-то хоть это работает? Решил проверить это у тех блогеров, которые сами писали мануалы на эту тему:
Как настроить last-modified?
Буду описывать все способы, которые попробовал и сразу говорить, заработало у меня или нет. Но имейте ввиду, что если не заработало у меня, то это не значит, что не заработает у вас.
1. Первый способ — установка плагина
Самый простой способ для тех, у кого WordPress — это установить плагины, для этого предназначенные, например: Add Headers, If Modified Since или If Modified Since Header.
У меня ни один из этих плагинов не дал результата, не знаю почему. Может заработает у вас?
2. Второй способ — PHP код
Сервис last-modified.com, описанный выше, предлагает в файл header.php, в самое начало, поместить такой php код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?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 в корне сайта вставить код:
1 2 |
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 в моем случае?
P.S. Решил проблему просто: отключил ngnix, оставил только apache, все заработало, в производительности разницы не заметил.
Поставил плагин Add Headers — он решил все проблемы с этими заголовками.
Поставил плагин Add Headers — он решил все проблемы с этими заголовками.
Очень странно, на одном сайте не срабатывает Presence of Cache-Control key in header — ничего не понимаю! Может тема барахлит?
Очень странно, на одном сайте не срабатывает Presence of Cache-Control key in header — ничего не понимаю! Может тема барахлит?
Для WordPress помогают плагины AddHeaders или платный Clearfy, только чтоб Last Modified заработал надо отключить SSI в настройках сайта (мне так сказали).
Сейчас пробовал сделать заголовок не на wordpress-сайте — приведенный в статье php-код помог.
Для WordPress помогают плагины AddHeaders или платный Clearfy, только чтоб Last Modified заработал надо отключить SSI в настройках сайта (мне так сказали).
Сейчас пробовал сделать заголовок не на wordpress-сайте — приведенный в статье php-код помог.
Аналогично, все перепробовал ничего не помогло. Как только отключил на сервере в настройках www-домена ssi — сразу все заработало.
Аналогично, все перепробовал ничего не помогло. Как только отключил на сервере в настройках www-домена ssi — сразу все заработало.
ну да, только отключение ssi помогает
ну да, только отключение ssi помогает