Elliot

Не получается настроить Last-Modified на Wordpress

24 posts in this topic

Здравствуйте друзья!

Не могу настроить Last-Modified на wordpress, примеры с интернета не работают на моем сайте.

Проверяю работоспособность тут: https://last-modified.com/ru/

Вот найденные примеры

<?php header("Last-Modified: " . date('r', strtotime($post->post_modified))); ?>

И вот еще с самого сервиса last-modified.com, не написано куда вставлять, вставил в header.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);
?>

Прохожу проверку с первым а потом со вторым вариантом - не работает.

Плагины не хотел ставить, но ради интереса поставил несколько (по очереди) ни один не заработал для сервиса last-modified.com

 

При втором варианте в header.php работа странная (подозреваю что для меня)

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

Если изменить запись, тоже изменения обновляться только после очистки кэша браузера

 

Но в теме изначально присутствует мета-тэги og:updated_time и article:modified_time

Но я так понимаю, это не то?

 

Вот ответ last-modified.com

Last-Modified не найден!
HTTP/1.1 200 OK
Set-Cookie: PHPSESSID=8hkrsolkc2llbcdonl40is9sn6; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Cookie
Content-Type: text/html; charset=UTF-8
X-Pingback: https://www.site.com/xmlrpc.php
Link: <https://www.site.com/wp-json/>; rel="https://api.w.org/"
Link: <https://www.site.com/?p=1025>; rel=shortlink
Date: Thu, 26 Apr 2018 16:20:28 GMT
Accept-Ranges: bytes
Server: LiteSpeed
Alt-Svc: quic=":443"; ma=2592000; v="35,37,38,39"
Connection: close
Получено:  592 байт
Затрачено: 1,52 сек

 

Что делаю не так?

Где только не читал, говориться что last-modified очень важен для любого сайта.

Share this post


Link to post
Share on other sites

А нафига это надо? Если стоит плагин кэширования, то вроде как должны правильные заголовки отдаваться

Share this post


Link to post
Share on other sites

у меня стоит super cache но видимо не отдает нормальные, раз ни один сервис не может увидеть last-modified...

Share this post


Link to post
Share on other sites
32 минуты назад, Elliot сказал:

у меня стоит super cache но видимо не отдает нормальные, раз ни один сервис не может увидеть last-modified...

Этот заголовок/параметр сам по себе не особо нужен и ни на что не влияет. Важнее, что ответит сервер на запрос if modified since. Если контент на странице не менялся, то должен быть 304 ответ сервера. Это позволяет увеличить скорость загрузки страницы у пользователя и положительно сказывается на индексации сайта. Если плагин кэширования стоит, то должно все работать

Проверять нужно здесь 

webmaster.yandex.ru/tools/server-response/

Например в 22:00 по мск должен быть ответ 200, а скажем 22:10 с установленным временем 22:00 в поле if modified since должен быть ответ 304 

 

UPD

Если нужно вывести, то вот из кодекса

Last Modified: <?php the_modified_date('F j, Y'); ?> at <?php the_modified_date('g:i a'); ?>

 

Edited by petroff
Elliot likes this

Share this post


Link to post
Share on other sites

Ну у меня пока такого ответа нет, и как его сделать я не понимаю.

Я так понимаю, этот код нужно вставить в теле статьи под классом (display:none)? Я так вставил, изменил статью но она не изменилась так как, попала в кэш браузера, и не отобразятся изменения пока его не обновить, это нормально?

Вставил вот так, верно?

<time datetime="<?php the_modified_date('F j, Y'); ?> <?php the_modified_date('g:i a'); ?>" class="post-date updated"></time>

 

Share this post


Link to post
Share on other sites
9 минут назад, Elliot сказал:

Ну у меня пока такого ответа нет, и как его сделать я не понимаю.

Я так понимаю, этот код нужно вставить в теле статьи под классом (display:none)? Я так вставил, изменил статью но она не изменилась так как, попала в кэш браузера, и не отобразятся изменения пока его не обновить, это нормально?

Вставил вот так, верно?


<time datetime="<?php the_modified_date('F j, Y'); ?> <?php the_modified_date('g:i a'); ?>" class="post-date updated"></time>

 

