суббота, 4 октября 2014 г.

Проверяем HTTP заголовок «Last-Modified» и ответ на запрос «if-modified-since»

Яндекс рекомендует следить за корректностью http-заголовков. Цитата из документа «Рекомендации Яндекса по созданию сайтов»:
«В частности важно содержание ответа, который отдаёт сервер на запрос «if-modified-since». Заголовок Last-Modified должен отдавать корректную дату последнего изменения документа.»

Проверим как с Last-Modified обстоит дело в различных CMS.

Проверять можно с помощью If Modified Since Tool, HTTP compression and HTTP conditional GET test tool, Проверка If-Modified-Since, либо вручную.

Joomla+VirtueMart

Joomla поддерживает Last-Modified, но всегда прописывает текущую дату:
что-то я не понял, откуда тут взялось «304 Not Modified»? Вообще это какой-то непонятный тест, согласно всем остальным тестам и экспериментам, на запрос «if-modified-since» Joomla возвращает StatusCode=200 (OK) ну а в Last-Modified ставит текущую дату.
интересно, почему VirtueMart не использует для обработки запроса «if-modified-since» дату модификации товара mdate, которую можно посмотреть через следующий SQL запрос:
SELECT `product_name`, FROM_UNIXTIME(mdate) mdate
      FROM `jos_vm_product`
      ORDER BY mdate DESC;
И почему Joomla не использует дату модификации статей?
SELECT `title`, `modified` FROM `jos_content`
      ORDER BY `modified` DESC;

WordPress

WordPress Last-Modified просто напросто не поддерживает:
http last modified wordpress
однако это не мешает Яндексу его успешно индексировать.

Проверка If-Modified-Since вручную

Есть простой способ проверки if-modified-since с помощью telnet. Запускаем telnet:
# telnet www.example.com 80
и вводим следующее:
GET /index.html HTTP/1.0
User-Agent: Mozilla/5.0
From: something.somewhere.net
Accept: text/html,text/plain,application/*
Host: www.example.com
If-Modified-Since: Wed, 19 Oct 2005 10:50:00 GMT
если сервер вернет 304 (Not modified), значит он If-Modified-Since поддерживает, но страница не была изменена. Код 200 (Ok) означает, что страница изменена.
Также можно проверить через PHP, см How to test for “If-Modified-Since” HTTP Header support.

Проверка If-Modified-Since на С#

Проверить как работает If-Modified-Since можно с помощью следующего C# кода:
private HttpWebResponse GetPage()
{
    string url = @"http://.....";
    // Place the web request to the server by specifying the URL
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    // No need for a persistant connection
    request.KeepAlive = false;
    // The link that referred us to the URL
    request.Referer = url;
    // The user agent of the browser
    request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50215)";
    //Instead of HTTP 1.1 I will use HTTP 1.0. When a request tells the server it uses 1.0,
    //the server won't respond with chunked data but will send the response all at once.
    request.ProtocolVersion = new Version(1, 1);
    request.IfModifiedSince = DateTime.Now.AddDays(-5);
    // Get the response from the server
    return (HttpWebResponse)request.GetResponse();
}
private void TestLastModified(VirtueMartContext db, jos_vm_product product)
{
    using (HttpWebResponse response = GetPage())
    {
        Debug.Print("Status Code : {0}, Description : {1}\n", response.StatusCode, response.StatusDescription);
        string text = WebResponceReader.GetResponceText(response);
        Debug.Print(text.Substring(0, 100));
    }
}
с помощью этого метода можно убедиться в том, что Joomla всегда возвращает StatusCode=200 (OK), независимо от значения request.IfModifiedSince.

Проверка If-Modified-Since через сервис Яндекса

Если в Яндекс Веб-мастере нажать на кнопку «Проверка ответа сервера«, то мы попадаем сюда:
тут опять же видно, что сайт slogpost.ru и соответственно WordPress без плагина WP Super Cache не добавляет заголовок Last-Modified.

Ну с CMS разобрались, а как работает сам Яндекс?

Здесь можно привести такой пример: сегодня 7.7.2011, контент в Joomla был обновлен 20.6.2011, а у Яндекс в кэше версия от 11.06.2011, хотя после этой даты робот приходил уже неоднократно. В данном случае обновления Яндекс загружает с очень существенной задержкой. Вопрос — почему?
Вот, что по этому поводу говорит Платон Щукин:
По мере обхода сайта робот также переобойдет указанную страницу, после чего с обновлением поисковых баз она обновится в выдаче. Мы работаем над тем, чтобы это происходило как можно быстрее.
Со своей стороны Вы также можете помочь роботу быстрее индексировать сайт, воспользовавшись следующими рекомендациями со страницы нашей Помощи.

Комментариев нет:

Отправить комментарий