Jump to content

Recommended Posts

Функцией заголовка как можно догадаться из названия служит информирование клиента о дате последней модификации web-документа.

 

------------------------------------------------------------------------------------------------------------

 

Как заголовок Last-Modified ускоряет поисковую индексацию?

Все просто, как написано в помощи Яндекса, «робот не сможет получить информацию о том, обновилась ли страница сайта с момента последнего индексирования. А так как число страниц, получаемых роботом с сайта за один заход, ограничено, изменившиеся страницы будут переиндексироваться реже».

Представьте. Есть сайт с 10 тысячами страниц. Сайт написан на php. Не отдается корректно заголок Last-Modified. Поисковой робот не может получить информацию о том, обновилась ли страница сайта с момента последнего индексирования. Что он делает? Индексирует все страницы!!! А не только те, которые изменились.
Конечно! На многих сайтах используют Sitemap. Но Sitemap это рекомендация, помощь поисковому оптимизатору. Заменой заголовка Last-Modified он быть не может!

 

------------------------------------------------------------------------------------------------------------

 

http://habrahabr.ru/post/109043/

 

http://last-modified.com/ru/last-modified-if-modified-since-php.html

 

index.php

 







// Если все хорошо
if(($res = $view->fetch()) !== false)
{

	// Выводим результат
	header("Content-type: text/html; charset=UTF-8");

    $LastModified_unix = strtotime($view->last_update); // время последнего изменения страницы

    if(!empty($LastModified_unix) && $LastModified_unix > 0)
    {
        $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');
        }
        header('Last-Modified: '. $LastModified);
    }

	print $res;

 

/view/View.php

 







...
	public $currency;
	public $currencies;
	public $user;
	public $group;
	public $page;
	public $last_update;
...

		if(self::$view_instance)
		{
			$this->currency     = &self::$view_instance->currency;
			$this->currencies   = &self::$view_instance->currencies;
			$this->user         = &self::$view_instance->user;
			$this->group        = &self::$view_instance->group;
			$this->page         = &self::$view_instance->page;
			$this->last_update  = &self::$view_instance->last_update;
		}
...

 

для примера возьму class/Pages.php (в остальные классах - бренды, категории, товары по аналогии)

 







public function get_page($id)
	{
		if(gettype($id) == 'string')
			$where = $this->db->placehold(' WHERE url=? ', $id);
		else
			$where = $this->db->placehold(' WHERE id=? ', intval($id));

		$query = "SELECT id, url, header, name, meta_title, meta_description, meta_keywords, body, menu_id, position, visible, last_update
		          FROM __pages $where LIMIT 1";

		$this->db->query($query);
		return $this->db->result();
	}






public function add_page($page)
	{
		$query = $this->db->placehold('INSERT INTO __pages SET ?%', $page);
		if(!$this->db->query($query))
			return false;

		$id = $this->db->insert_id();
		$this->db->query("UPDATE __pages SET position=id, last_update=NOW() WHERE id=?", $id);
		return $id;
	}






public function update_page($id, $page)
	{
		$query = $this->db->placehold('UPDATE __pages SET ?% , last_update=NOW() WHERE id in (?@)', $page, (array)$id);
		if(!$this->db->query($query))
			return false;
		return $id;
	}

 

/view/MainView.php







if($this->page)
		{
			$this->design->assign('meta_title', $this->page->meta_title);
			$this->design->assign('meta_keywords', $this->page->meta_keywords);
			$this->design->assign('meta_description', $this->page->meta_description);

            if($this->page->last_update)
                $this->last_update = $this->page->last_update;
		}

 

 

SQL







ALTER TABLE `s_pages` ADD `last_update` TIMESTAMP NOT NULL AFTER `header`

 

проверяем http://last-modified.com/ru/if-modified-since.html

 

 

===================================================

 

по вопросам: доработка, установки стучите в личку или скайп.

 

Если вы хотите установить эту доработку но по каким то причинам не можете сделать это самостоятельно я всегда рад помочь на платной основе.

 

Смотрите другие доработки в моем профиле

 

скайп: simpladev

Edited by DaVinci
Link to post
Share on other sites

