Заголовки Last-Modified и If-Modified-Since для WordPress

Заголовки Last-Modified и If-Modified-Since для WordPress
4.33 (86.67%) 6 votes

Мало кто обращает внимание на HTTP заголовки Last-Modified и If-Modified-Since при оптимизации своего сайта, а зря! Важно, чтобы страница, контент которой не менялся с последнего визита поискового робота отдавала 304 код, который собственно и говорит о том, что данная конкретная страница ничем не дополнялась – Вы не редактировали и не дополняли текст, к этой записи не добавлялись комментарии и т.п.

Если данный http-заголовок отсутствует, то в Яндексе, при сортировке результатов по дате, сайт не будет виден большинству юзеров.

Именно поэтому важно, чтобы Вы не только его правильно настроили, но и каждый раз, когда редактируете запись, обновляли дату на текущую. Это нужно будет делать вручную.

С комментариями попроще: когда посетитель добавляет комментарий, то в переменную $last_modified_time время добавления комментария  заносится  автоматически -  это и будет датой последнего изменения страницы.

Зачем нужны заголовки Last-Modified и If-Modified-Since?

1. Когда сервер отдаёт такой код, то выполнение всех PHP сценариев на странице даже не запускается. Страница загружается из кэша поиска, а это, как Вы понимаете, весьма существенно снижает нагрузку на сервер к вящей радости Вашего хостера и ускоряет загрузку страницы у посетителя, что тоже не может не радовать.

Как это происходит?

Сканируя интернет, пауки Google и Яндекса сохраняют в своей базе копию каждого сайта. Эта копия служит неким образцом для сравнения: все ли по-прежнему или произошли изменения. И если не настроены заголовки Last-Modified и If-Modified-Since или настроены неправильно, новые страницы сайта проходят индексацию, а главная в кэше поисковиков долго не обновляется, как не обновляется и лента комментариев.

2. Далее. В процессе оптимизации мы тем или иным способом включаем кеширование на стороне браузера, и это правильно, т.к. эта процедура тоже сокращает нагрузку на сервер.

Но для часто обновляемых страниц (новостных лент, обновляемых по многу раз в сутки, активно комментируемых блогов и т.п.) у него есть один недостаток: информация в кэше слишком быстро устаревает и человек, даже перезагружая страницу, не видит свежих новостей, не видит новых комментариев. Но это еще полбеды. Беда в том, что робот этого тоже не видит, если только не включен правильный заголовок Last-Modified.

header("Last-Modified: ".gmdate("D, d M Y H:i:s ")."GMT");

Если Ваш сайт обновляется часто (например, Ваши записи часто комментируют)  можно отключить кеширование следующим набором заголовков:

header('Expires: '.gmdate('D, d M Y H:i:s', time() + 7200).' GMT');
header('Cache-Control: no-cache, must-revalidate');

Это означает, что действительность сохранённой копии должна перепроверяться при каждом запросе.

Как  работает кэширование в браузерах?

Если оно не запрещено вызовом функции no_cache, то в Firefox и в IE страница сохраняется в кэше, при всех последующих запросах выдается именно она.

Чтобы обновить страницу и получить ее свежую версию, нужно нажать комбинацию клавиш Ctrl + F5, обычная кнопка «Обновить» (F5) не срабатывает. И надо сказать, документы в кэше IE могут храниться очень-очень долго.

В Опере страница кэш очищается по нажатию кнопки «Обновить» или клавиши F5. Сочетание CRTL+F5 в Опере — перезагрузка всех открытых вкладок, Как Вы понимаете, если Вы их много наоткрывали – в процессе ожидания у Вас может отрасти борода.

Если запретить кэширование страницы функцией no_cache, то Опера и Firefox при обращении к такой странице используют механизм с заголовком If-Modified-Since. Таким образом, кэширование происходит, но браузер спрашивает у сервера, изменилась ли страница на самом деле, или нет – это правильная постановка вопроса.

Следовательно, нужно подключить обработку и этого параметра. Я не буду расписывать, что и какая функция означает, просто приведу код, который корректно отдает заголовки и не вызывает конфликтов на большинстве хостингов, с которыми мне приходилось работать. Эта конструкция работает на sweb.ru, eomy.net, timeweb.ru, fastvps.ru, startlogic.com

