Jump to content

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


Recommended Posts

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

Не могу настроить 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 очень важен для любого сайта.

Link to post
Share on other sites

Есть вопрос? Задай его профессиональным веб-мастерам, SEO и другим специалистам!

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
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>

 

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 время"

Link to post
Share on other sites

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

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

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

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

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

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

 

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

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

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

Link to post
Share on other sites

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

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 ответом, но если страницы Ворпресс часто меняются то может не подойти, точнее он точно не подойдет, потому что не знает когда вордпресс обновлял страницу

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 увидит и примет во внимание что запись изменилась?

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 т.к с предыдущей даты не менялось ничего

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

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

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

Screenshot_4782584_30076863.jpg

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

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

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

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

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

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

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

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

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

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 и так при каждом создании / обновлении страницы, соотвественно всегда будет отдаваться актуальный кеш с правильными датами, только нужно подождать пару минут пока кеш сформируется (либо зайти на страницу, он формируется при первом заходе)

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 и так при каждом создании / обновлении страницы, соотвественно всегда будет отдаваться актуальный кеш с правильными датами, только нужно подождать пару минут пока кеш сформируется (либо зайти на страницу, он формируется при первом заходе)

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

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

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

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

Link to post
Share on other sites

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

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...