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

hensler

  • Осваиваюсь на форуме
  • 44
  • 0 / 0
Второй раз сталкиваюсь с проблемой. После включения ЧПУ индексация замедляется и в выдаче поисковиков сайт проваливается за пределы видимости.

Первый раз (Joomla 1.0.08) просто отключил ЧПУ, т.к. проект был коммерческий и ждать когда сайт вернется в выдаче на свои места не мог. После отключения все восстановилось за пару недель.

Второй раз при переходе с Nuka на Joomla и переносе сайта с поддомена на домен 2 недели не включал ЧПУ и с индекацией и с выдачей потихоньку шло к старым результатам. Решил вклюить ЧПУ и честно дождаться полной переиндексации. Фиг. За 2 м-ца проиндексировано чуть больше 1000 страниц. Да и эта цифра то дойдет до 1500, то опять спустится. Если учесть 900 фотографий в галерее + форум + 10 новостей ежедневно + 400 старых статей + новые и т.д. - мало. Но даже проиндексированное, в выдаче ушло за горизонт.

Ни хрена не понимаю. Сайт yarcenter.ru
*

Batman

  • Новичок
  • 4
  • 0 / 0
при включении ЧПУ, получается что у вас одна и та же страница может быть доступна по двум адресам, н-р,

/joomla/index.php?option=com_content&task=blogsection&id=8&Itemid=43

и

/joomla/content/blogsection/8/43

это две абсолютно одинаковые страницы (не знаю правильно ли составил вид второй УРЛ, но главное - идея).

Как мне говорили, для оптимизации необходимо чтобы страница была уникальной в пределах данного сайта.
Возможно это и влечет такие странности?
*

smart

  • Администратор
  • 6485
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
при включении ЧПУ, получается что у вас одна и та же страница может быть доступна по двум адресам
на самом деле, иногда получается что более чем две... это происходит потому, что поисковики, иногда, найдя ссылку типа /222/1/, проверяют сразу же ссылку /222/2/, а так как часто, в SEF-ссылках последним параметром идет именно Itemid (параметр фактически влияющий только на pathway), то получается, что поисковик запоминает довольно много ссылок на одну и ту же статью, но с разными Itemid. Обнаруживается это, как правило, случайно: когда пользователь открывает материал, а в pathway указана совсем другая категория (потому как Itemid «левый») или же при анализе проиндексированных страниц. Однако, несмотря на наличие таких дубликатов, я не раз видел весьма неплохо проиндексированные сайты на Joomla, использующие стандартный SEF.

А какие вы видите пути решения данной проблемы? Если честно мне не нравится такая фича в джумле. Несколько ссылок на один материал это бардак.
*

smart

  • Администратор
  • 6485
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
А какие вы видите пути решения данной проблемы? Если честно мне не нравится такая фича в джумле. Несколько ссылок на один материал это бардак.
Например, отказаться от SEF или воспользоваться решениями сторонних разработчиков (например OpenSEF, хотя это и даст нагрузку на БД).

Можно попробовать написать свое решение для генерации SEF ссылок, тоже не сложно (я в свое время делал такое для www.n-admin.com).

Теоретически, можно написать системный мамбот, который будет отслеживать обращения к материалам (т.е. когда option=com_content и task=view) и проверять соотвествие Itemid, переданного параметром, реальному Itemid материала. И в случае неверного значения — делать редирект с 301 кодом ошибки. Если при этом граммотно задействовать механизм кэширования, то по идее нагрузка на БД будет небольшая.

Спасибо. Оба решения вроде понятны. Я пользуюсь OpenSEF но внутрь не залезал. Он дает возможность обрабатывать такого рода запросы и выдвать соответствующий хедер (например 404)?

На счет бота идея тоже интересная наверное буду ее реализовывать.
*

smart

  • Администратор
  • 6485
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
На счет бота идея тоже интересная наверное буду ее реализовывать.
я думаю такое расширение наверняка будет полезно всему сообществу, поэтому если нужна будет какая-либо помощь — я помогу

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

smart

  • Администратор
  • 6485
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Вы бы немогли дать ссылок на любые стистемные маботы чтоб можно было по сорцам разобрася что к чему.
например мой мамбот OptimizeTables. Разница от обычных мамботов небольшая: используются события OnStart или OnAfterStart (можешь посмотреть где они вызываются в index.php), и им, в отличие от мамботов группы content, не передаются никакие параметры.

Судя по фрагменту кода из index.php, для нашей задачи логичнее использовать событие OnAfterStart:
Код
// trigger the onAfterStart events
$_MAMBOTS->trigger( 'onAfterStart' );

