Как добавить 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 - должно работать по принципу, описанному в статье.
    12.08.2018 11:59:07
    Avatar of OargorittaOargoritta
    Работа в интернете
    13.08.2018 05:01:58
    Avatar of RubertClultRubertClult
    Работа в интернете
    13.08.2018 10:12:25
    Avatar of BernardTevitBernardTevit
    Работа в интернете
    Captcha Обновить
    Go Top