буквально вчера думал о ETag
https://github.com/pikusov/Simpla/pull/86/files

 

 // Если все хорошо
 if(($res = $view->fetch()) !== false)
 {
-	// Выводим результат
-	header("Content-type: text/html; charset=UTF-8");	
-	print $res;
+	$ETag = md5($res); 
+	$if_none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ? stripslashes($_SERVER['HTTP_IF_NONE_MATCH']) : false ;
+	
+	if ($if_none_match && $if_none_match == $ETag)
+	{ 
+	    header('HTTP/1.0 304 Not Modified'); 
+	    header('ETag: "'.$ETag.'"');
+	    print $res;
+	} 
+	else
+	{ 
+	    // Выводим результат
+	    header("Cache-Control: must-revalidate");  
+	    header("Content-type: text/html; charset=UTF-8");   
+	    header("ETag: $ETag");
+	    print $res;
+	
+	}

П.С. У вас вот такая проблема выйдет, товары на главной изменились, но page для главной не менялся, и тут выходит не корректно 304 отдавать ;)  и т.д.
Возможно я в своём варианте тоже что то не учел.  

Link to post
Share on other sites

Функцией заголовка как можно догадаться из названия служит информирование клиента о дате последней модификации web-документа.

Объясните, если кто знает, для чего нужно это информирование? Просто для сведения или еще какая польза есть или может быть?

 

Могу предположить, что при повторном запросе, например, главной страницы сайта http://site.ru/ браузер может сначала запросить заголовок, по заголовку определить время изменения, и если это время предшествует дате кеша страницы, то загрузить страницу из своего кеша, не запрашивая у сервера код страницы и тем самым сэкономив на трафике.

 

Но если так, то работать правильно не будет ни один из двух способов...

Link to post
Share on other sites

ну во вервых, автор темы предложил код, который совсем не так будет (должен работать) так как контент динамический, а Last-Modified у него изменяется только тогда когда меняем page 

Мой вариант работает по хеш'у контента да со стороны сервера все ровно происходит те же запросы и т.д. как при 200 так и при 304, но для пользователя ето выглядит так http://c2n.me/iMwzKd 
То есть экономит трафик + грузит кеш.

На ету тему можно дискутировать, к тому же думаю некоторые браузеры могут ишачить

Link to post
Share on other sites

ну во вервых, автор темы предложил код, который совсем не так будет (должен работать) так как контент динамический, а Last-Modified у него изменяется только тогда когда меняем page 

 

Мой вариант работает по хеш'у контента да со стороны сервера все ровно происходит те же запросы и т.д. как при 200 так и при 304, но для пользователя ето выглядит так http://c2n.me/iMwzKd 

То есть экономит трафик + грузит кеш.

 

На ету тему можно дискутировать, к тому же думаю некоторые браузеры могут ишачить

 

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

 

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

 

osben, проверьте свою реализации сперва тут http://last-modified.com/ru/if-modified-since.html и выложите скрин результата

Link to post
Share on other sites

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

 

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

 

osben, проверьте свою реализации сперва тут http://last-modified.com/ru/if-modified-since.html и выложите скрин результата

 

Чет Вы одну воду написали.... 

 

я предложил пример реализации, 

Это отлично, побольше людей таких было бы

 

которая работает именно так как надо

Возникает вопрос, а как надо ?

 

прошу заметить что в качестве примера я выложил код для страниц. 

супер, и будет работать правильно только для статических страниц. (проверьте страницу контакты, отправка писем работает норм, пользователь видет сообщение об отправленном сообщении. Подозриваю что там может быть баг)

 

то какую дату отдавать на главной странице это дело фантазии

но фантазия должна быть логична же, с таким успехом можно было задать 90й год )

 

далеко не у всех она динамическая 

я предполагаю на основе своего опыта, логики симплы и сделанных проектов, доля не более 3% где статика. 

+ статическую страницу, page можно сделать и для категории для перекрытия (и т..д) что уже точно не как не может быть статически

 

Я выложил решение ETag а не Last-Modified

 

простите, уехал на уикенд, так что дискуссию вести не смогу

 

Link to post
Share on other sites

 

Я выложил решение ETag а не Last-Modified

 

простите, уехал на уикенд, так что дискуссию вести не смогу

 

 

для чего вы ее вообще начинали если тема называется Last-Modified

Link to post
Share on other sites

манипуляция с Last-Modified сводится для того что бы отдать 304 ответ для клиента, правильно ?
Я показал вариант при котором можно тоже отдавать 304. И который по моему мнению более актуальнее работает на изменение контента. 

Если я не прав, то дайте пинок (конкретно ткните носом где я не прав что бы сделать выводы).

Я Вам конкретно навел свои доводы что у Вас работает не так как должно. Если я не прав, то дайте еще один пинок. 

Или Вам не нравятся когда другие выкладывают свои идеи в Вашем теме ? Или что Вас подозревают что Вы что то не корректно написали, допустили ошибку (мое мнение с аргументами выше я приложил)? 
 

Link to post
Share on other sites

