Rashp

Last modified_важно для индексации

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

Rashp    2

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

 

Выкладываю небольшой БЕСПЛАТНЫЙ Мануал по Last_modified. 

 

Для чего это нужно? 

 

HTTP заголовки Last-Modified и If-Modified-Since Зачем нужен Last-Modified

 

HTTP заголовок Last-Modified сообщает клиенту время последнего изменения страницы (объекта). Если клиент (браузер, поисковый робот) получил заголовок Last-Modified, то при следующем обращении к адресу, при условии, что страница (объект) есть в локальном кеше, он добавит вопрос If-Modified-Since(не изменилась ли страница после даты, полученной в Last-Modified). В свою очередь сервер, получив запрос If-Modified-Since должен сверить полученную временную метку с временем последнего изменения страницы и, если страница не изменялась ответить 304 Not Modified.

 

Экономия Трафика

 

Если страница не изменилась, то сервер прекратит передачу данных после отправки заголовков с кодом304 Not Modified, тело страницы, изображения и другие объекты передаваться не будут.

 

Снижение нагрузки на сервер

 

Правильная реализация проверки времени последнего изменения страницы может значительно (до 30% и более) сократить нагрузку на сервер. Под правильной реализацией подразумевается проверка времени до начала генерации страницы на динамическом сайте. В таком случае все действия для генерации страницы (запрос контента из базы данных, парсинг шаблонов, получение комментариев и др) выполняться не будут. Особенно это актуально для сайтов с высокой посещаемостью и долгой продолжительностью визита пользователя. Пример: пользователь находится на сайте спортивных новостей и постоянно обновляет главную страницу в ожидании публикации результата матча. За несколько минут страница может быть запрошена и получена десятки раз. Если заголовок Last-Modifiedотдается и запрос If-Modified-Since обрабатывается правильно, то реально страница будет передана один раз, а на все последующие запросы будет выдан ответ 304 Not Modified.

 

Ускорение индексации поисковыми системами

 

Поисковые системы через руководство для вебмастеров рекомендуют отсылать заголовок Last-Modified и правильно обрабатывать If-Modified-Since.

 

В файл /catalog/view/theme/default/template/common/header.tpl

после <head> ставим небольшой скрипт на PHP:

<?php
$num=mt_rand(2000,10000);
$LastModified=gmdate("D, d M Y H:i:s \G\M\T", time()-$num);
$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 >= $num) {
header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
exit;
}
header('Last-Modified: '. $LastModified);
?>

 

HTTP заголовок должен отдаваться корректно.

 

Пользуйтесь на здоровье, но не забываем говорить спасибо )

Изменено пользователем Rashp

Поделиться сообщением


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

Данная тема уже поднималась на форуме.

 

Вообще то вешать на все страницы один last modified это не правильно.  

 

Для товаров, категорий и статей last modified должен браться из поля date_modified в БД. Согласитесь логично:)

 

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

Поделиться сообщением


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

Данная тема уже поднималась на форуме.

 

Вообще то вешать на все страницы один last modified это не правильно.  

 

Для товаров, категорий и статей last modified должен браться из поля date_modified в БД. Согласитесь логично :)

 

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

 

Соглашусь но только отчасти, только с точки зрения красоты кода, но с точки зрения практики нет!

У Яндекса пунктик по поводу частоты обновления контента, поэтому лучше отдавать last modified со всего сайта и не заморачиваться, логичо конечно индексировать только изменения, но как показывает практика не всегда хорошо.

Хотя по секрету: главное чтоб он был и корректно отдавался, остальное Яша зацепит из sitemap.xml, там если вы заметили есть тоже last_modified и он как раз на каждую статью и карточку товара идет :)

Поделиться сообщением


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

в базе у товара есть поле date_modified, вот его и нужно использовать.

Поделиться сообщением


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

Данная тема уже поднималась на форуме.

 

Вообще то вешать на все страницы один last modified это не правильно.  

 

Для товаров, категорий и статей last modified должен браться из поля date_modified в БД. Согласитесь логично :)

 

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

 

Соглашусь но только отчасти, только с точки зрения красоты кода, но с точки зрения практики нет!

У Яндекса пунктик по поводу частоты обновления контента, поэтому лучше отдавать last modified со всего сайта и не заморачиваться, логичо конечно индексировать только изменения, но как показывает практика не всегда хорошо.

Хотя по секрету: главное чтоб он был и корректно отдавался, остальное Яша зацепит из sitemap.xml, там если вы заметили есть тоже last_modified и он как раз на каждую статью и карточку товара идет :)

Почему же не всегда хорошо с точки зрения практики?

 

Все зависит от целей, которые Вы ставите перед собой.

 

Если нужно ускорить индексацию сайта, то пожалуйста, можете вешать last modified на главную.

 

А если сайт уже успешно проиндексирован и работает, то смысл обманывать робота? :)

 

Last modified из sitemap мне кажется имеет значительно более низкий приоритет, чем заголовок.

Поделиться сообщением


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

в базе у товара есть поле date_modified, вот его и нужно использовать.

 

