Kors Posted August 27, 2014 Report Share Posted August 27, 2014 Представьте. Есть сайт с 10 тысячами страниц. Сайт написан на php. Не отдается корректно заголок Last-Modified. Поисковой робот не может получить информацию о том, обновилась ли страница сайта с момента последнего индексирования. Что он делает? Индексирует все страницы!!! А не только те, которые изменились.Уже выше было представлено, что будет, если отдается корректно заголовок Last-Modified (в смысле DaVinci, по полю в таблице БД). У поисковиков все прекрасно, а у простого пользователя корзина бешеной становится. Одно строим, другое ломаем. Препарат имеет противопоказания, перед применением проконсультируйтесь со специалистом. Quote Link to post Share on other sites
DaVinci Posted August 27, 2014 Author Report Share Posted August 27, 2014 Уже выше было представлено, что будет, если отдается корректно заголовок 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; } Quote Link to post Share on other sites
Kors Posted August 27, 2014 Report Share Posted August 27, 2014 Проконсультироваться вы конечно можете но любой сео-шник вам посоветует отдавать для улучшения индексации Last-Modified.Если Вы внимательно читали, то должны были бы заметить, что я не спорю в этом со знающими сеошниками. Я веду речь о том, что предложенные Вами улучшения для сео (видимо, очень полезные для поисковиков) убивают саму идею сайта для покупателя. Мои переживания состоят в том, что Вы свое первоначальное решение Вы уже подправили многими костылями, некоторые из которых к тому же описаны лишь приблизительно на уровне идеи. Если так принимаете участие, то напишите свое решение полностью единым текстом, чтобы не приходилось выискивать Ваши заплатки по всей теме и строить догадки. Чтобы можно было установить все по Вашим рекомендациям на стандартной Simpla и проверить. Quote Link to post Share on other sites
DaVinci Posted August 27, 2014 Author Report Share Posted August 27, 2014 Если Вы внимательно читали, то должны были бы заметить, что я не спорю в этом со знающими сеошниками. Я веду речь о том, что предложенные Вами улучшения для сео (видимо, очень полезные для поисковиков) убивают саму идею сайта для покупателя. Мои переживания состоят в том, что Вы свое первоначальное решение Вы уже подправили многими костылями, некоторые из которых к тому же описаны лишь приблизительно на уровне идеи.Если так принимаете участие, то напишите свое решение полностью единым текстом, чтобы не приходилось выискивать Ваши заплатки по всей теме и строить догадки. Чтобы можно было установить все по Вашим рекомендациям на стандартной Simpla и проверить. Что конкретно я подправил, о каких костылях вы говорит? в ответ на ваши переживания по поводу корзины и другого динамического контента я предложил записывать дату действия и сравнивать с датой обновления страницы. Мое решение написано полным текстом в первом сообщение. http://forum.simplacms.ru/topic/8113-last-modified/?p=61127 по аналогии, если вам необходимо сделайте остальные разделы сайта, добавьте костыли, заплатки если вам так хочется (я просто не знаю где вы их видели) а если сложно выискивать заплатки и строить догадки то в эту тему то по сути вообще можно просто не заходить. Зачем вы себя так насилуете)) псможет собрать вам со всего форума готовые решения, привести в должный вид, разложить по алфавиту и подать на стол? Вы бы дали образец как формлять темы, я бы то сразу составил как надо.... Quote Link to post Share on other sites
Kors Posted August 27, 2014 Report Share Posted August 27, 2014 да, собственное есть такая проблема, вы правы. первое что приходит на ум это принудительное обновление через все тот же ajax. можно сравнить идентификатор в корзине и в кеше и если не совпадают то обновлять. как то так. скорее всего есть другие вариантыНасколько я понимаю, это придуманное Вами дополнение к первому посту - на уровне идеи. Поэтому считать ваше первое сообщение полным текстом - не получается. Quote Link to post Share on other sites
DaVinci Posted August 27, 2014 Author Report Share Posted August 27, 2014 я выложил пример, а то воспользуетесь вы им или нет, как вы лично его дополните это ваше дело. я ведь не несу перед вами лично обязательств сделать полное руководство по интеграции данного решения, при этом исключить все возможные баги, костыли, заплатки и тп... Quote Link to post Share on other sites
DaVinci Posted August 27, 2014 Author Report Share Posted August 27, 2014 Насколько я понимаю, это придуманное Вами дополнение к первому посту - на уровне идеи. Поэтому считать ваше первое сообщение полным текстом - не получается.если не получается - не считайте Quote Link to post Share on other sites
Maksclub Posted September 1, 2014 Report Share Posted September 1, 2014 Добрый день!-Пробежался п овашим топикам... новым... Какое то сопротивление у "местных" к вам! Сразу столько доработок... Понимаю что есть сыроватые... ну или не учитывающие некоторые моменты-Касательно корзины (не переключаются валюты, все упрощено до предела, но корзина ajax + ваша доработка "избранные, сравнение")все будет нормально? Quote Link to post Share on other sites
DaVinci Posted September 1, 2014 Author Report Share Posted September 1, 2014 учтите вот этот момент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. Quote Link to post Share on other sites
Maksclub Posted September 2, 2014 Report Share Posted September 2, 2014 Спасибо большое! Не понятно многое, к концу работы над проектом обращусь.-(В связи с закрытием темы) Есть вопрос и дополнение к теме 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, ведь на аяксе толко содержимое блока? Quote Link to post Share on other sites
DaVinci Posted September 2, 2014 Author Report Share Posted September 2, 2014 Спасибо большое! Не понятно многое, к концу работы над проектом обращусь.-(В связи с закрытием темы) Есть вопрос и дополнение к теме 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, ведь на аяксе толко содержимое блока? по мета ни как не быть, поисковики проходят по ссылкам, а для пользователей это вообще не надо. Quote Link to post Share on other sites
d_bugurus2006 Posted September 16, 2014 Report Share Posted September 16, 2014 Где можно посмотреть демо ваших работ? Боюсь ставить пока не попробую и не увижу собственными глазами Quote Link to post Share on other sites
DaVinci Posted September 16, 2014 Author Report Share Posted September 16, 2014 Где можно посмотреть демо ваших работ? Боюсь ставить пока не попробую и не увижу собственными глазами демо данной работы? Quote Link to post Share on other sites
Gragory Posted September 19, 2014 Report Share Posted September 19, 2014 DaVinci,И всё-таки, как сделать, чтобы last-modified обновлялся на главной (в категориях) сразу же после того, как товары на главной (в категориях) обновились. Quote Link to post Share on other sites
Jabber Posted September 24, 2014 Report Share Posted September 24, 2014 DaVinci приделал lastmod на сайт, все работает, сделано быстро, качественно, недорого. Проверял много сценариев, и с корзиной тоже, вопросов нет. Kors, Вам за описание варианта с корзиной тоже спасибо, интересный складывался сюжет, представляю реакцию покупателя .. Quote Link to post Share on other sites
FDA Posted September 15, 2015 Report Share Posted September 15, 2015 Функцией заголовка как можно догадаться из названия служит информирование клиента о дате последней модификации 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.? Quote Link to post Share on other sites
FDA Posted October 2, 2015 Report Share Posted October 2, 2015 (edited) Помогите разобраться.Заголовок 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 October 2, 2015 by FDA Quote Link to post Share on other sites
Gragory Posted November 4, 2015 Report Share Posted November 4, 2015 DaVinci, подскажи решение для следующего: - При обновлении контента на главной странице, допустим, появляются новые товары (или же по ним просто обновляется информация), нужно чтобы обновлялся Last-Modified главной страницы.- Соответсвенно тоже самое, но только со страницей блога. Quote Link to post Share on other sites
KostyanBr Posted March 10, 2016 Report Share Posted March 10, 2016 У кого то получилось сделать? В базе прописывается время хорошо, а на странице не выводится Last-Modified.... Quote Link to post Share on other sites
therion Posted June 14, 2016 Report Share Posted June 14, 2016 Решение для обработки главной страницы. Можно так же сделать обновление тега при обновлении самих товаров (Активный, Рекомендуемый и тд) Quote Link to post Share on other sites
get31 Posted March 5, 2021 Report Share Posted March 5, 2021 В 03.10.2015 в 00:21, FDA сказал: Помогите разобраться. Заголовок LastModified с главной страницы отдается корректно, а других страниц - нет. Время в базе изменяется везде корректно. потому что нужно добавить в PageView по аналогии как MainView и тогда будет работать на других страницах Quote Link to post Share on other sites
megauser Posted July 11, 2022 Report Share Posted July 11, 2022 В 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. Quote Link to post Share on other sites
shooroop Posted July 12, 2022 Report Share Posted July 12, 2022 last_update выведен в Categories.php Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.