<?php
header('Expires: '.gmdate('D, d M Y H:i:s', time() + 7200).' GMT');
header('Cache-Control: no-cache, must-revalidate');
$mt = filemtime($file_name);
$mt_str = gmdate("D, d M Y H:i:s ")."GMT";
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) &&
strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $mt)
{header('HTTP/1.1 304 Not Modified');
die;
}
header('Last-Modified: '.$mt_str);
echo $text;
header("Vary: Accept-Encoding");
header("Accept-Encoding:gzip,deflate,sdch");
?>

Таким образом, все, что Вам нужно сделать, это скопировать данный код и добавить его в файл header.php Вашей темы оформления НАД <!DOCTYPE html>. Т.е. этот код – находится в самом верху файла ДО всего остального кода

Внимание! Прежде чем что-то добавлять – сохраните этот файл у себя на компьютере, чтобы можно было восстановить первоначальный вариант, если Ваш хостинг не позволяет такую конфигурацию заголовков.

Проверяем результат на сервисе проверки заголовков Last-Modified и If-Modified-Since http://last-modified.com/ru/if-modified-since.html

  • Если результат положительный – утираем пот со лба и идем пить чай.
  • Если результат отрицательный, ту же конструкцию можно добавить в файл index.php в корне Вашего WordPress (с этим я столкнулась на хостинге timeweb.ru). Точно так же, выше всего остального в нем. Только не забудьте про это, когда будете обновлять движок – индексный файл перезапишется в стандартном его виде.

Вуаля! Правильно настроив заголовки Last-Modified и If-Modified-Since, мы получили кучу бонусов:

  • Увеличили скорость загрузки страниц, что важно для робота Google и приятно для людей.
  • Снизили нагрузку на сервер, чем порадовали хостера.
  • В поисковой выдаче Яндекса будет отображаться дата последнего обновления страницы, что в отдельных случаях очень актуально для людей, а потому косвенно это положительно отразится на поведенческих факторах.
  • Страницы нашего сайта будут участвовать в сортировке поисковых систем по дате – да-да, этим пользуются продвинутые пользователи.
  • И, как следствие всего вышесказанного, весьма ускорится индексирование нашего сайта поисковиками.

Лола Пирхал

Сертифицированный коуч, бизнес-тренер, интернет-предприниматель, веб-разработчик

+38 067 7923605 KartaUspeha.ru

QR:  '.get_the_title().'

Что Вы об этом думаете?

Подарок

Оставьте Ваш первый комментарий и получите замечательный подарок!