Код, который я дал нужно полностью скопировать и вставить в header.php. При просмотре кода страницы (Ctrl+U) должно выводится "Last Modified: дата at время"

Share this post


Link to post
Share on other sites

Все правильно выводится, но меня беспокоит два момента.

Этот код можно как-то скрыть от глаз пользователей?

И второй, с этим кодом, браузер кэшэрирует страницу, и после того как я вношу в нее изминения, она не меняется пока не обновить кэш браузера, это нормально?

Share this post


Link to post
Share on other sites
4 минуты назад, Elliot сказал:

Этот код можно как-то скрыть от глаз пользователей?

Они его не увидят, если все правильно сделано

 

5 минут назад, Elliot сказал:

И второй, с этим кодом, браузер кэшэрирует страницу, и после того как я вношу в нее изминения, она не меняется пока не обновить кэш браузера, это нормально?

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

Share this post


Link to post
Share on other sites

Ваш код я поместил перед </head> и все таки я его вижу, видимо не работает или я не туда поместил его. Т.е. оставил как есть и проверил в вебмастере - 304 нет, только 200, я так понимаю, в место 200 должно показать 304?

Share this post


Link to post
Share on other sites

Last-Modified должен формироваться из даты создания / последнего обновления страницы.

Мудаки в интернетах пишут, типа можно повесить код текущей даты или еще хуже поставить дату 0day 1980 год так называемое начало эпохи Linux и тогда страница будет отдавать 304 ответ всегда, но прикол в том, что изменяя текст или добавляя убирая фото на этой страницы она все равно продолжает отдавать 304 ответ (не изменялась с 1980 года) и новый контент не индексируется роботами. Такие дела.

Робот приходит:

- нуче обновилось че?

-- ответ 304, с 1980 ниче не менялось

- робот: ну ладно пока

Поэтому нужно искать нормальный плагин который формирует Last-Modified и самое главное if since на основании даты обновления страницы, а не из потолка.

Для статических сайтов есть вот такой код

<?php
header("Cache-control: public, max-age=1440");
header("Expires: " . gmdate("D, d M Y H:i:s", time() + 60*600) . " GMT");
$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;
}
?>

вставлять в самое начало страницы перед HTML

который формирует правильный Cache-control на месяц, Expires и LastModified c 304 ответом, но если страницы Ворпресс часто меняются то может не подойти, точнее он точно не подойдет, потому что не знает когда вордпресс обновлял страницу

Elliot likes this

Share this post


Link to post
Share on other sites

Вот нашел такой вот код, он использует дату публикации WP, но не мне судить правильный ли он

<?php  
$LastModified_unix = unix_time($post->post_modified);  
$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);

function unix_time($time_send){ 
     $year_lm=substr($time_send, 0, 4); 
     $mount_lm=substr($time_send, 5, 2); 
     $day_lm=substr($time_send, 8, 2); 
     $time_lm=substr($time_send, 10, 9); 
     $time_lm_unix_in = $year_lm.'-'.$mount_lm.'-'.$day_lm.' '.$time_lm; 
     $select_lm = strtotime($time_lm_unix_in); 
     return $select_lm; 
}

?>

Установил этот код сразу после <head>

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

зашел в webmaster.yandex.ru/tools/server-response/ и выставил дату публикации старой записи, получил 304, изменил запись, получил 200 и Last-Modified, но если запись не изменялась, то всеравно получаю 304 но без Last-Modified,  я так понимаю, все работает как надо?

Но вопрос, googlebot увидит и примет во внимание что запись изменилась?

Share this post


Link to post
Share on other sites

>> Установил этот код сразу после <head>

Нужно ставить сразу первой строкой перед открытием HTML

 

Код тут <<<<

html

 Head

 /Head

Body

/Body

/htm

По поводу работы, ну смотрите если например обновили страницу в админке ВП 10 числа, а ставите if since на 9 число, и отдается 304 то это не правильно

Должно быть так, обновили страницу 10 числа, смотрие if since на 9 число должен быть ответ 200, а если ставите if since на 11 число то 304 т.к с предыдущей даты не менялось ничего

Share this post


Link to post
Share on other sites

Все именно так как вы говорите Beauty, правильно работает.

