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

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Добавляем rel="canonical" в шаблоны материалов Joomla 3.x

 (Прочитано 11388 раз)
0 Пользователей и 1 Гость смотрят эту тему.
AmdAveO
Осваиваюсь на форуме
***

Репутация: +42/-2
Offline Offline

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



« : 24.10.2012, 03:25:50 »

Что такое каноническая страница? Зачем нужно указывать rel="canonical"?
Показать текстовый блок

Сегодня в первый раз открыл для себя Joomla 3.х (сказывается отсутствие времени). Подтолкнула меня к этому Taatshi.

Вобщем поставил себе тестовую версию тройки и понял, что незря отношусь с недоверием к разного рода плагинам.
В этой версии Joomla добавлена генерация ссылки canonical при помощи системного sef-плагина.
Похвальное начинание НО, результат плачевный. Во всех тестовых материалах, где я нашел ссылку canonical, была прописана ссылка на раздел материала, а не на сам материал.
В плане поисковой оптимизации это тихий ужас. Поисковики просто выкинут страницы материалов и оставят в индексе только страницы разделов. (Если конечно я в этом что-то понимаю)

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

Приступим.

Ссылка Canonical для главной страницы.
Внимание! Этот шаг не обязателен. Его можно использовать если на главной странице используется стандартный компонент материалов com_content.
Открываем файл templates/МОЙ ШАБЛОН/index.php
Показать текстовый блок

Ссылка Canonical для страниц компонента материалов (com_content)
Открываем файл templates/МОЙ ШАБЛОН/html/com_content/archive/default.php
Показать текстовый блок

Открываем файл templates/МОЙ ШАБЛОН/html/com_content/article/default.php
Показать текстовый блок

Открываем файл templates/МОЙ ШАБЛОН/html/com_content/categories/default.php
Показать текстовый блок

Открываем файл templates/МОЙ ШАБЛОН/html/com_content/category/blog.php
Показать текстовый блок

Открываем файл templates/МОЙ ШАБЛОН/html/com_content/category/default.php
Показать текстовый блок

Открываем файл templates/МОЙ ШАБЛОН/html/com_content/featured/default.php
Показать текстовый блок

//------------------------------------------------------------------------------------------------------------------------------------------//

Для тех у кого нет файлов-шаблонов в templates/МОЙ ШАБЛОН/html/com_content/ и они не знают где их взять
Показать текстовый блок

Не забываем!
1. Следить за обновлениями поста. Возможны правки!
2. Нашли ошибку? Пишите сюда, попробуем разобраться.
3. При обновлении заменяем весь код находящийся между строками
Код:
// ------------ Start Canonical-Mod
и
Код:
// ------------ End Canonical-Mod
« Последнее редактирование: 25.10.2012, 22:09:16 от AmdAveO » Записан
 
Taatshi
Support Team
*****

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

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


« Ответ #1 : 24.10.2012, 08:32:27 »

Артур, ты забыл написать, как избавляться от родного rel canonical

У новичков могут возникать вопросы по этому поводу.
Записан
AmdAveO
Осваиваюсь на форуме
***

Репутация: +42/-2
Offline Offline

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



« Ответ #2 : 24.10.2012, 13:31:07 »

Лена, родной canonical сбрасывается автоматом.
Эти строки в коде
Код:
// Удаляем ссылку каноникал добавленную системным sef-плагином
foreach (JFactory::getDocument()->_links as $key=>$link) {
if (($link['relation'] == 'canonical')) {
unset(JFactory::getDocument()->_links[$key]);
break;
}
}

Цитата: frisian
1. как бы ничего что даже разработчики не рекомендуют сейчас использовать Joomla 3 на боевых проэктах?
Да как бы и ничего. Только зачем тогда в народ выкладывать, да еще релизом называть?
Или ты тут в защитников решил поиграть? Только я не прокурор. Roll Eyes

Цитата: frisian
2. Почему не написать свой плагин? зачем столько лишних телодвижений?
За чем дело стало? Пиши свой плагин и не будет лишних телодвижений. Wink
Записан
Fedor Vlasenko
Профи
********

Репутация: +698/-5
Offline Offline

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


Все начинается с Value


« Ответ #3 : 24.10.2012, 17:58:05 »

AmdAveO Ссылка Canonical для главной страницы
JSite::getMenu()->getActive() == JSite::getMenu()->getDefault()
Правильно так:
JSite::getMenu()->getActive()->id == JSite::getMenu()->getDefault()->id
и опять же это частный случай. если ссылка будет формироваться с использованием  query строки то и контент может быть разный. И не обязательно материалом. Мы же данному контенту, может быть совсем разному и не связанному задаем canonical
Далее $docstart = JRequest::getInt('start',0);
А если не start. Компоненты разные бывают и могут использовать разную пагинацию. Вместо JRequest следует мне кажется использовать JInput
$doc->addHeadLink($link, 'canonical'); И плагин тогда стоит отключать родной.
Без каких либо обид. Но плагин здесь уместнее. А делать смысла нет. Разработчики надеюсь сами исправят
Записан
AmdAveO
Осваиваюсь на форуме
***

Репутация: +42/-2
Offline Offline

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



« Ответ #4 : 24.10.2012, 20:01:57 »

frisian, тут как бы два варианта развития событий
1. Тебе оно надо и ты берешь.
2. Тебе оно НЕ надо и ты НЕ берешь.
Как я вижу с выбором у тебя проблем не возникло. Так в чем еще проблемы, у тебя что-то отобрали?

Poznakomlus
Конструктивно.
Можно с id, можно и без. Хотя согласен, с id будет более правильно.
В JInput не вижу особой выгоды. А она есть?
Да, по поводу пагинатора на главной тоже думал, но поскольку речь идет о родном компоненте материалов Joomla, решил его оставить.
Сделаю пометку о других компонентах.

Еще раз о плагине.
1. Он уже есть. Его исправление это вопрос времени.
2. Плагины зависят от приоритета их исполнения. Сдается мне, что это и есть причина косяка в родном плагине. Хотя, могу и ошибаться.
3. Не известно как поведет себя такой плагин с другими компонентами. Не появится ли например в ZOO, две разных ссылки canonical?

Вобщем, у кого есть желание и время, делайте плагин, или дорабатывайте уже имеющийся. Я всегда за!
Только пустословием заниматься не стоит.
Записан
Langoliers
Завсегдатай
*****

Репутация: +67/-2
Offline Offline

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


Если б Я изучал людей, то был бы паразитологом


« Ответ #5 : 24.10.2012, 20:29:19 »

Большое спасибо! А то у меня пять страниц из индекса выпало, и хоть Я их добавил в вебмастере снова, вовсе убрав rel="canonical" из плагина, восстанавливаются они уже неделю. Такое ощущение, что Яндекс вообще в последнее время работать не хочет.
frisian, ну так напишите плагин, чего хейтера включаете то? Или скажите как родной исправить. Человек в любом случае старался, так что по моему тут не оскорблять надо, а скорее (если это нужно) поправить.
Записан
AmdAveO
Осваиваюсь на форуме
***

Репутация: +42/-2
Offline Offline

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



« Ответ #6 : 24.10.2012, 20:41:21 »

Из всего написанного тобой, я пока вижу толк только в этом
Цитата: frisian
ну кроме того что скоро JRequest вообще будет удален наверно выгоды нет..
За что тебе огромное спасибо!
Каюсь, я не живу в багтрекере Joomla, и не слежу за их новостями. Как-то вот так сложилось.

Есть еще толковые предложения?
« Последнее редактирование: 24.10.2012, 22:35:13 от ELLE » Записан
Fedor Vlasenko
Профи
********

Репутация: +698/-5
Offline Offline

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


Все начинается с Value


« Ответ #7 : 25.10.2012, 01:39:09 »

frisian не горячись. Веришь я здесь усмотрел применение твоей строчки кода
if(JMenuSite::getInstance('site')->getActive()->home) здесь наверно ей самое место для первого случая
Записан
AmdAveO
Осваиваюсь на форуме
***

Репутация: +42/-2
Offline Offline

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



« Ответ #8 : 25.10.2012, 12:49:56 »

Poznakomlus
Уверен, что все пользователи используют "home" в качестве алиаса для главной страницы? Я встречал и другие.
Или тут "JMenuSite::getInstance('site')->getActive()->home" не спрашивается алиас?
Может всетаки тут подсмотреть?
« Последнее редактирование: 25.10.2012, 13:25:28 от AmdAveO » Записан
AmdAveO
Осваиваюсь на форуме
***

Репутация: +42/-2
Offline Offline

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



« Ответ #9 : 25.10.2012, 20:15:04 »

Цитата: Poznakomlus
Уже смотрел. Правда не увидел пока причины того, почему это if ($menu->getActive()!= $menu->getDefault()) не работает.
Я сейчас говорю не о том, что лучше, а о том, в каких случаях оно не работает. Кручу это условие на локале и проблемы пока не встретил.