А вот вариант freelancer даже более грамотный, но друзья, дело в том, что стандартный движок вообще не отдает никаких заголовков - это не есть правильно.

Теперь о морали:)

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

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

Ладно, всем удачи в продвижении:)

Поделиться сообщением


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

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

Поделиться сообщением


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

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

Поделиться сообщением


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

в базе у товара есть поле date_modified, вот его и нужно использовать.

 

А вот вариант freelancer даже более грамотный, но друзья, дело в том, что стандартный движок вообще не отдает никаких заголовков - это не есть правильно.

Теперь о морали :)

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

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

Ладно, всем удачи в продвижении :)

Ну как бы я тоже самое предложил, что и фрилансер:)

 

Я вопрос не к морали поднял, а к тому, что данное действие на этап уже работающего сайта может быть не совсем уместно:)

Поделиться сообщением


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

В мультимагазине при переходе в категорию:

Warning: Cannot modify header information - headers already sent by (output started at /home/p50444/www/evro-remont-samara.ru/catalog/language/russian/product/kategory.php:1) in/home/p50444/www/evro-remont-samara.ru/catalog/view/theme/default/template/common/header.tpl on line 18

 

:( 

Поделиться сообщением


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

для товара

после строки

$product_info = $this->model_catalog_product->getProduct($product_id);

указать

        $date_modified = strtotime($product_info['date_modified']);
        if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
            $modified_since = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
            if ($modified_since >= $date_modified) {
                header ("HTTP/1.1 304 Not Modified ");
                header ("Last-Modified: " . gmdate("D, d M Y H:i:s", $date_modified) . " GMT");
                exit();
            }
        }
        header ("Last-Modified: " . gmdate("D, d M Y H:i:s", $date_modified) . " GMT");
Изменено пользователем freelancer

Поделиться сообщением


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

для товара

после строки

$product_info = $this->model_catalog_product->getProduct($product_id);

указать

        $date_modified = strtotime($product_info['date_modified']);
        if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
            $modified_since = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
            if ($modified_since >= $date_modified) {
                header ("HTTP/1.1 304 Not Modified ");
                header ("Last-Modified: " . gmdate("D, d M Y H:i:s", $date_modified) . " GMT");
                exit();
            }
        }
        header ("Last-Modified: " . gmdate("D, d M Y H:i:s", $date_modified) . " GMT");

 

Если не сложно, укажите путь к файлу где содержится строка: $product_info = $this->model_catalog_product->getProduct($product_id);

Поделиться сообщением


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

все нашел, 

 

путь к файлу для таких же как я, которые в бронепоезде :)

 

catalog/controller/product/product.php

Поделиться сообщением


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

по аналогии стоит сделать для категорий, статей и прочего, где есть поле date_modified

Поделиться сообщением


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

большое спасибо freelancer и Rashp !!!!!

Поделиться сообщением


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

для товара

после строки

$product_info = $this->model_catalog_product->getProduct($product_id);

указать

        $date_modified = strtotime($product_info['date_modified']);
        if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
            $modified_since = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
            if ($modified_since >= $date_modified) {
                header ("HTTP/1.1 304 Not Modified ");
                header ("Last-Modified: " . gmdate("D, d M Y H:i:s", $date_modified) . " GMT");
                exit();
            }
        }
        header ("Last-Modified: " . gmdate("D, d M Y H:i:s", $date_modified) . " GMT");

 

Однозначно в новую сборку ocStore !

Поделиться сообщением


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

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

Поделиться сообщением


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

уже ставил решения но через пару месяцев снес из-за подобной ошибки:

Warning: Cannot modify header information - headers already sent by (output started at /home/p50444/www/evro-remont-samara.ru/catalog/language/russian/product/kategory.php:1) in/home/p50444/www/evro-remont-samara.ru/catalog/view/theme/default/template/common/header.tpl on line 18

 

кто воспользовался из этой ветки, отпишитесь плз, не проскакивают ли в журнале ошибки с заголовками?

Поделиться сообщением


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

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

конкретно у меня такая ошибка:

 

2013-06-15 3:08:03 - PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/БАЗА/public_html/index.php:100) in /home/БАЗА/public_html/catalog/view/theme/mytheme/template/product/product.tpl on line 13

из-за нее и снес ластмодифай, хотя его хочется

Поделиться сообщением


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

кстати еще такой вопрос: в этой реализации заголовков будет ли обновляться дата категории товара при добавлении в нее нового товара?

Поделиться сообщением


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

И что будет, если на карточке товара есть динамический контент? Например блок "Акции", в котором товар постоянно новый.

Поделиться сообщением


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

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

Поделиться сообщением


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

предлагаю проверить, а не предполагать.

ну или доки почитать, что бы понимать что происходит

Поделиться сообщением


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

предлагаю проверить, а не предполагать.

ну или доки почитать, что бы понимать что происходит

про динамический контент проверено. кстати даже статус у товара остается так как фактически пока не зайдешь в карточку не пере сохранишь он отдает загруженую из кеша копию.

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу