Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

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

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

Уже выше было представлено, что будет, если отдается корректно заголовок 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;
}
Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

 

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

 

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

 

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

 

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

 

пс

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

Ссылка на сообщение
Поделиться на другие сайты

Добрый день!

-

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

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

-

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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.

Ссылка на сообщение
Поделиться на другие сайты

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

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

-

(В связи с закрытием темы) Есть вопрос и дополнение к теме 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, ведь на аяксе толко содержимое блока?


 

Ссылка на сообщение
Поделиться на другие сайты

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

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

-

(В связи с закрытием темы) Есть вопрос и дополнение к теме 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, ведь на аяксе толко содержимое блока?

 

 

 

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

Ссылка на сообщение
Поделиться на другие сайты
  • 2 недели спустя...

Где можно посмотреть демо ваших работ? Боюсь ставить пока не попробую и не увижу собственными глазами

Ссылка на сообщение
Поделиться на другие сайты

Где можно посмотреть демо ваших работ? Боюсь ставить пока не попробую и не увижу собственными глазами

 

демо данной работы?

Ссылка на сообщение
Поделиться на другие сайты

DaVinci,

И всё-таки, как сделать, чтобы last-modified обновлялся на главной (в категориях) сразу же после того, как товары на главной (в категориях) обновились.

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Ссылка на сообщение
Поделиться на другие сайты
  • 11 месяцев спустя...

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

Ссылка на сообщение
Поделиться на другие сайты
  • 3 недели спустя...

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

Заголовок 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;
	}
	
Изменено пользователем FDA
Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 4 месяца спустя...
  • 3 месяца спустя...

Решение для обработки главной страницы. Можно так же сделать обновление тега при обновлении самих товаров (Активный, Рекомендуемый и тд)

Ссылка на сообщение
Поделиться на другие сайты
  • 4 года спустя...
В 03.10.2015 в 00:21, FDA сказал:

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 1 год спустя...
В 03.10.2015 в 00:21, FDA сказал:

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

Заголовок 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;
	}
	

 

Скажите, добавил в s_category, s_brands, s_products поля last_update,

в карточку получилось добавить (товар отдает last mod)

а вот каталог не отдает

		// Устанавливаем мета-теги в зависимости от запроса
		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;

			
		}
		elseif(isset($category))
		{
			$this->design->assign('meta_title', $category->meta_title);
			$this->design->assign('meta_keywords', $category->meta_keywords);
			$this->design->assign('meta_description', $category->meta_description);

			if($category->last_update)
			$this->last_update = $category->last_update;
		}
		elseif(isset($brand))
		{
			$this->design->assign('meta_title', $brand->meta_title);
			$this->design->assign('meta_keywords', $brand->meta_keywords);
			$this->design->assign('meta_description', $brand->meta_description);

			if($brand->last_update)
			$this->last_update = $brand->last_update;

		}
		elseif(isset($keyword))
		{
			$this->design->assign('meta_title', $keyword);
		}

В ProductsView.php добавил такое условие.

Результат: провалено

Сайт не отдает время последней модификации Last-Modified.

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...