last-modified и if-modified-since для Joomla 1.5/2.5

  • 365 Ответов
  • 57800 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

Оффлайн Antosha

  • *****
  • 420
  • [+]52 / [-]0
  • Плохо спорить плохо
    • Просмотр профиля
Всем привет.

Столкнулся с такой ситуацией, что многие не знают об этих параметрах, а самое главное и них не знают или не хотят реализовывать разработчики Joomla и в частности Joostina.

Давайте разберемся, что это за заголовки и силами сообщества попробуем допилить Joomla и Joostina, так как я сам поковырялся, но сделать не смог.

Как ведут себя Поисковики.

Как часто поисковики индексируют ваш сайт? Зависит от многих факторов, но что Яндекс, что Google всегда имеет какой-то лимит загруженных за раз страниц с вашего сайта. У Google это от 10 до 150-200, у Яндекса и того меньше. Я думаю, что лимит устанавливается для каждого сайта свой и берется в каком - то процентном соотношении от общего числа страниц. Теперь допустим, что поисковик за раз индексирует 20 ваших страниц. Допустим вы создали 5 новых страниц и передали поисковику карту сайта, а также внесли изменения в 5 других страниц. Поисковик кончено сходит по новым 5 - ти страницам, а что делать с остальными? Далее он поступает практически рандомно и посетит еще 15 страниц сайта и совершенно не обязательно, что он попадет на страницы с изменениями, так как он об изменениях то ничего не знает. Таким образом переиндексация измененных страниц затягивается случайным образом.

Вся проблемы в заголовке ответа сервера last-modified, который у большинства сайтов он либо вообще отсутствует, либо ставится текущая дата. Если стоит дата текущая, или даже дата в будущем, то поисковик на второй или третий раз не заметив изменений перестанет обращать на этот заголовок внимание. Этот заголовок должен быть добросовестно заполнен.

Допустим в заголовке ответа last-modified у нас стоит добросовестная дата, тогда поисковик сравнив дату своего индекса и поняв, что изменений не было пропустит эту страницу и перейдет к следующей рандомной. На самом деле даже загрузки страницы не произойдет. Боты используют заголовок if-modified-since, а сервер должен ответить 304 на это и заткнуться, ничего не передав. В общим другими словами, если last-modified работает правильно, то в окошко индексирования (20 страниц) можно за раз запихать как можно больше страниц с изменениями, быстрее получить результат продвижения, снизить нагрузку на свой сервер (в ответ только заголовки), облегчит работу боту.

Про это свободно говорит сам Яндекс:

Цитировать
Насколько критично, что мой сервер не выдает last-modified? Я пытался настроить этот параметр, но ничего не вышло.
Даже если сервер не выдает дату последней модификации документа (last-modified), ваш сайт будет проиндексирован. Однако в этом случае следует учитывать следующее:

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

Теперь про if-modified-since.

Сейчас боты добавляют к своем запросу последней строчкой вот такую конструкцию:

GET / HTTP/1.1
Host: www.site.ru
...
...
Cache-Control: max-age=0
if-modified-since: #дата страницы в индексе#

И надеется, что сервер им отдаст правильный ответ. То есть если страница с того момента изменилась - получают ее, если нет, то выдается 304 и все дела.

Если на сервере реализован last-modified, то обработку if-modified-since сделать очень просто.

Яндекс также серьезно обращает на это внимание:

Цитировать
Следите за корректностью http-заголовков. В частности, важно, содержание ответа, который сервер отдает на запрос «if-modified-since». Заголовок Last-Modified должен отдавать корректную дату последнего изменения документа.

Цитировать
Как помочь роботу быстрее индексировать сайт
Чтобы ускорить появление страниц сайта в поиске, воспользуйтесь нашими рекомендациями — во-первых, исключите из индексирования ненужную информацию, во-вторых, сообщайте роботу о новых страницах. Для этого:
.....
настройте сервер на выдачу корректных заголовков ответов (например, если страница не существует, выдавать ошибку 404, а если поступил запрос If-Modified-Since, то выдавать код 304, если страница с указанной в запросе даты не изменялась).

Проблема.

Почему то не Joomla 1.5 ни 1.7 не отправляют и не обрабатывают этих заголовков, а также Joostina, которая меня интересует. В Joostine даже есть файл page.php и соответствующий класс, где эти заголовки обрабатываются, но в моей (1.3) версии не используется никак вообще по - моему.