// checking if we can find the Itemid thru the content
if ( $option == 'com_content' && $Itemid === 0 ) {
$id = intval( mosGetParam( $_REQUEST, 'id', 0 ) );
$Itemid = $mainframe->getItemid( $id );
}
с таким расчетом, чтобы второй условный блок уже не отрабатывался (т.е. самому вычислять Itemid для материала и заносить его в глобальную переменную

Спасибо! Буду изучаать.

Кстати а как вы считаете какие дулжен действовать мамбот при несовпадении заданного Itemid и реального Itemid? Мне кажется будет достатчное
Код
header("HTTP/1.0 404 Not Found");
или лучше всетаки перенаправлять куданибудь?
*

smart

  • Администратор
  • 6485
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
или лучше всетаки перенаправлять куданибудь?
я думаю следует сначала пытаться вычислить правильный, если вычислить получилось, то делать именно редирект на правильную копию с кодом 301 (Moved Permanently)

Написал по быстрому мамбот. Все вроде работает как надо.
Но вот меня смущает следующее:
1) нахрена в методае getItemid в том случие если после поиска Itemid в бд ничего не найдена он просто берет и возвращает Itemid из запроса.
2) тот же getItemid упорно нехочет находит Itemid если id == 0 . В сорцах дальше копатся нестал просто в сон клонит но всетаки странно.

А так все работает пользуйтесь кому надо (;

[вложение удалено Администратором]
*

smart

  • Администратор
  • 6485
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Написал по быстрому мамбот. Все вроде работает как надо.
есть несколько небольших замечаний и пожеланий:

1. помимо проверки option, надо проверять еще и task, бо иначе это будет отрабатываться не только для режима просмотра материала
2. строчка:
	
	
$request_itemid=mosGetParam($_REQUEST'Itemid'false);



весьма непонятна, зачем в качестве значения по умолчанию давать булевскую переменную, когда лучше дать 0 или null. Да и лучше в этом случае обернуть результат mosGetParam в intval - мы же точно знаем, что там должно быть число:
	
	
$request_itemid intvalmosGetParam$_REQUEST'Itemid') );



3. вместо строчки:

	
	
$url=$mosConfig_live_site.'/index.php?option='.$option.'&task='.$task.'&id='.$id.'&Itemid='.$real_itemid;


лучше написать так:

	
	
$url=sefRelToAbs('index.php?option='.$option.'&task='.$task.'&id='.$id.'&Itemid='.$real_itemid);


4. И еще, функция getItemid принимает дополнительный набор параметров, для снижения количества запросов к БД, поэтому наверное имеет смысл, строчку:

	
	
$real_itemid $mainframe->getItemid$id );



заменить на вот такую конструкцию:

	
	
$bs 
	
$mainframe->getBlogSectionCount();
	
	
$bc 
	
$mainframe->getBlogCategoryCount();
	
	
$gbs 
	
$mainframe->getGlobalBlogSectionCount();
	
	
$real_itemid $mainframe->getItemid$id00$bs$bc$gbs );



