Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

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

 

Выкладываю небольшой БЕСПЛАТНЫЙ Мануал по 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
  • +1 8
Надіслати
Поділитися на інших сайтах


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

 

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

 

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

 

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

Надіслати
Поділитися на інших сайтах


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

 

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

 

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

 

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

 

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

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

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

Надіслати
Поділитися на інших сайтах


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

 

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

 

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

 

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

 

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

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

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

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

 

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

 

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

 

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

 

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

Надіслати
Поділитися на інших сайтах


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

 

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

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

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

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

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

Надіслати
Поділитися на інших сайтах


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

Надіслати
Поділитися на інших сайтах


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

 

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

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

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

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

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

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

 

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

Надіслати
Поділитися на інших сайтах


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

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

 

:( 

Надіслати
Поділитися на інших сайтах

для товара

после строки

$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
  • +1 10
Надіслати
Поділитися на інших сайтах

для товара

после строки

$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);

Надіслати
Поділитися на інших сайтах


для товара

после строки

$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 !

Надіслати
Поділитися на інших сайтах

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

Надіслати
Поділитися на інших сайтах


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

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

 

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

Надіслати
Поділитися на інших сайтах


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

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

 

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

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

Надіслати
Поділитися на інших сайтах


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

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

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

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.