А эти два заголовка действительно важная вещь. Если у вас на сайте больше 1000 страниц, то боту отыскать страницу с изменениями, достаточно сложно, что затягивает скорость индексации.

Давайте допили Joomla и Joostina и сделаем эти проекты более SEO привлекательными. Ведь делов то не много... нужны хорошие руки.

Заранее, спасибо.

UPD:
Решение для Joomla 2.5
Решение для Joomla 1.5
Плагин для J2.5
« Последнее редактирование: 27.05.2012, 18:48:33 от ELLE »
<a href="http://joomlablog.ru/">JoomlaBlog</a>

*

Оффлайн ELLE

поднимался однако вопрос
Динамические файлы Joomla! не отправляют Last-Modified заголовка (да и фиг его вычислишь корректно, максимум ETag можно)

здесь еще, правда для 1.0
у меня же в last-modified всегда текущая дата - конечно это все же лучше чем бы вообще не было, но было бы отлично настроить 304 в случае если документ не обновлялся. Короче подписалась :)

*

Оффлайн beliyadm

  • ********
  • 8447
  • [+]1590 / [-]63
  • Пол: Мужской
  • Севастополь == Россия
    • Просмотр профиля
    • записки нетрезвого кодера
Вы про параметр Last-Modified? Так он вроде прекрасно вставляется с момента последнего обновления страницы, например только что обновил текст и заголовок мне отдал с страницы контента
Код: (php) [Выделить]
Last-Modified Mon, 21 Nov 2011 02:24:30 GMTДалее иду на страницу типа блога с этим содержимым и вижу
Код: (php) [Выделить]
Last-Modified Mon, 21 Nov 2011 02:25:52 GMTЯ в чем-то не прав или не понимаю суть?


P.S. оффтоп по теме - какую роль с точки зрения сео играют теги типа "link rel='prev'" и "link rel='next'"? У ВП они для текущей страницы показывают урлы на рядом лежащие - это вообще какой то смысл имеет?
А ну и да - у ВП, изначально заточенного как блог больше тоже нет меток
Все истины, которые я хочу вам изложить, — бесстыдная ложь.
Записки нетрезвого кодера || -=Joomla FAQ=- || -=все плохо=- || skype: beliyadm_pb

*

Оффлайн ELLE

beliyadm, а проверь любую страницу, которую 100 лет не обновлял ;)

*

Оффлайн beliyadm

  • ********
  • 8447
  • [+]1590 / [-]63
  • Пол: Мужской
  • Севастополь == Россия
    • Просмотр профиля
    • записки нетрезвого кодера
beliyadm, а проверь любую страницу, которую 100 лет не обновлял
хм, везде вижу дату последней модификации как текущее время, при этом Expires = Mon, 1 Jan 2001 00:00:00 GMT

Что плохого в том, что каждый раз при обращении поисковика на страницу он видит, что она обновлена сегодня?
Все истины, которые я хочу вам изложить, — бесстыдная ложь.
Записки нетрезвого кодера || -=Joomla FAQ=- || -=все плохо=- || skype: beliyadm_pb

*

Оффлайн ELLE

1-лишняя нагрузка
2-ограниченная загрузка кол-ва документов ПС за 1 раз

допустим робот решил, что будет загружать не более 50 страниц. а тут мы взяли и выборочно изменили некоторые страницы => как он узнает что ему нужно загружать в этот раз, а что нет => растягивается время переиндексации

P.S. оффтоп
>>>>
« Последнее редактирование: 21.11.2011, 08:50:41 от ELLE »

*

Оффлайн skai

  • *****
  • 1230
  • [+]153 / [-]1
  • Пол: Мужской
  • skaiseo
    • Просмотр профиля
Поднимал вопрос уже If-Modified-Since -> 304 - никто помочь не вызвался, сам не смог решить - тему удалил, пользуюсь тем что есть.

Antosha + за поднятие вопроса. Для больших сайтов это очень актуально.

Наполнение вашего сайта - 1т.р. стр. (текст, изображения, мета, перелинковка). Гарантия высокого ранжирования. SEO консультация в подарок.
----------------------------------------------------------------------------------------------

*

Оффлайн Antosha

  • *****
  • 420
  • [+]52 / [-]0
  • Плохо спорить плохо
    • Просмотр профиля
