Форум русской поддержки Joomla!® CMS
07.12.2016, 14:35:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1] 2 3 4 5 6 7 8 9 10 11 12 13   Вниз
  Добавить закладку  |  Печать  
Автор

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

 (Прочитано 53856 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Antosha
Завсегдатай
*****

Репутация: +52/-0
Offline Offline

Сообщений: 411


Плохо спорить плохо


« : 21.11.2011, 03:22:59 »

Всем привет.

Столкнулся с такой ситуацией, что многие не знают об этих параметрах, а самое главное и них не знают или не хотят реализовывать разработчики 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, 16:48:33 от ELLE » Записан
ELLE
Support Team
*****

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #1 : 21.11.2011, 06:06:33 »

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

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

Репутация: +1566/-61
Offline Offline

Пол: Мужской
Сообщений: 8110


Севастополь == Россия


« Ответ #2 : 21.11.2011, 06:26:47 »

Вы про параметр Last-Modified? Так он вроде прекрасно вставляется с момента последнего обновления страницы, например только что обновил текст и заголовок мне отдал с страницы контента
Код
Last-Modified Mon, 21 Nov 2011 02:24:30 GMT
Далее иду на страницу типа блога с этим содержимым и вижу
Код
Last-Modified	Mon, 21 Nov 2011 02:25:52 GMT
Я в чем-то не прав или не понимаю суть?


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

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #3 : 21.11.2011, 06:28:19 »

beliyadm, а проверь любую страницу, которую 100 лет не обновлял Wink
Записан
beliyadm
Профи
********

Репутация: +1566/-61
Offline Offline

Пол: Мужской
Сообщений: 8110


Севастополь == Россия


« Ответ #4 : 21.11.2011, 06:31:18 »

beliyadm, а проверь любую страницу, которую 100 лет не обновлял
хм, везде вижу дату последней модификации как текущее время, при этом Expires = Mon, 1 Jan 2001 00:00:00 GMT

Что плохого в том, что каждый раз при обращении поисковика на страницу он видит, что она обновлена сегодня?
Записан
ELLE
Support Team
*****

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #5 : 21.11.2011, 06:35:33 »

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

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

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

Репутация: +153/-1
Offline Offline

Пол: Мужской
Сообщений: 1230


skaiseo


« Ответ #6 : 21.11.2011, 09:36:53 »

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

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

Записан
Antosha
Завсегдатай
*****

Репутация: +52/-0
Offline Offline

Сообщений: 411


Плохо спорить плохо


« Ответ #7 : 21.11.2011, 14:09:42 »

Если на всех страницах last-motified будет стоять текущая дата, то поисковик свята веря в ваши даты будет качать эти страницы, но поняв, что они на самом деле не меняются и вы его попросту обманываете, перестанет обращать внимание на этот заголовок и все будет по старому. То есть если last-motified = текущая дата равносильно тому, что его вообще нету...

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

Код
class JCachePage extends JCache


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

Код
	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;
Код
	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

Заранее, спасибо.
Записан
Antosha
Завсегдатай
*****

Репутация: +52/-0
Offline Offline

Сообщений: 411


Плохо спорить плохо


« Ответ #8 : 21.11.2011, 14:10:18 »

Цитировать
"link rel='prev'" и "link rel='next'"

про это ничего не знаю.. =))
Записан
reasons
Давно я тут
****

Репутация: +6/-0
Offline Offline

Сообщений: 390

http://dehost.biz


« Ответ #9 : 22.11.2011, 06:31:56 »

ну что все затихли? неужели все готовятся к выборам Azn
Записан
ELLE
Support Team
*****

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #10 : 22.11.2011, 14:44:03 »

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

Репутация: +52/-0
Offline Offline

Сообщений: 411


Плохо спорить плохо


« Ответ #11 : 22.11.2011, 21:00:13 »

ну хз на счет коммерческого вопроса... это не под конкретный проект делается, это просто сделает Joomla лучше... для всех на всех сайтах..
Записан
Antosha
Завсегдатай
*****

Репутация: +52/-0
Offline Offline

Сообщений: 411


Плохо спорить плохо


« Ответ #12 : 24.11.2011, 16:45:20 »

чувствую, что сообщество может помочь в таких вопросах типа: "Как поменять цвет ссылки", а если что более серьезное?
Записан
skai
Moderator
*****

Репутация: +153/-1
Offline Offline

Пол: Мужской
Сообщений: 1230


skaiseo


« Ответ #13 : 24.11.2011, 18:56:21 »

Поднимал вопрос уже If-Modified-Since -> 304 - никто помочь не вызвался, сам не смог решить - тему удалил, пользуюсь тем что есть.
..вот и я про то же..
Записан
voland
Профи
********

Репутация: +487/-86
Online Online

Пол: Мужской
Сообщений: 8716


любит наш народ всякое гавно...


« Ответ #14 : 24.11.2011, 19:14:37 »

..вот и я про то же..
Точное ТЗ составляй, сделаю (ну желательно не бесплатно, а то затянеться... )
Записан
beliyadm
Профи
********

Репутация: +1566/-61
Offline Offline

Пол: Мужской
Сообщений: 8110


Севастополь == Россия


« Ответ #15 : 27.11.2011, 03:59:16 »

И еще вопрос по теме.
Если главная страница представляет собой блог, где каждый день (ну или не каждый) обновляются материалы и страница имеет титл "Имя сайта - что еще статичное" - это правильно?
Не логичней (на примере пары ресурсов) генерить имя страницы в виде "первая новость блога - название сайта (или наоборот), чтобы робот при заходе на главную видел что титл меняется, значит меняется контент
Я не SEO-шник, но раз так делают популярные ресурсы - значит это кому-то надо, не так ли?
Записан
ELLE
Support Team
*****

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #16 : 27.11.2011, 04:08:31 »

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

Репутация: +1566/-61
Offline Offline

Пол: Мужской
Сообщений: 8110


Севастополь == Россия


« Ответ #17 : 27.11.2011, 04:15:01 »

нет, не логичней -> тайтл может смениться, а контент нет.
ну это мы уже сами устанавливаем, если у нас материал обновился - меняем титл.
Соответственно и паук видит и обновленный кусок титла и новый контент на главной
Записан
ELLE
Support Team
*****

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #18 : 27.11.2011, 04:24:04 »

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

Репутация: +1566/-61
Offline Offline

Пол: Мужской
Сообщений: 8110


Севастополь == Россия


« Ответ #19 : 27.11.2011, 04:35:51 »

только при чем здесь last-modified и if-modified-since я не понимаю...
Совершенно ни при чем, это оффтоп Azn
Просто зацепился и вспомнил два момента, link rel=prev\next и формирование заголовка
Записан
Antosha
Завсегдатай
*****

Репутация: +52/-0
Offline Offline

Сообщений: 411


Плохо спорить плохо


« Ответ #20 : 28.11.2011, 07:27:35 »

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

скорее всего так делают, чтобы быть более привлекательней в выдаче, но зная тормазнутость поисковиков - теряет актуальность...
Записан
Antosha
Завсегдатай
*****

Репутация: +52/-0
Offline Offline

Сообщений: 411


Плохо спорить плохо


« Ответ #21 : 28.11.2011, 07:32:35 »

ТЗ:

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

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

Вот и все ТЗ. Что тут писать то?
Записан
skai
Moderator
*****

Репутация: +153/-1
Offline Offline

Пол: Мужской
Сообщений: 1230


skaiseo


« Ответ #22 : 28.11.2011, 08:51:35 »

Точное ТЗ составляй, сделаю (ну желательно не бесплатно, а то затянеться... )
- оплачиваю под 1.5.
Записан
Arock
Гость
« Ответ #23 : 04.12.2011, 15:44:28 »

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

Репутация: +430/-3
Offline Offline

Пол: Женский
Сообщений: 4718

Мама, я снова верстал во сне...


« Ответ #24 : 04.12.2011, 15:49:44 »

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

Могу войти в долю) В зависимости от цены - свободных сейчас немного... но есть...
Записан
ChaosHead
Профи
********

Репутация: +381/-10
Offline Offline

Пол: Мужской
Сообщений: 4392



« Ответ #25 : 04.12.2011, 16:09:33 »

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

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

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

Репутация: +123/-0
Offline Offline

Пол: Мужской
Сообщений: 1209



« Ответ #26 : 04.12.2011, 18:39:22 »

тоже очень давно собирался с этим разобраться
Записан
Antosha
Завсегдатай
*****

Репутация: +52/-0
Offline Offline

Сообщений: 411


Плохо спорить плохо


« Ответ #27 : 04.12.2011, 23:50:42 »

2 ChaosHead, чаще всего изменение каких - то модулей не несут никакой нагрузки, поэтому на это обращать внимание не стоит, тем более если какой-то модуль обновляется чаще чем раз в три дня, то Яндекс просто не успеет его проиндексировать. Ведь все делается только для того, чтобы ускорить индексацию, а следовательно скорость продвижения. Если все - таки хочется реагировать на модули, то надо как-то с кешем колдавать - изменится - значит и страница изменилась.

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

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

Под 1.5 Voland, то взялся за разработку? или нет? Ответьте кто-нибудь...
Записан
voland
Профи
********

Репутация: +487/-86
Online Online

Пол: Мужской
Сообщений: 8716


любит наш народ всякое гавно...


« Ответ #28 : 04.12.2011, 23:52:41 »

2 ChaosHead, чаще всего изменение каких - то модулей не несут никакой нагрузки, поэтому на это обращать внимание не стоит, тем более если какой-то модуль обновляется чаще чем раз в три дня, то Яндекс просто не успеет его проиндексировать. Ведь все делается только для того, чтобы ускорить индексацию, а следовательно скорость продвижения. Если все - таки хочется реагировать на модули, то надо как-то с кешем колдавать - изменится - значит и страница изменилась.

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

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

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

Репутация: +123/-0
Offline Offline

Пол: Мужской
Сообщений: 1209



« Ответ #29 : 04.12.2011, 23:59:16 »

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

А может сделать одно основное расширение и много плагинов для компонентов?
Записан
Страниц: [1] 2 3 4 5 6 7 8 9 10 11 12 13   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet