Kors Опубликовано 27 августа, 2014 Жалоба Поделиться Опубликовано 27 августа, 2014 Представьте. Есть сайт с 10 тысячами страниц. Сайт написан на php. Не отдается корректно заголок Last-Modified. Поисковой робот не может получить информацию о том, обновилась ли страница сайта с момента последнего индексирования. Что он делает? Индексирует все страницы!!! А не только те, которые изменились.Уже выше было представлено, что будет, если отдается корректно заголовок Last-Modified (в смысле DaVinci, по полю в таблице БД). У поисковиков все прекрасно, а у простого пользователя корзина бешеной становится. Одно строим, другое ломаем. Препарат имеет противопоказания, перед применением проконсультируйтесь со специалистом. Цитата Ссылка на сообщение Поделиться на другие сайты
DaVinci Опубликовано 27 августа, 2014 Автор Жалоба Поделиться Опубликовано 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; } Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 27 августа, 2014 Жалоба Поделиться Опубликовано 27 августа, 2014 Проконсультироваться вы конечно можете но любой сео-шник вам посоветует отдавать для улучшения индексации Last-Modified.Если Вы внимательно читали, то должны были бы заметить, что я не спорю в этом со знающими сеошниками. Я веду речь о том, что предложенные Вами улучшения для сео (видимо, очень полезные для поисковиков) убивают саму идею сайта для покупателя. Мои переживания состоят в том, что Вы свое первоначальное решение Вы уже подправили многими костылями, некоторые из которых к тому же описаны лишь приблизительно на уровне идеи. Если так принимаете участие, то напишите свое решение полностью единым текстом, чтобы не приходилось выискивать Ваши заплатки по всей теме и строить догадки. Чтобы можно было установить все по Вашим рекомендациям на стандартной Simpla и проверить. Цитата Ссылка на сообщение Поделиться на другие сайты
DaVinci Опубликовано 27 августа, 2014 Автор Жалоба Поделиться Опубликовано 27 августа, 2014 Если Вы внимательно читали, то должны были бы заметить, что я не спорю в этом со знающими сеошниками. Я веду речь о том, что предложенные Вами улучшения для сео (видимо, очень полезные для поисковиков) убивают саму идею сайта для покупателя. Мои переживания состоят в том, что Вы свое первоначальное решение Вы уже подправили многими костылями, некоторые из которых к тому же описаны лишь приблизительно на уровне идеи.Если так принимаете участие, то напишите свое решение полностью единым текстом, чтобы не приходилось выискивать Ваши заплатки по всей теме и строить догадки. Чтобы можно было установить все по Вашим рекомендациям на стандартной Simpla и проверить. Что конкретно я подправил, о каких костылях вы говорит? в ответ на ваши переживания по поводу корзины и другого динамического контента я предложил записывать дату действия и сравнивать с датой обновления страницы. Мое решение написано полным текстом в первом сообщение. http://forum.simplacms.ru/topic/8113-last-modified/?p=61127 по аналогии, если вам необходимо сделайте остальные разделы сайта, добавьте костыли, заплатки если вам так хочется (я просто не знаю где вы их видели) а если сложно выискивать заплатки и строить догадки то в эту тему то по сути вообще можно просто не заходить. Зачем вы себя так насилуете)) псможет собрать вам со всего форума готовые решения, привести в должный вид, разложить по алфавиту и подать на стол? Вы бы дали образец как формлять темы, я бы то сразу составил как надо.... Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 27 августа, 2014 Жалоба Поделиться Опубликовано 27 августа, 2014 да, собственное есть такая проблема, вы правы. первое что приходит на ум это принудительное обновление через все тот же ajax. можно сравнить идентификатор в корзине и в кеше и если не совпадают то обновлять. как то так. скорее всего есть другие вариантыНасколько я понимаю, это придуманное Вами дополнение к первому посту - на уровне идеи. Поэтому считать ваше первое сообщение полным текстом - не получается. Цитата Ссылка на сообщение Поделиться на другие сайты
DaVinci Опубликовано 27 августа, 2014 Автор Жалоба Поделиться Опубликовано 27 августа, 2014 я выложил пример, а то воспользуетесь вы им или нет, как вы лично его дополните это ваше дело. я ведь не несу перед вами лично обязательств сделать полное руководство по интеграции данного решения, при этом исключить все возможные баги, костыли, заплатки и тп... Цитата Ссылка на сообщение Поделиться на другие сайты
DaVinci Опубликовано 27 августа, 2014 Автор Жалоба Поделиться Опубликовано 27 августа, 2014 Насколько я понимаю, это придуманное Вами дополнение к первому посту - на уровне идеи. Поэтому считать ваше первое сообщение полным текстом - не получается.если не получается - не считайте Цитата Ссылка на сообщение Поделиться на другие сайты
Maksclub Опубликовано 1 сентября, 2014 Жалоба Поделиться Опубликовано 1 сентября, 2014 Добрый день!-Пробежался п овашим топикам... новым... Какое то сопротивление у "местных" к вам! Сразу столько доработок... Понимаю что есть сыроватые... ну или не учитывающие некоторые моменты-Касательно корзины (не переключаются валюты, все упрощено до предела, но корзина ajax + ваша доработка "избранные, сравнение")все будет нормально? Цитата Ссылка на сообщение Поделиться на другие сайты
DaVinci Опубликовано 1 сентября, 2014 Автор Жалоба Поделиться Опубликовано 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. Цитата Ссылка на сообщение Поделиться на другие сайты
Maksclub Опубликовано 2 сентября, 2014 Жалоба Поделиться Опубликовано 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, ведь на аяксе толко содержимое блока? Цитата Ссылка на сообщение Поделиться на другие сайты
DaVinci Опубликовано 2 сентября, 2014 Автор Жалоба Поделиться Опубликовано 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, ведь на аяксе толко содержимое блока? по мета ни как не быть, поисковики проходят по ссылкам, а для пользователей это вообще не надо. Цитата Ссылка на сообщение Поделиться на другие сайты
d_bugurus2006 Опубликовано 16 сентября, 2014 Жалоба Поделиться Опубликовано 16 сентября, 2014 Где можно посмотреть демо ваших работ? Боюсь ставить пока не попробую и не увижу собственными глазами Цитата Ссылка на сообщение Поделиться на другие сайты
DaVinci Опубликовано 16 сентября, 2014 Автор Жалоба Поделиться Опубликовано 16 сентября, 2014 Где можно посмотреть демо ваших работ? Боюсь ставить пока не попробую и не увижу собственными глазами демо данной работы? Цитата Ссылка на сообщение Поделиться на другие сайты
Gragory Опубликовано 19 сентября, 2014 Жалоба Поделиться Опубликовано 19 сентября, 2014 DaVinci,И всё-таки, как сделать, чтобы last-modified обновлялся на главной (в категориях) сразу же после того, как товары на главной (в категориях) обновились. Цитата Ссылка на сообщение Поделиться на другие сайты
Jabber Опубликовано 24 сентября, 2014 Жалоба Поделиться Опубликовано 24 сентября, 2014 DaVinci приделал lastmod на сайт, все работает, сделано быстро, качественно, недорого. Проверял много сценариев, и с корзиной тоже, вопросов нет. Kors, Вам за описание варианта с корзиной тоже спасибо, интересный складывался сюжет, представляю реакцию покупателя .. Цитата Ссылка на сообщение Поделиться на другие сайты
FDA Опубликовано 15 сентября, 2015 Жалоба Поделиться Опубликовано 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.? Цитата Ссылка на сообщение Поделиться на другие сайты
FDA Опубликовано 2 октября, 2015 Жалоба Поделиться Опубликовано 2 октября, 2015 (изменено) Помогите разобраться.Заголовок 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; } Изменено 2 октября, 2015 пользователем FDA Цитата Ссылка на сообщение Поделиться на другие сайты
Gragory Опубликовано 4 ноября, 2015 Жалоба Поделиться Опубликовано 4 ноября, 2015 DaVinci, подскажи решение для следующего: - При обновлении контента на главной странице, допустим, появляются новые товары (или же по ним просто обновляется информация), нужно чтобы обновлялся Last-Modified главной страницы.- Соответсвенно тоже самое, но только со страницей блога. Цитата Ссылка на сообщение Поделиться на другие сайты
KostyanBr Опубликовано 10 марта, 2016 Жалоба Поделиться Опубликовано 10 марта, 2016 У кого то получилось сделать? В базе прописывается время хорошо, а на странице не выводится Last-Modified.... Цитата Ссылка на сообщение Поделиться на другие сайты
therion Опубликовано 14 июня, 2016 Жалоба Поделиться Опубликовано 14 июня, 2016 Решение для обработки главной страницы. Можно так же сделать обновление тега при обновлении самих товаров (Активный, Рекомендуемый и тд) Цитата Ссылка на сообщение Поделиться на другие сайты
get31 Опубликовано 5 марта, 2021 Жалоба Поделиться Опубликовано 5 марта, 2021 В 03.10.2015 в 00:21, FDA сказал: Помогите разобраться. Заголовок LastModified с главной страницы отдается корректно, а других страниц - нет. Время в базе изменяется везде корректно. потому что нужно добавить в PageView по аналогии как MainView и тогда будет работать на других страницах Цитата Ссылка на сообщение Поделиться на другие сайты
megauser Опубликовано 11 июля, 2022 Жалоба Поделиться Опубликовано 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. Цитата Ссылка на сообщение Поделиться на другие сайты
shooroop Опубликовано 12 июля, 2022 Жалоба Поделиться Опубликовано 12 июля, 2022 last_update выведен в Categories.php Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.