А в ответе сервера должна присутствовать дата публикации или нет? А то в ответе я вижу только дату проверки...

Share this post


Link to post
Share on other sites

Если я правильно понимаю, главная страница всегда должна выводить 200 так как на ней выводятся все новости, а если она будет выдавать 304 (как сейчас) то гуглбот будет считать что на главной странице изменений не было. Так может правильнее вывести этот код в шаблоны записей/страниц и в категории?

Share this post


Link to post
Share on other sites

Можно и для главной отдавать 304 но придется главную обновлять после добавления статьи, чтоб дата обновилась

Share this post


Link to post
Share on other sites
17 минут назад, petroff сказал:

Блин, все так просто, а

Screenshot_4782584_30076863.jpg

Да, но в режиме "Эксперт" этот параметр не работает... Да и в обычном не работает, проверил...

Edited by Elliot
Beauty likes this

Share this post


Link to post
Share on other sites
2 часа назад, Elliot сказал:

Да, но в режиме "Эксперт" этот параметр не работает... Да и в обычном не работает, проверил...

+1 Не работает это

Вп Суперкеш вообще глючит страшно, например если сайт на https и отправить страницу на принудительное кеширование то сайт падает.

Elliot likes this

Share this post


Link to post
Share on other sites
1 час назад, Beauty сказал:

+1 Не работает это

Вп Суперкеш вообще глючит страшно, например если сайт на https и отправить страницу на принудительное кеширование то сайт падает.

У меня https, спасибо за инфу, проверять не буду))) но насколько знаю что супер кэш хороший плагин...

Share this post


Link to post
Share on other sites
58 минут назад, Elliot сказал:

У меня https, спасибо за инфу, проверять не буду))) но насколько знаю что супер кэш хороший плагин...

рекомендую WP Fastest Cache с леопардом на аватаре который, самый норм вариант на сегодня даже в бесплатной версии (в платной вообще огонь!) но платная только под 1 домен покупается если 100$ не жалко то вообще рекомендую его

померяйте сайт тут http://gtmetrix.com/

сначала с WP Super Cache потом с WP Fastest Cache, удивитесь, кстати он формирует правильные заголовки Last Modified на основании создания кеша

суть такая, создаете страницу, жмете "опубликовать" весь кеш стирается и создается с новым Last Modified и так при каждом создании / обновлении страницы, соотвественно всегда будет отдаваться актуальный кеш с правильными датами, только нужно подождать пару минут пока кеш сформируется (либо зайти на страницу, он формируется при первом заходе)

Elliot likes this

Share this post


Link to post
Share on other sites
15 минут назад, Beauty сказал:

рекомендую WP Fastest Cache с леопардом на аватаре который, самый норм вариант на сегодня даже в бесплатной версии (в платной вообще огонь!) но платная только под 1 домен покупается если 100$ не жалко то вообще рекомендую его

померяйте сайт тут http://gtmetrix.com/

сначала с WP Super Cache потом с WP Fastest Cache, удивитесь, кстати он формирует правильные заголовки Last Modified на основании создания кеша

суть такая, создаете страницу, жмете "опубликовать" весь кеш стирается и создается с новым Last Modified и так при каждом создании / обновлении страницы, соотвественно всегда будет отдаваться актуальный кеш с правильными датами, только нужно подождать пару минут пока кеш сформируется (либо зайти на страницу, он формируется при первом заходе)

Спасибо, попробую, но у меня записи через грабер попадают, работать будет?

Share this post


Link to post
Share on other sites
2 минуты назад, Elliot сказал:

Спасибо, попробую, но у меня записи через грабер попадают, работать будет?

время жизни кеша ставить сутки придется и все будет)

Share this post


Link to post
Share on other sites
Только что, Beauty сказал:

время жизни кеша ставить сутки придется и все будет)

щас буду смотреть)

Share this post


Link to post
Share on other sites

Проверил этот плагин WP Fastest Cache на локалке, слишком много под прем попадает, как по мне. Да и не работает сжатие html объединение css и js, так что, лучше пока суперкэш. Да и ответ сервера вроде работает как надо, только я вот не уверен или я правильно проверяю, на сайте время ню-йорка а в яндекс панели Московское вроде..

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.