Если на всех страницах last-motified будет стоять текущая дата, то поисковик свята веря в ваши даты будет качать эти страницы, но поняв, что они на самом деле не меняются и вы его попросту обманываете, перестанет обращать внимание на этот заголовок и все будет по старому. То есть если last-motified = текущая дата равносильно тому, что его вообще нету...

В Joosinte в includes/libraries/cache/handler/page.php есть класс:

Код: (php) [Выделить]
class JCachePage extends JCache

и соответственно два метода:

Код: (php) [Выделить]
function checkNotModified($send304=true) {
$client_etag = isset($_SERVER['HTTP_IF_NONE_MATCH'])? stripslashes($_SERVER['HTTP_IF_NONE_MATCH']) : false;
$client_last_modified = isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])? stripslashes($_SERVER['HTTP_IF_MODIFIED_SINCE']) : false;
if(($client_etag==false)&&($client_last_modified==false))
return false;
$notmodified = false;
$etag = '"'.$this->_hash.'"';
if(($client_last_modified!==false)&&(($pos=strpos($client_last_modified,';'))!==false))
$client_last_modified=substr($client_last_modified,0,$pos);
if($client_etag===$etag)
$notmodified = true;
elseif(($client_last_modified!==false)&&(strtotime($client_last_modified) == $this->_content_modified))
$notmodified = true;
if($notmodified && $send304) {
@ob_clean();
$http1x = isset($_SERVER['SERVER_PROTOCOL'])? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.x';
if(strcmp(PHP_VERSION,'PHP 4.3.0')>=0)
header($http1x.' 304 Not Modified',true,304);
else
header($http1x.' 304 Not Modified');
header('Status: 304 Not Modified');
header('ETag: '.$etag);
exit(0);
}
return $notmodified;
Код: (php) [Выделить]
function setHeader($ttl=null) {
header('Last-Modified: '.gmdate("D, d M Y H:i:s", $this->_content_modified).' GMT');
if($this->_hash)
header('ETag: "'.$this->_hash.'"');
if($ttl!==null)
header('Expires: '.gmdate("D, d M Y H:i:s", time()+$ttl).' GMT');
header('Cache-Control: public');
header('Pragma: no-cache');
}


То есть там уже все написано и как-то используется кешь... Надо просто понять как это сделать на Joomla

Заранее, спасибо.
<a href="http://joomlablog.ru/">JoomlaBlog</a>

*

Оффлайн Antosha

  • *****
  • 420
  • [+]52 / [-]0
  • Плохо спорить плохо
    • Просмотр профиля
Цитировать
"link rel='prev'" и "link rel='next'"

про это ничего не знаю.. =))
<a href="http://joomlablog.ru/">JoomlaBlog</a>

*

Оффлайн reasons

  • ****
  • 390
  • [+]6 / [-]0
  • http://dehost.biz
    • Просмотр профиля
ну что все затихли? неужели все готовятся к выборам :)

*

Оффлайн ELLE

предлагаю всем желающим объединиться и дружненько пойти в коммерческий раздел =)

*

Оффлайн Antosha

  • *****
  • 420
  • [+]52 / [-]0
  • Плохо спорить плохо
    • Просмотр профиля
ну хз на счет коммерческого вопроса... это не под конкретный проект делается, это просто сделает Joomla лучше... для всех на всех сайтах..
<a href="http://joomlablog.ru/">JoomlaBlog</a>

*

Оффлайн Antosha

  • *****
  • 420
  • [+]52 / [-]0
  • Плохо спорить плохо
    • Просмотр профиля
чувствую, что сообщество может помочь в таких вопросах типа: "Как поменять цвет ссылки", а если что более серьезное?
<a href="http://joomlablog.ru/">JoomlaBlog</a>

*

Оффлайн skai

  • *****
  • 1230
  • [+]153 / [-]1
  • Пол: Мужской
  • skaiseo
    • Просмотр профиля
Поднимал вопрос уже If-Modified-Since -> 304 - никто помочь не вызвался, сам не смог решить - тему удалил, пользуюсь тем что есть.
..вот и я про то же..
Наполнение вашего сайта - 1т.р. стр. (текст, изображения, мета, перелинковка). Гарантия высокого ранжирования. SEO консультация в подарок.
----------------------------------------------------------------------------------------------

*

