Как добавить canonical ссылки в компоненты Joomla

    Как добавить canonical ссылки в компоненты Joomla

    Для чего нужны 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, находим необходимый нам участок кода и комментируем его:

    1. if ($uri->toString() !== $link)
    2. {
    3.   //Строку ниже надо закомментировать
    4.   //$doc->addHeadLink(htmlspecialchars($link), 'canonical');
    5. }

    Далее необходимо зайти на интересующие нас страницы и проверить наличие тега <link rel="canonical" href="...">. Неправильный тег должен исчезнуть.

    1. Компонент контента

    Материалы и блоги в Joomla изначально довольно "кривые". Давайте попробуем доработать их немного напильником.

    1.1. Каноническая ссылка для материалов

    Открываем шаблон статьи. Он обычно находится в файле
    /templates/<ваш шаблон>/html/com_content/article/default.php. После строки
    JHtml::addIncludePath(JPATH_COMPONENT.'/helpers'); добавляем следующие строки:

    1. $doc=JFactory::getDocument();
    2. $doc->addHeadLink(
    3.    rtrim(JUri::base(),'/').
    4.    JRoute::_(ContentHelperRoute::getArticleRoute($this->item->id,$this->item->catid)),
    5.    'canonical','rel','');

    1.2. Каноническая ссылка для блога

    Открываем шаблон блога. Он обычно находится в файле
    /templates/<ваш шаблон>/html/com_content/category/blog.php. После строки
    JHtml::addIncludePath(JPATH_COMPONENT.'/helpers'); добавляем следующие строки:

    1. $doc=JFactory::getDocument();
    2. $doc->addHeadLink(
    3.    rtrim(JUri::base(),'/').
    4.    JRoute::_(ContentHelperRoute::getCategoryRoute($this->category->id)),
    5.    'canonical','rel','');

    n. Остальные компоненты

    Для остальных компонентов все действия аналогичны. Единственное что надо&nbsl;– получить правильный URL.

    Комментарии

    01.10.2016 09:49:56
    Avatar of Лайт СолюшенЛайт Солюшен
    Спасибо огромное за полезный материал. Занимаемся продвижением сайтов и часто сталкиваемся с данной проблемой в рамках внутренней сео оптимизации.
    02.03.2018 12:20:24
    Avatar of СашаСаша
    А как для компонента com_tags сделать каноническую ссылку?
    05.03.2018 04:33:43
    Avatar of КонсервКонсерв
    Саша, здравствуйте!
    Всё вышесказанное подходит к любому компоненту. В том числе и к 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. На данный момент уже не актуальная версия.
    09.07.2018 11:26:37
    Avatar of НиколайНиколай
    Добрый день. Не подскажите в какие файлы нужно вставить код. Чтоб ref=canonical заработал для категорий и главной страницы. Спасибо. Сайт webrap.info Joomla 3.8.1
    02.08.2018 04:55:14
    Avatar of КонсервКонсерв
    Здравствуйте, Николай.

    Вижу, у вас на сайте установлен шаблон tx_meteor.

    Для категорий копайте файл: /templates/tx_meteor/html/com_content/category/blog.php

    или

    /templates/tx_meteor/html/com_content/category/category.php

    Если разработчики шаблона не используют каких-либо "хаков" и если ничего структурно не изменилось для Joomla 3.8.1 - должно работать по принципу, описанному в статье.
    26.02.2022 04:22:38
    Avatar of IvankodaupeIvankodaupe
    Жители России , Ваш презедент из-за своей прихоти отослал на бойню с Украиной ребят которым всего 18-22 года, они шли в армию по призыву, под предлогом мирных учений !!!
    Мы не хотим убивать русских, но за свою страну, мы готовы на всё.

    Только вы можете остановить это мирно, прошу выходите на митинги.
    26.02.2022 07:23:40
    Avatar of IvankodaupeIvankodaupe
    Люди России , Путин из-за своей прихоти послал на бойню с Украиной ребят возрастом всего 18-22 года, которые шли в армию по призыву, под предлогом мирных учений !!!
    Мы не хотим убивать русских, но за свою страну, мы готовы на всё.

    Только вы можете остановить это мирно, прошу выходите на митинги.

    Adding comments is temporarily disabled for unregistered users.

    Go Top