все таки приложите по возможности скрин того что отдаст форма в ответ на ваше решение http://last-modified.com/ru/if-modified-since.html

 

и как надо применять его если мы имеем рандомные выводы (товары, отзывы, статьи и т.п)?

Link to post
Share on other sites

 

 

Я Вам конкретно навел свои доводы что у Вас работает не так как должно. Если я не прав, то дайте еще один пинок. 

 

 

 

что конкретно работает не так как должно? я не понимаю) главная страница не обновляется автоматом? вы про это?

Link to post
Share on other sites

А можно поподробней что куда вставлять.. Заранее спасибо.

DaVinci, присоединяюсь к просьбе - если можно, с подробностями, в какие файлы и в каком месте каждого файла вставлять. 

Link to post
Share on other sites

А почему нельзя разобрать пошагово, то что пишут на http://habrahabr.ru/post/109043/? Я так понял там все правильно?

 

 

Настройка и обработка заголовока Last-Modified в php
Для того чтобы веб-сервер передавал php-backend'у заголовок If-Modified-Since необходимо ему от этом сообщить!

Для связки nginx + php так,
location ~ \.php$
{ 
  …
  if_modified_since off;
      
  fastcgi_pass  fcgi;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME /<путь > /web$fastcgi_script_name;
  …
  fastcgi_pass_header Last-Modified;
  include fastcgi_params;
}

* This source code was highlighted with Source Code Highlighter.

Для связки apache + php, так
# If-Modified-Since (if php is not installed as cgi then comment lines below)
RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]
RewriteRule .* - [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]

* This source code was highlighted with Source Code Highlighter.
Если php работает как модуль, то ничего настраивать не надо!

Простой php-код обработки запроса If-Modified-Since, 
$qtime = isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])? $_SERVER['HTTP_IF_MODIFIED_SINCE']:'' ;

$modified = substr(gmdate('r', $timestamp), 0, -5).'GMT';

if ($hdr == $modified) 
{
header ("HTTP/1.1 304 Not Modified ");
header ("Last-Modified: $modified");
exit();
}
header ("Last-Modified: $modified");
//render

* This source code was highlighted with Source Code Highlighter.

Как обрабатывать запрос If-Modified-Since в symfony?
В symfony уже предусмотрен механизм обработки заголовка. Все что нужно разработчику, так это передать в объект sfWebResponse заголовок. В случае его указания фрейморк все сделает сам.
$datestamp = time();
$response->setHttpHeader('Last-Modified', $response->getDate($datestamp));

* This source code was highlighted with Source Code Highlighter.
Так как на странице как правило располагается разный контент, то я написал метод, который выставляет самый поздний из переданных заголовков!
static public function setLastModified($datestamp)
{
    $response = sfContext::getInstance()->getResponse();
    $request = sfContext::getInstance()->getRequest();

    if(is_array($datestamp))
    {
      rsort($datestamp, SORT_NUMERIC);
      $datestamp = $datestamp[0];
    }

    if(!$response->hasHttpHeader('Last-Modified'))
    {
      $response->setHttpHeader('Last-Modified', $response->getDate($datestamp));
    }
    else
    {
      $origLastModified = strtotime($response->getHttpHeader('Last-Modified'));
      if($origLastModified < $datestamp)
        $response->setHttpHeader('Last-Modified', $response->getDate($datestamp));
    }
}

* This source code was highlighted with Source Code Highlighter.
Его очень удобно использовать в случае, если на странице, например, располагается 3 последних видеролика, 3 последних статьи и там еще что-нибудь. Загружая каждую модель из базы данных, мы можем вызывать метод, и в итоге в ответе получив самую позднюю дату модификации.
Для интересующихся код обработки заголовка находится в классе sfCacheFilter.class.php.

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

Еще,

Проверить сайт на корректную обработку заголовка можно тут или так, 

<?php
$ch = curl_init();
  
  $url = 'http://site.ru/1.php ';
  
  curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
      'If-Modified-Since: Sun, 28 Nov 2010 15:45:53 GMT'
    ));
    
  ob_start();
  curl_exec ($ch);
  curl_close ($ch);
  $data = ob_get_contents();
  ob_end_clean();
  
  
  echo nl2br($data);
?>

* This source code was highlighted with Source Code Highlighter.
 
Link to post
Share on other sites

Разобрать можно. 

Во-первых, длинная цитата, если Вы ее хоть бегло прочли, относится к CMS symfony. Вот для начала и разберите указанную систему, а потом разберите пошагово свою цитату, выясните,  какой шаг имеет общий характер, а какой специфичен для той системы. Потом для специфичных шагов разработайте аналоги под Simpla. Когда все это проделаете, поделитесь впечатлениями и результатами.
 
Во-вторых, в цитированном фрагменте сказано: 

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

В Simpla, как во всяком магазине, есть корзина. Это важнейший из  динамический блоков.  Если для других блоков типа случайного вывода товаров, отзывов и проч. при выводе блока будет ошибка в том, что блок не всегда будет случайным, это совсем не критично и магазин это переживет. Но в случае корзины все будет иначе.
Допустим, мы применили метод от DaVinci, и посетитель, впервые придя на сайт, проводит следующие действия:
1. Открывает одну из инфо страниц.
2. Открывает страницу товара и кладет товар в корзину.
3. Открывает вторую инфо страницу.
4. Открывает вторую страницу товара и кладет второй товар в корзину.
5. Открывает опять первую инфо страницу.
6. Открывает опять вторую инфо страницу.

В корзине будет видно следующее:
4. Два товара
5. Корзина пуста
6. Один товар

Происходит это потому, что на шаге 5 инфо страница будет выдана из кеша, сделанного на шаге 1, когда корзина была пуста. Аналогичное безобразие будет и на шаге 6.
Таким образом, при простых переходах по разным страницам пользователь будет все время видеть РАЗНЫЕ корзины, в то время как он с корзиной никаких действий не производит! Что подумает простой пользователь об этом магазине и его владельце? Однозначно покупать в таком магазине рискнут не многие. Вот и думайте, какова ценность метода, предложенного DaVinci.
 
В-третьих, метод, который предложил osben, вроде бы не имеет таких недостатков, и должен работать корректно. Но у него есть другой недостаток. Он каждый раз на сервере заново формирует страницу полностью, и уже по полному коду страницы определяет, изменилась она или нет. Тем самым самая главная идея применения Last-Modified - экономия серверных ресурсов - фактически и не работает. Экономится только на передаче от сервера  браузеру, что при современном развитии интернет-коммуникаций куда менее принципиально.

Link to post
Share on other sites

Разобрать можно. 

 

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

 

Во-вторых, в цитированном фрагменте сказано: 

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

В Simpla, как во всяком магазине, есть корзина. Это важнейший из  динамический блоков.  Если для других блоков типа случайного вывода товаров, отзывов и проч. при выводе блока будет ошибка в том, что блок не всегда будет случайным, это совсем не критично и магазин это переживет. Но в случае корзины все будет иначе.

Допустим, мы применили метод от DaVinci, и посетитель, впервые придя на сайт, проводит следующие действия:

1. Открывает одну из инфо страниц.

2. Открывает страницу товара и кладет товар в корзину.

3. Открывает вторую инфо страницу.

4. Открывает вторую страницу товара и кладет второй товар в корзину.

5. Открывает опять первую инфо страницу.

6. Открывает опять вторую инфо страницу.

 

В корзине будет видно следующее:

4. Два товара

5. Корзина пуста

6. Один товар

 

Происходит это потому, что на шаге 5 инфо страница будет выдана из кеша, сделанного на шаге 1, когда корзина была пуста. Аналогичное безобразие будет и на шаге 6.

Таким образом, при простых переходах по разным страницам пользователь будет все время видеть РАЗНЫЕ корзины, в то время как он с корзиной никаких действий не производит! Что подумает простой пользователь об этом магазине и его владельце? Однозначно покупать в таком магазине рискнут не многие. Вот и думайте, какова ценность метода, предложенного DaVinci.

 

В-третьих, метод, который предложил osben, вроде бы не имеет таких недостатков, и должен работать корректно. Но у него есть другой недостаток. Он каждый раз на сервере заново формирует страницу полностью, и уже по полному коду страницы определяет, изменилась она или нет. Тем самым самая главная идея применения Last-Modified - экономия серверных ресурсов - фактически и не работает. Экономится только на передаче от сервера  браузеру, что при современном развитии интернет-коммуникаций куда менее принципиально.

 

не обязательно в корзине отдавать Last-Modified (тем более ее не надо индексировать да и не индексируется она) и проблем в этом случае нет (проверенно)... помимо корзины есть разделы order, user в которых так же не надо проводить ни каких манипуляций.

 

robots.txt

User-agent: *

Disallow: /sections/404

Disallow: /simpla/
Disallow: /order/
Disallow: /user/
Disallow: /js/
Disallow: /captcha/
Disallow: /Smarty/
Disallow: /design/
Disallow: /api/
Disallow: /compiled/
Disallow: /cart/
Disallow: /resize/
Disallow: /password.php

метод который предложил osben, помимо тех недостатков которые вы упомянули, в случае с рандомным контентом будет работать корректно только в том случае если весь рандомный контент подтягивать через ajax

Link to post
Share on other sites

а прям обязательно в корзине отдавать Last-Modified (тем более ее не надо индексировать да и не индексируется она)? я думаю нет, и проблем в этом случае тоже нет (проверенно)...

Возможно, я сказал недостаточно четко о том, что речь идет не об отдельной странице корзины (тут, как Вы справедливо заметили, все корректно, если для этой страницы не отдавать Last-Modified), а об информере - блоке корзины, который формируется в основном шаблоне и, следовательно, показывается на ВСЕХ страницах. И в этом блоке описанная проблема встает во всей своей красе.
Link to post
Share on other sites

Возможно, я сказал недостаточно четко о том, что речь идет не об отдельной странице корзины (тут, как Вы справедливо заметили, все корректно, если для этой страницы не отдавать Last-Modified), а об информере - блоке корзины, который формируется в основном шаблоне и, следовательно, показывается на ВСЕХ страницах. И в этом блоке описанная проблема встает во всей своей красе.

 

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

Link to post
Share on other sites

проверил - вариант с принудительным обновление корзины через ajax работает. отправляем пустой запрос в /ajax/cart.php, обновляем informer

Link to post
Share on other sites

Сомневаюсь, что это решит вопрос полностью.

Это ж надо всю систему перекопать и так все подобные моменты заново переделать.

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

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

Стоит ли овчинка выделки?

Link to post
Share on other sites

упустил момент - тестил корзину с установленным примером от osben-a. 

 

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

Link to post
Share on other sites

Сомневаюсь, что это решит вопрос полностью.

Это ж надо всю систему перекопать и так все подобные моменты заново переделать.

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

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

Стоит ли овчинка выделки?

 

Google: Руководство для веб-мастеров

https://support.google.com/webmasters/answer/35769

 

Яндекс: Советы вебмастеру

http://help.yandex.ru/webmaster/recommendations/indexing.xml

 

Думаю стоит, СЕО-шники рекомендуют. не надо ничего перекапывать, манипуляции не глобальные. по поводу кеша это совсем другая история

Link to post
Share on other sites

Как сказал Штирлиц, с этого надо было начинать.

 

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

 

Если это надо для SEO, то Last-Modified с самого начала надо отдавать только в ответ на запросы поисковиков, а не всем подряд, во избежание описанных недоразумений. Соответственно надо бы все описывать точно и, конечно, приводить в соответствие код. А пока в теме уже довольно запутано, простому пользователю разобраться практически невозможно.

Link to post
Share on other sites

Как сказал Штирлиц, с этого надо было начинать.

 

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

 

Если это надо для SEO, то Last-Modified с самого начала надо отдавать только в ответ на запросы поисковиков, а не всем подряд, во избежание описанных недоразумений. Соответственно надо бы все описывать точно и, конечно, приводить в соответствие код. А пока в теме уже довольно запутано, простому пользователю разобраться практически невозможно.

 

 

Надо руководствоваться первым постом где есть ссылка http://habrahabr.ru/post/109043/ по идее все ведь понятно

 

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

Link to post
Share on other sites

Объясните, если кто знает, для чего нужно это информирование? Просто для сведения или еще какая польза есть или может быть?

 

Могу предположить, что при повторном запросе, например, главной страницы сайта http://site.ru/ браузер может сначала запросить заголовок, по заголовку определить время изменения, и если это время предшествует дате кеша страницы, то загрузить страницу из своего кеша, не запрашивая у сервера код страницы и тем самым сэкономив на трафике.

 

Но если так, то работать правильно не будет ни один из двух способов...

 

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

 

Как заголовок Last-Modified ускоряет поисковую индексацию?

 

Все просто, как написано в помощи Яндекса, «робот не сможет получить информацию о том, обновилась ли страница сайта с момента последнего индексирования. А так как число страниц, получаемых роботом с сайта за один заход, ограничено, изменившиеся страницы будут переиндексироваться реже».

 

Представьте. Есть сайт с 10 тысячами страниц. Сайт написан на php. Не отдается корректно заголок Last-Modified. Поисковой робот не может получить информацию о том, обновилась ли страница сайта с момента последнего индексирования. Что он делает? Индексирует все страницы!!! А не только те, которые изменились.

Конечно! На многих сайтах используют Sitemap. Но Sitemap это рекомендация, помощь поисковому оптимизатору. Заменой заголовка Last-Modified он быть не может!

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.

Loading...
×
×
  • Create New...