Онлайн voland

  • ********
  • 9939
  • [+]520 / [-]101
  • Пол: Мужской
  • СКАЙП утерян! Пишите в телеграм @volandku
    • Просмотр профиля
    • webstudio.pro
..вот и я про то же..
Точное ТЗ составляй, сделаю (ну желательно не бесплатно, а то затянеться... )

*

Оффлайн beliyadm

  • ********
  • 8447
  • [+]1590 / [-]63
  • Пол: Мужской
  • Севастополь == Россия
    • Просмотр профиля
    • записки нетрезвого кодера
И еще вопрос по теме.
Если главная страница представляет собой блог, где каждый день (ну или не каждый) обновляются материалы и страница имеет титл "Имя сайта - что еще статичное" - это правильно?
Не логичней (на примере пары ресурсов) генерить имя страницы в виде "первая новость блога - название сайта (или наоборот), чтобы робот при заходе на главную видел что титл меняется, значит меняется контент
Я не SEO-шник, но раз так делают популярные ресурсы - значит это кому-то надо, не так ли?
Все истины, которые я хочу вам изложить, — бесстыдная ложь.
Записки нетрезвого кодера || -=Joomla FAQ=- || -=все плохо=- || skype: beliyadm_pb

*

Оффлайн ELLE

Не логичней (на примере пары ресурсов) генерить имя страницы в виде "первая новость блога - название сайта (или наоборот), чтобы робот при заходе на главную видел что титл меняется, значит меняется контент
нет, не логичней -> тайтл может смениться, а контент нет.

*

Оффлайн beliyadm

  • ********
  • 8447
  • [+]1590 / [-]63
  • Пол: Мужской
  • Севастополь == Россия
    • Просмотр профиля
    • записки нетрезвого кодера
нет, не логичней -> тайтл может смениться, а контент нет.
ну это мы уже сами устанавливаем, если у нас материал обновился - меняем титл.
Соответственно и паук видит и обновленный кусок титла и новый контент на главной
Все истины, которые я хочу вам изложить, — бесстыдная ложь.
Записки нетрезвого кодера || -=Joomla FAQ=- || -=все плохо=- || skype: beliyadm_pb

*

Оффлайн ELLE

только при чем здесь last-modified и if-modified-since я не понимаю...
если заголовок работает не корректно - он все равно загрузит страницу, даже если она не обновлялась.
а мы например создали новую категорию материалов или старые переписали (и не вывели допустим на главной) - паук пройдется по старью -> а новые страницы не загрузит/не обновит
« Последнее редактирование: 27.11.2011, 06:28:16 от ELLE »

*

Оффлайн beliyadm

  • ********
  • 8447
  • [+]1590 / [-]63
  • Пол: Мужской
  • Севастополь == Россия
    • Просмотр профиля
    • записки нетрезвого кодера
только при чем здесь last-modified и if-modified-since я не понимаю...
Совершенно ни при чем, это оффтоп :)
Просто зацепился и вспомнил два момента, link rel=prev\next и формирование заголовка
Все истины, которые я хочу вам изложить, — бесстыдная ложь.
Записки нетрезвого кодера || -=Joomla FAQ=- || -=все плохо=- || skype: beliyadm_pb

*

Оффлайн Antosha

  • *****
  • 420
  • [+]52 / [-]0
  • Плохо спорить плохо
    • Просмотр профиля
бот не может получить тайтл не загрузив страницу, поэтому проблему не решает...

скорее всего так делают, чтобы быть более привлекательней в выдаче, но зная тормазнутость поисковиков - теряет актуальность...
<a href="http://joomlablog.ru/">JoomlaBlog</a>

*

Оффлайн Antosha

  • *****
  • 420
  • [+]52 / [-]0
  • Плохо спорить плохо
    • Просмотр профиля
ТЗ:

1. На каждый GET запрос сервер должен отдавать страницу с корректной датой last-modified. То есть дата должна указывать на то число и время, когда страница действительно изменялась.

2. Если в запросе GET есть заголовок if-modified-since #дата# необходимо сравнить дату последнего изменения запрашиваемой страницы с датой передаваемой if-modified-since. Если дата в запросе превосходит дату последнего изменения, то страница не передается, а выдается только заголовок c кодом 304, иначе делаем то, что указано в пункте 1.

Вот и все ТЗ. Что тут писать то?
<a href="http://joomlablog.ru/">JoomlaBlog</a>

*

Оффлайн skai

  • *****
  • 1230
  • [+]153 / [-]1
  • Пол: Мужской
  • skaiseo
    • Просмотр профиля
Точное ТЗ составляй, сделаю (ну желательно не бесплатно, а то затянеться... )
- оплачиваю под 1.5.
Наполнение вашего сайта - 1т.р. стр. (текст, изображения, мета, перелинковка). Гарантия высокого ранжирования. SEO консультация в подарок.
----------------------------------------------------------------------------------------------

*

Arock

Точное ТЗ составляй, сделаю (ну желательно не бесплатно, а то затянеться... )
Цена вопроса под 1.7?

*

Оффлайн Taatshi

- оплачиваю под 1.5.
Цена вопроса под 1.7?

Могу войти в долю) В зависимости от цены - свободных сейчас немного... но есть...
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3  /  ОТЗЫВЫ 
Минимальная ставка за платные услуги 1000 рэ Связь: telegram - Taatshi, почта - Taatshi на яндексе.

*

Оффлайн ChaosHead

Логично делать для материалов, а всякие пункты меню не определишь новые они или нет.
А для материалов - это одна строчка кода.
Что-то типа JResponse::setHeader( 'Last-Modified', $yourDateHere );А дату можно брать из даты последнего изменения в материале.

Но вопрос ещё в том, что вы на страницах потом можете все модули поменять или что-то ещё сделать, не касающееся материала, а материал будет по прежнему говорить, что ничего не изменилось.

А, вот! Те же комментарии кто-то напишет, а поисковик не будет индексировать статью заново. Собственно я уже начинаю понимать, почему в Joomla это не сделали.
« Последнее редактирование: 04.12.2011, 18:23:35 от ChaosHead »

*

Оффлайн Виталик

тоже очень давно собирался с этим разобраться

*

Оффлайн Antosha

  • *****
  • 420
  • [+]52 / [-]0
  • Плохо спорить плохо
    • Просмотр профиля
2 ChaosHead, чаще всего изменение каких - то модулей не несут никакой нагрузки, поэтому на это обращать внимание не стоит, тем более если какой-то модуль обновляется чаще чем раз в три дня, то Яндекс просто не успеет его проиндексировать. Ведь все делается только для того, чтобы ускорить индексацию, а следовательно скорость продвижения. Если все - таки хочется реагировать на модули, то надо как-то с кешем колдавать - изменится - значит и страница изменилась.

Когда появляется новый пункт меню, то появляется новая страница, которая попадет в карту сайта. По новым страницам из карты сайта Яндекс ходит быстро. Проблем с измененными страницами....

Как-то тут все-таки надо с кешом колдавть... возможно через хешь страницы можно что-то замутить... Просто надо, чтобы не только в Материалах работало, но и в других компонентах тоже...

Под 1.5 Voland, то взялся за разработку? или нет? Ответьте кто-нибудь...
<a href="http://joomlablog.ru/">JoomlaBlog</a>

*

Онлайн voland

  • ********
  • 9939
  • [+]520 / [-]101
  • Пол: Мужской
  • СКАЙП утерян! Пишите в телеграм @volandku
    • Просмотр профиля
    • webstudio.pro
2 ChaosHead, чаще всего изменение каких - то модулей не несут никакой нагрузки, поэтому на это обращать внимание не стоит, тем более если какой-то модуль обновляется чаще чем раз в три дня, то Яндекс просто не успеет его проиндексировать. Ведь все делается только для того, чтобы ускорить индексацию, а следовательно скорость продвижения. Если все - таки хочется реагировать на модули, то надо как-то с кешем колдавать - изменится - значит и страница изменилась.

Когда появляется новый пункт меню, то появляется новая страница, которая попадет в карту сайта. По новым страницам из карты сайта Яндекс ходит быстро. Проблем с измененными страницами....

Как-то тут все-таки надо с кешом колдавть... возможно через хешь страницы можно что-то замутить... Просто надо, чтобы не только в Материалах работало, но и в других компонентах тоже...

Под 1.5 Voland, то взялся за разработку? или нет? Ответьте кто-нибудь...
да взялся, большую часть сделал пока комп не подвис )))
Но вот с другими компонентами сложнее, какие именно например?

*

Оффлайн Виталик

Но вот с другими компонентами сложнее, какие именно например?
Zoo

А может сделать одно основное расширение и много плагинов для компонентов?