С замечаниями и пожелаиями полностью согласен, подправил (:
Внес изменения, тепеь все работает как надо. Спасибо за помощь.

[вложение удалено Администратором]
*

smart

  • Администратор
  • 6485
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
С замечаниями и пожелаиями полностью согласен, подправил (:
Внес изменения, тепеь все работает как надо. Спасибо за помощь.
все равно есть несколько недочетов:

1. после строчки

$id=intval(mosGetParam($_REQUEST'id'0));

переменная $id никогда не будет равна false, поэтому сравнение
if ( $id===false ) {

надо заменить на
if ( $id===) {


2. код:
	
	
	
	
return 
true;
	
	
	
	
exit();


приведет к завершению работы ВСЕГО скрипта, а не только одной функции, так что достаточно просто return true;

Да действительно... false убрал а проверку его забыл подпраить... на счет exit это да я поле отладки забыл убрать.
*

smart

  • Администратор
  • 6485
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Да действительно... false убрал а проверку его забыл подпраить... на счет exit это да я поле отладки забыл убрать.
воот... теперь в предыдущих мессагах давай наверно прибьем старые версии, выложи новую, а я утром повешу анонс на joomlaportal.ru

Кстати вы еще упоминали о првоерке task... на предмет чего вы именно хотели делать проверку? $task=='view' ? или что иное?

И еще
Код
if ( $id===0 ) {
Такаое ветвление некоректно т.к id может быть равным нулю... недо просто првоерять пусто ли $id или нет. Вы согласны?
Тоесть
сделать
Код
$id=mosGetParam($_REQUEST, 'id', null);
Код
if ( $id===null ) {
« Последнее редактирование: 24.07.2006, 01:16:44 от pav »
*

smart

  • Администратор
  • 6485
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Такаое ветвление некоректно т.к id может быть равным нулю...
пустым быть не может, после intval мы точно имеем integer... а нулевого значения у идентификатора статьи так же быть не может. Поэтому если там 0, это неверная ссылка, и значит надо или 404, или редирект на главную с кодом 301 (что тоже кстати допустимо)

Кстати вы еще упоминали о првоерке task... на предмет чего вы именно хотели делать проверку? $task=='view' ? или что иное?
да, в то же условие, где мы проверяем option... чтобы валидация Itemid производилась только для режима просмотра конкретного материала (ну нет смысла этого делать в блогах или таблицах категорий)

Цитировать
пустым быть не может, после intval мы точно имеем integer... а нулевого значения у идентификатора статьи так же быть не может. Поэтому если там 0, это неверная ссылка, и значит надо или 404, или редирект на главную с кодом 301 (что тоже кстати допустимо)
Почему? У меня вот есть ссылка рабочая index.php?option=com_content&task=blogsection&id=0&Itemid=9 здесь как вы видете id равен нулю.
Цитировать
ну нет смысла этого делать в блогах или таблицах категорий
Почему нет? Обоснуйте...
*

smart

  • Администратор
  • 6485
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Почему нет? Обоснуйте...
потому что эти страницы часто обновляются, и их содержимое не так важно, как содержимое самих материалов...

Так но фель создания мамбота в том чтобы для любых материалов на сайте была одна единая ссылка. Так? Если так то я думаю что все что связанно с com_content должно обрабатыватся мамботом.
*

smart

  • Администратор
  • 6485
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Так но фель создания мамбота в том чтобы для любых материалов на сайте была одна единая ссылка. Так? Если так то я думаю что все что связанно с com_content должно обрабатыватся мамботом.
но com_content обрабатывает не только материалы, но и категории и разделы, а мне кажется это уже второстепенная информация. на самом деле я не особо настаиваю на такой проверке, но мне кажется это было бы уместно с точки зрения оптимизации и снижения нагрузки на БД

Можно сделать чтоб пользователь сам задавал что конкретно из com_content подвергалось проверке в настройки мамбота.
« Последнее редактирование: 24.07.2006, 02:34:11 от pav »
*

smart

  • Администратор
  • 6485
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Можно сделать чтоб это опционально настраивалось из настройки мамбота.
учитывая тот факт, что в мамбот параметры извне не передаются, получение параметров мамбота потребует дополнительного запроса к БД, а это мне кажется излишне... мы выиграем не много... ладно, давай пока не будем ставить такую проверку, посмотрим что пользователи скажут...
*

hensler

  • Осваиваюсь на форуме
  • 44
  • 0 / 0
...
и

/joomla/content/blogsection/8/43
...
С дублированием понятно, но может ли и еще один момент влиять - у меня все ссылки имеют слэш на конце.
/joomla/content/blogsection/8/43/

Т.е. если ссылка вида /joomla/index.php?option=com_content&task=blogsection&id=8&Itemid=43 ведет с точки зрения паука прямо к документу, то с ЧПУ в конце паука посылают поискать за слэшем пустоту. Во всяком случае судя по рекомендациям Рамблера (думаю и у Яндекса так же)
Цитировать
Следует также иметь в виду, что с точки зрения HTML записи типа:
<a href="directory" ...> и
<a href="directory/" ...> ("слэш" в конце href)
являются разными ссылками. Обычно при запросе по первой ссылке робот получит редирект на вторую, а значит извлечет сам документ при обращении к Вашему серверу только на следующем проходе. Тем самым Вы замедляете индексацию Вашего сайта.
http://www.rambler.ru/doc/recommendations.shtml
Или я уже на воду дую?

Жду окончательный вариант бота.
P.S. Сколько запросов бот добавит?
« Последнее редактирование: 24.07.2006, 02:49:45 от hensler »

Все на этом и порешим. Вот окончательный вариант... вроде (;

[вложение удалено Администратором]
*

smart

  • Администратор
  • 6485
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Или я уже на воду дую?
мне кажется да, потому как судя по рекомендациям, слеш в конце нужен... что и получаем мы в результате использования стандартного SEF

P.S. Сколько запросов бот добавит?
от 1 до 7 запросов, в зависимости от типа материала, и заполненности меню ссылками на категории и разделы... в следующую версию мамбота можно добавить поддержку кэширования, чтобы снизить нагрузку на БД
*

hensler

  • Осваиваюсь на форуме
  • 44
  • 0 / 0
Поставил. Добавилось 4 запроса.
На данный момент проиндексировано  Яндексом: 2 092 - стандартно, 1068 - с учетом зеркал
Посмотрим, как изменится. ИМХО если все правильно, первая цифра должна или остановиться или расти вровень со второй (до момента обновления БД Яндекса), а потом всё равно сравняться. На другом сайте (без ЧПУ) они равны.
« Последнее редактирование: 24.07.2006, 04:03:21 от hensler »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться