Jump to content

Recommended Posts

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

Уже выше было представлено, что будет, если отдается корректно заголовок Last-Modified (в смысле DaVinci, по полю в таблице БД). У поисковиков все прекрасно, а у простого пользователя корзина бешеной становится. Одно строим, другое ломаем. Препарат имеет противопоказания, перед применением проконсультируйтесь со специалистом.
Link to post
Share on other sites

Уже выше было представлено, что будет, если отдается корректно заголовок Last-Modified (в смысле DaVinci, по полю в таблице БД). У поисковиков все прекрасно, а у простого пользователя корзина бешеной становится. Одно строим, другое ломаем. Препарат имеет противопоказания, перед применением проконсультируйтесь со специалистом.

 

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

 

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

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

 

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

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

 

все ваши переживания решаются к примеру:

 

принимая от пользователя $_POST или $_GET записываем в сессию или куки дату и время и перед тем как отдать Last-Modified проверяем ее наличие и сравниваем с датой обновления страницы

 



$_SESSION['last_action'] = strtotime(date("Y-m-d H:i:s"));

if(!empty($_SESSION['last_action']) && $_SESSION['last_action']>$LastModified_unix){
        $LastModified_unix = null;
}
Link to post
Share on other sites

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

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

 

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

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

Link to post
Share on other sites

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

 

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

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

 

Что конкретно я подправил, о каких костылях вы говорит?

 

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

 

Мое решение написано полным текстом в первом сообщение. http://forum.simplacms.ru/topic/8113-last-modified/?p=61127 по аналогии, если вам необходимо сделайте остальные разделы сайта, добавьте костыли, заплатки если вам так хочется (я просто не знаю где вы их видели)

 

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

 

пс

может собрать вам со всего форума готовые решения, привести в должный вид, разложить по алфавиту и подать на стол?  :) Вы бы дали образец как формлять темы, я бы то сразу составил как надо....

Link to post
Share on other sites

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

Насколько я понимаю, это придуманное Вами дополнение к первому посту - на уровне идеи. Поэтому считать ваше первое сообщение полным текстом - не получается.
Link to post
Share on other sites

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

Link to post
Share on other sites

Насколько я понимаю, это придуманное Вами дополнение к первому посту - на уровне идеи. Поэтому считать ваше первое сообщение полным текстом - не получается.

если не получается - не считайте

Link to post
Share on other sites

Добрый день!

-

Пробежался п овашим топикам... новым... Какое то сопротивление у  "местных" к вам!

Сразу столько доработок... Понимаю что есть сыроватые... ну или не учитывающие некоторые моменты

-

Касательно корзины (не переключаются валюты, все упрощено до предела, но корзина ajax + ваша доработка "избранные, сравнение")

все будет нормально?

Link to post
Share on other sites

учтите вот этот момент

if(!empty($_SESSION['last_action']) && $_SESSION['last_action']>$LastModified_unix){        $LastModified_unix = null;}

записывайте в сессию $_SESSION['last_action'] нынешнюю дату если принимаете от пользователя какие либо действия связанные с обновлением контента на сайте

$_SESSION['last_action'] = strtotime(date("Y-m-d H:i:s"));

в каталоге и брендах стоит сравнивать даты между собой и между последним обновленным товаром (необходимо добавить небольшую функцию для того что бы достать товар с последней датой данного каталога или бренда) и пару условий в ProductsView.

Link to post
Share on other sites

Спасибо большое!

Не понятно многое, к концу работы над проектом обращусь.

-

(В связи с закрытием темы) Есть вопрос и дополнение к теме http://forum.simplacms.ru/topic/8142-ajax-%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F-%D0%BF%D0%B0%D0%B3%D0%B8%D0%BD%D0%B0%D1%86%D0%B8%D1%8F/?do=findComment&comment=61339

 

 