20 комментариев

  • Как добавить HTTP заголовки Last-Modified и If-Modified-Since | Почтовый голубь: http://t.co/9Dk1eVG1IQ

  • Заголовки Last-Modified и If-Modified-Since для WordPress | Почтовый голубь: http://t.co/9rv4U3rsKB

  • Лола, а в шаблоне ArtPROBlog(free) эта функция не заложена изначально?
    Спасибо!

    • Нет, Николай. Наши клиенты размещают свои блоги на самых разных хостингах, а разные хостинги имеют разные конфигурации своих серверов. То, что работает на одном, может вызвать ошибку 500 на другом.

  • Здравствуйте Лола! Спасибо за статью. И так знала. что надо писать комментарии и стала писать почти везде, где что-то читаю, но почему внятно не могла объяснить своим подельникам по блогам. теперь с вашей помощью я аргументирую свои советы.
    И еще не могла бы вы в приватном порядке посоветовать мне по поводу IQFORYOU. это что-то аналогичное Эмповеру. Не хочется влипнуть второй раз. 😎 😉

    • по поводу IQFORYOU

      Таких проектов уже было немеряно. Выглядит идея всегда очень привлекательно, но почему-то ни один из этих проектов не живет дольше двух лет.
      Если говорить о конкретно этом проекте, то (как для крутой компании, продвигающей продукты автоматизации онлайн бизнеса), слишком низкие пузомерки - собственно по нулям. Для Яндекса еще более-менее понятно, если они вчера вышли на рынок России, а вот для Гугла нулевой PR странен - домен зарегистрирован в 2007. Если компания успешна, возникает вопрос: почему на нее не ссылаются даже ее собственные партнеры?

      78% страниц в соплях гугла - тоже не айс.

      Показатели Алексы начали расти только во второй половине 2013 года, причем за счет СНГ. Компания, вроде как, американская, а в самой Америке на ее сайт заходит 3% и рейтинг Алексы там самый низкий (что для сетевой американской компании необъяснимый факт): http://img-fotki.yandex.ru/get/9512/50862248.0/0_b8cc0_758b565e_L.jpg.

      За ВСЕ время существования сайта НИКТО не сослался на него в twitter'е - это вообще ОЧЕНЬ СТРАННО

      В общем, как я вижу - ажиотаж вокруг этой компании создается искусственно. А рисковать или нет - решать Вам :)

      • Большое спасибо Лола!
        Да! Создана компания в Америке, но основатель ее немец и компанию у нас позиционируют как немецкую.
        Я правда так еще и не узнала что такое пузомерки. но уже знаю. что это какой то показатель жизнедеятельности платформы.
        Мне тоже показалось странным, что домен зарегистрирован давно и его не было слышно.
        Показалось странным их похожесть с Эмповером
        Пэтому я спросила вас как специалиста. Хотя Траст пишет, что тут есть надежность, по Эмповеру так они написали нет надежности.
        Еще раз спасибо!

  • Здравствуйте, Лола ! , Я начинающий блогер, поэтому вопросов очень много ➡ и часто бьюсь о стену головой, а Вы открыли мне глаза на многие вопросы, спасибо Вам большое !
    Я человек эмоциональный, и люблю ставить много восклицательных и вопросительных знаков, всевозможных галочек и птичек (моя партнерша по блогам говорит, что ни у кого не видела такой манеры написания текстов), хотелось бы узнать как на это реагируют поисковики, потому что когда я вхожу в HTML там найти нужное трудно, и,как говорит моя партнерша, много мусора из за этих значков, главное не мешает ли это поисковикам ? ❓
    Заранее благодарю

    • Добрый день, Татьяна
      На Вашем блоге я вижу не только эту проблему :)
      Вы слишком много внимания уделяете форматированию текста: разные цвета, разные начертания, причем, судя по всему, Вы предварительно форматируете это все в Ворде, потому вставляете в редактор Блоггера и доводите (как Вам кажется :)) до кондиции.

      Ваша партнерша по блогам права в том, что лишнего кода (мусора) у Вас не просто много, а ОЧЕНЬ МНОГО. Да Вы и сами сможете это увидеть, если заглянете в изнанку любой Вашей статьи.

      Желательно, конечно, свести украшение форматирования к минимуму для того, чтобы роботы индексировали текст, ибо он влияет на выдачу, а не кучу кода, который описывает визуальное оформление этого текста :)

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

      • Спасибо Лола за ответ Татьяне!
        Это я ее приятельница и дала ей эту вашу статью. Но она мне пока не сказала, что получила ответ от вас и результат ответа. я ей посоветовала вчера писать несколько постов в разной манере и потом посмотреть, где больше пришло народа. Но люди странные. Они желают только того что лично им нравиться.
        Спасибо. Я очень рада, что мы познакомились

  • Спасибо большое! У Вас самая толковая статья по Last modified для WP из прочитанных штук 10-15. В благодарность затвитил и загуглил )Еще раз спасибо!

  • Все прекрасно получилось, спасибо. Еще вопрос: PageSpeed Insights пишет, что нужно использовать кэш браузера. Сколько ни бьюсь, никак не получается. Как было 79/100, так и не меняется. Все советы, которые в сети, не работают. Можете что-нибудь посоветовать?

  • Andrews32

    Конструкция не работает ни в header.php, ни в index.php (последний WordPress, хостинг Timeweb).

  • Добрый день! Отличная статья, очень помогла! Подскажите, пожалуйста, как указать срок действия для статических ресурсов (jpg, png, css, js и т.д.) Сайт на сервере nginx. Пробовал прописать разные коды в файл.htacess, не срабатывает.

  • Лола, спасибо огромное!
    Все сделала по Вашей рекомендации. Правда, код пришлось добавить и в index.php. Сайт работает на WordPress, хостинг sweb.Проверила на If-Modified-Since. Результат проверки отличный!

  • Спасибо огромное!

  • Я что-то не пойму. В таком случае всегда будет отдаваться заголовок 304 - Not modified, даже если страница реально изменилась. И как в таком случае она будет переиндексирована?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *