
Для чего нужны canonical ссылки? Представьте, например, что у вас есть блог статей. В блоге используется пагинация – в поиске индексируются все страницы, различные варианты вывода (плиткой, списком, по 9 элементов, по 30 элементов). Хотя, по сути, информативно нас интересует только 1 страница. Каноническая ссылка указывает поисковым системам, какая из страниц основная, а какие – дубли.
Для чего нужны canonical ссылки?Каноническая ссылка указывает поисковым системам, какая из страниц основная, а какие страницы – дубли.
В Joomla также существует большое количество дубликатов страниц. Например, только для 1 статьи могут быть следующие варианты URI:
- /news/115-deshevye-svadebnye-platya-optom
- /news/115-deshevye-svadebnye-platya-optom/
- /news/115-platya-optom
- /component/content/article/115
- /index.php?option=com_content&view=article&id=115
Такое разнообразие связанно с нюансами роутинга самой CMS и принципиально исправить проблему нельзя. Приходится либо делать редиректы, либо использовать канонические ссылки. Второй вариант немного удобнее, поскольку с ним удобно использовать UTM-метки, например.
0. Подготовка. Плагин SEF.
В Joomla 3-й версии плагин SEF генерирует свои canonical ссылки, при чём неправильные. В интернете это явление уже давно прозвали “SEO killer feature”. Ну а пока разработчики Joomla ковыряются в носу, мы её просто отключим. Заходим в файл /plugins/system/sef/sef.php, находим необходимый нам участок кода и комментируем его:
if ($uri->toString() !== $link)
{
//Строку ниже надо закомментировать
//$doc->addHeadLink(htmlspecialchars($link), 'canonical');
}
Далее необходимо зайти на интересующие нас страницы и проверить наличие тега <link rel="canonical" href="...">. Неправильный тег должен исчезнуть.
1. Компонент контента
Материалы и блоги в Joomla изначально довольно "кривые". Давайте попробуем доработать их немного напильником.
1.1. Каноническая ссылка для материалов
Открываем шаблон статьи. Он обычно находится в файле
/templates/<ваш шаблон>/html/com_content/article/default.php. После строки
JHtml::addIncludePath(JPATH_COMPONENT.'/helpers'); добавляем следующие строки:
$doc=JFactory::getDocument();
$doc->addHeadLink(
rtrim(JUri::base(),'/').
JRoute::_(ContentHelperRoute::getArticleRoute($this->item->id,$this->item->catid)),
'canonical','rel','');
1.2. Каноническая ссылка для блога
Открываем шаблон блога. Он обычно находится в файле
/templates/<ваш шаблон>/html/com_content/category/blog.php. После строки
JHtml::addIncludePath(JPATH_COMPONENT.'/helpers'); добавляем следующие строки:
$doc=JFactory::getDocument();
$doc->addHeadLink(
rtrim(JUri::base(),'/').
JRoute::_(ContentHelperRoute::getCategoryRoute($this->category->id)),
'canonical','rel','');
n. Остальные компоненты
Для остальных компонентов все действия аналогичны. Единственное что надо&nbsl;– получить правильный URL.
Комментарии
Всё вышесказанное подходит к любому компоненту. В том числе и к com_tags.
Поднял код одного из проектов на Joomla 3 (во второй версии не было тегов). Вот кусок кода из шаблона:
$urlstring='index.php?option=com_tags&view=tag&id='.$this->item[0]->id;
$urlcanonical=rtrim(JUri::base(), '/').JRoute::_($urlstring);
Однако, если мне не изменяет память, com_tags не поддерживал ЧПУ (SEF URL) в принципе. Поэтому без SEF URL ставить canonical, в общем, бессмысленно. Я, кажется, дописывал поддержку SEF URLов в components/com_tags/router.php. Давно было, не помню деталей. И это была Joomla 3.0 или 3.1. На данный момент уже не актуальная версия.
Вижу, у вас на сайте установлен шаблон tx_meteor.
Для категорий копайте файл: /templates/tx_meteor/html/com_content/category/blog.php
или
/templates/tx_meteor/html/com_content/category/category.php
Если разработчики шаблона не используют каких-либо "хаков" и если ничего структурно не изменилось для Joomla 3.8.1 - должно работать по принципу, описанному в статье.
Мы не хотим убивать русских, но за свою страну, мы готовы на всё.
Только вы можете остановить это мирно, прошу выходите на митинги.
Мы не хотим убивать русских, но за свою страну, мы готовы на всё.
Только вы можете остановить это мирно, прошу выходите на митинги.
Adding comments is temporarily disabled for unregistered users.