Дополнение: в коде добавить .sort a - чтобы сортировка по цене/названию была ajax

    $("#brands a, #features a, .pagination a,.sort a,.mfilter a,.next_page_link").live('click', function(){ 

 

Вопрос: как быть с мета-тенами title  и decsription, ведь на аяксе толко содержимое блока?


 

Link to post
Share on other sites

Спасибо большое!

Не понятно многое, к концу работы над проектом обращусь.

-

(В связи с закрытием темы) Есть вопрос и дополнение к теме http://forum.simplacms.ru/topic/8142-ajax-%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F-%D0%BF%D0%B0%D0%B3%D0%B8%D0%BD%D0%B0%D1%86%D0%B8%D1%8F/?do=findComment&comment=61339

 

 

Дополнение: в коде добавить .sort a - чтобы сортировка по цене/названию была ajax

    $("#brands a, #features a, .pagination a,.sort a,.mfilter a,.next_page_link").live('click', function(){ 

 

Вопрос: как быть с мета-тенами title  и decsription, ведь на аяксе толко содержимое блока?

 

 

 

по мета ни как не быть, поисковики проходят по ссылкам, а для пользователей это вообще не надо.

Link to post
Share on other sites
  • 2 weeks later...

DaVinci приделал lastmod на сайт, все работает, сделано быстро, качественно, недорого. Проверял много сценариев, и с корзиной тоже, вопросов нет.

 

Kors, Вам за описание варианта с корзиной тоже спасибо, интересный складывался сюжет, представляю реакцию покупателя ..

Link to post
Share on other sites
  • 11 months later...

Функцией заголовка как можно догадаться из названия служит информирование клиента о дате последней модификации 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

К сожалению по данному решению у меня заголовки не отдаются.

Может что-то не правильно в изменениях файла /view/MainView.php.?

Link to post
Share on other sites
  • 3 weeks later...

Помогите разобраться.

Заголовок LastModified с главной страницы отдается корректно, а других страниц - нет.
Время в базе изменяется везде корректно.

 

часть кода api/Pages.php^

/*
	*
	* Функция возвращает страницу по ее id или url (в зависимости от типа)
	* @param $id id или url страницы
	*
	*/
	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, date, 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();
	}
	
	/*
	*
	* Функция возвращает массив страниц, удовлетворяющих фильтру
	* @param $filter
	*
	*/
	public function get_pages($filter = array())
	{	
		$menu_filter = '';
		$visible_filter = '';
		$pages = array();

		if(isset($filter['menu_id']))
			$menu_filter = $this->db->placehold('AND menu_id in (?@)', (array)$filter['menu_id']);

		if(isset($filter['visible']))
			$visible_filter = $this->db->placehold('AND visible = ?', intval($filter['visible']));
		
		$query = "SELECT id, url, header, name, date, meta_title, meta_description, meta_keywords, body, menu_id, position, visible, last_update
		          FROM __pages WHERE 1 $menu_filter $visible_filter ORDER BY position";
	
		$this->db->query($query);
		
		foreach($this->db->results() as $page)
			$pages[$page->id] = $page;
			
		return $pages;
	}

	/*
	*
	* Создание страницы
	*
	*/	
	public function add_page($page)
	{	
	    if(!isset($page->last_update))
			$last_update_query = ', date=NOW()';
		$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_query WHERE id=?", $id);	
		return $id;
	}
	
	/*
	*
	* Обновить страницу
	*
	*/
	public function update_page($id, $page)
	{	
	    if(!isset($page->last_update))
			$last_update_query = ', date=NOW()';
		$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;
	}
	
Edited by FDA
Link to post
Share on other sites
  • 1 month later...

DaVinci, подскажи решение для следующего: 

- При обновлении контента на главной странице, допустим, появляются новые товары (или же по ним просто обновляется информация), нужно чтобы обновлялся Last-Modified главной страницы.

- Соответсвенно тоже самое, но только со страницей блога.

Link to post
Share on other sites
  • 4 months later...
  • 3 months later...
  • 4 years later...
В 03.10.2015 в 00:21, FDA сказал:

Помогите разобраться.

Заголовок LastModified с главной страницы отдается корректно, а других страниц - нет.
Время в базе изменяется везде корректно.

потому что нужно добавить в PageView по аналогии как MainView и тогда будет работать на других страницах

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