Jump to content

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 заголовок должен отдаваться корректно.

 

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

Edited by Rashp
  • +1 8

Share this post


Link to post
Share on other sites

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

 

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

 

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

 

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

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

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

Share this post


Link to post
Share on other sites

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

  • +1 1

Share this post


Link to post
Share on other sites

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

 

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

 

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

 

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

 

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

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

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

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

 

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

 

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

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

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

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

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

 

:( 

Share this post


Link to post
Share on other sites

для товара

после строки

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

Share this post


Link to post
Share on other sites

все нашел, 

 

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

 

catalog/controller/product/product.php

  • +1 1

Share this post


Link to post
Share on other sites

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

  • +1 1

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Guest 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 !

  • +1 1

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

 

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.