Цитата: Poznakomlus
AmdAveO смотрите FAQ форума Joomla 2.5 - проверка на главную страницу
кто сказал, что это алиас <?php echo '<pre>'.var_dump(JMenuSite::getInstance('site')->getActive()).'</pre>'; ?>
Никто не сказал. Я спросил.

Цитата: Poznakomlus
техническая информация которую вы привели не актуальная
Это просто утверждение или факт?

Цитата: Poznakomlus
ну и вы должны понимать, что вам не главная нужна а все страницы которые "цепляются" к активному меню главной
Стал бы я спрашивать про алиас не понимая этого?

Не имеет абсолютно никакого смысла. Хозяин сайта сам должен решать какой странице добавить тег (на подобии description)
Абсолютно не согласен с этим.
Я знаю с десяток авторов которых абсолютно не волнует техническая сторона работы.
Некоторых не заставишь и description прописать, а не то чтобы еще делать выбор ссылки canonical.
Тут просто нужно сделать возможным выбор подключения/отключения canonical в плагине.
Записан
Fedor Vlasenko
Профи
********

Репутация: +698/-5
Offline Offline

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


Все начинается с Value


« Ответ #10 : 01.11.2012, 00:26:57 »

Наверно стоит объяснить почему порнография.
1. С каких таких побуждений мы привязываем ссылки к меню
2. Может стоит посмотреть в меню как ссылки формируются. Найди 3 отличия
Открываем файл templates/МОЙ ШАБЛОН/html/com_content/categories/default.php
...
JFactory::getDocument()->addHeadLink('http://' . $_SERVER['SERVER_NAME'] . JRoute::_(ContentHelperRoute::getCategoryRoute($this->parent->id)). $docpagenr, 'canonical', 'rel', '');
...
Открываем файл templates/МОЙ ШАБЛОН/html/com_content/category/blog.php
...
JFactory::getDocument()->addHeadLink('http://' . $_SERVER['SERVER_NAME'] . JRoute::_(ContentHelperRoute::getCategoryRoute($this->category->id)). $docpagenr, 'canonical', 'rel', '');
...
Открываем файл templates/МОЙ ШАБЛОН/html/com_content/category/default.php
...
JFactory::getDocument()->addHeadLink('http://' . $_SERVER['SERVER_NAME'] . JRoute::_(ContentHelperRoute::getCategoryRoute($this->category->id)). $docpagenr, 'canonical', 'rel', '');
« Последнее редактирование: 01.11.2012, 02:05:46 от Poznakomlus » Записан
AmdAveO
Осваиваюсь на форуме
***

Репутация: +42/-2
Offline Offline

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



« Ответ #11 : 01.11.2012, 21:20:49 »

Poznakomlus
Это объяснение или просто вопросы без вопросительных знаков?
Честно говоря, не понятна их цель.
Записан
Fedor Vlasenko
Профи
********

Репутация: +698/-5
Offline Offline

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


Все начинается с Value


« Ответ #12 : 01.11.2012, 21:46:20 »

это говорит о том, что вы привели решение совсем не понимая, что и о чем пишите
разберитесь для начала как формируются ссылки в Joomla потом выдавайте их за решения
Ссылка на документ может формироваться по разному.
Документ привязан к меню(ваш вариант). Категория/документ(ContentHelperRoute::getArticleRoute($id, $catid, $this->language)Wink? документ ('index.php?option=com_content&view=article&id='.$id)
Так вот, два последних варианта наиболее больше соответствуют каноническим ссылкам/ Но это никак не вариант сменю. Про категории уже написал выше
Записан
Taatshi
Support Team
*****

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

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


« Ответ #13 : 01.11.2012, 22:02:36 »

Poznakomlus, если у Вас есть лучший вариант - выложите его во всеобщее пользование. А так в Ваших постах я не вижу особого смысла. Мы все делаем как умеем - кто-то лучше, кто-то хуже... Но сидеть и критиковать уже готовую работу не имея в наличии альтернативного варианта - как-то не особо красиво получается.
Записан
Fedor Vlasenko
Профи
********

Репутация: +698/-5
Offline Offline

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


Все начинается с Value


« Ответ #14 : 17.11.2012, 02:32:59 »

Канонические ссылки для Joomla 3

Плагин специально повесил на событие onBeforeCompileHead, чтобы не отслеживать порядок размещения по отношению к системному. Он обрабатывает onAfterRoute() (системный). Присоединяйся, ведь плагин нужен будет всем. Конструктивная критика всегда приветствуется
« Последнее редактирование: 19.11.2012, 12:20:23 от smart » Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

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