Как добавить rel="canonical" в Joomla 3. Joomla 3 rel canonical


Как добавить настраиваемый rel="canonical" в Joomla 3

Попытка разработчиков в Джумле 3 решить проблему с атрибутом rel="canonical" окончилась фиаско.

Поэтому, сделаем возможность прописать rel="canonical" для каждого материала.

 

В джумле существует куча полей которые я никогда не прописываю, но которые могут выводить информацию в мета тегах, это:

<meta name="rights" content="авторские права" /><meta name="author" content="автор" /><meta name="xreference" content="внешняя ссылка" /><meta name="keywords" content="ключи">

Я решил использовать одно из ненужных полей для вывода ссылки на каноническую страницу:

<link rel="canonical" href="/" />

Мой выбор пал на мета-тег keywords, потому что он есть во всех внешних компонентах (особено меня интересова JoomGallery).

Итак, для того что бы сделать настраиваемый и управляемый рел каноникал нужно открыть файл head.php, находящийся по адресу:

/libraries/joomla/document/html/renderer

Найти вот такой код:

// Generate META tags (needs to happen as early as possible in the head) foreach ($document->_metaTags as $type => $tag) { foreach ($tag as $name => $content) { if ($type == 'http-equiv' && !($document->isHtml5() && $name == 'content-type')) { $buffer .= $tab . '<meta http-equiv="' . $name . '" content="' . htmlspecialchars($content) . '" />' . $lnEnd; } elseif ($type == 'standard' && !empty($content)) { $buffer .= $tab . '<meta name="' . $name . '" content="' . htmlspecialchars($content) . '" />' . $lnEnd; } } }

И заменить на этот:

// Generate META tags (needs to happen as early as possible in the head) foreach ($document->_metaTags as $type => $tag) { foreach ($tag as $name => $content) { if ($type == 'http-equiv' && !($document->isHtml5() && $name == 'content-type')) { $buffer .= $tab . '<meta http-equiv="' . $name . '" content="' . htmlspecialchars($content) . '" />' . $lnEnd; } elseif ($type == 'standard' && !empty($content)) { //canonical if ($content) { if ($name=='keywords') { $buffer .= $tab . '<link rel="canonical" href="' . htmlspecialchars($content) . '" />' . $lnEnd; continue; } $buffer .= $tab . '<meta name="' . $name . '" content="' . htmlspecialchars($content) . '" />' . $lnEnd; } } } }

Теперь, если нужен любой рел-каноникал, мне достаточно прописать его в поле «Мета-тег Keywords».

P.S. Метод так же работает в Joomla 2.5

P. P.S. При обновлении Джумлы файл head.php, обновиться. Поэтому сделайте дубль и после замените его.

Возможно вас заинтересуют эти материалы:

zarabotoknasite.ru

Исправление ошибки канонических ссылок (link rel="canonical") в joomla 3.х.

В joomla ветки 3.x разработчиками была допущена одна досадная ошибка, которая попортила жизнь многим владельцам сайтов и заставила потерять драгоценное время. Ошибка связана с тем, как генерируется атрибут <link rel=”canonical” …>, а именно: при отображении материала в качестве канонического url указывалась категория статьи, но не адрес самого материала. Из-за этого все материалы, которые владельцы сайтов, блоггеры, публиковали на своих сайтах были исключены поисковыми системами из поискового индекса, так как в качестве канонического url указывался адрес не самой статьи, а ее категории. Ошибка очень досадная, и даже кажется странной для команды профессиональных разработчиков, успешно разрабатывающих систему уже почти 10 лет – но, нужно как-то продолжать жить и исправлять эту ошибку.

На форумах можно встретить достаточно много комментариев с предложениями решения этой проблемы, но большинство из них носят «маскировочный» характер, без попытки затронуть сам ее источник. К тому же, большинство решений предлагаемых на форумах -  «авторские», они весьма интересны с точки зрения сообразительности и инженерной мысли, но, все же, несут в себе некоторые недостатки и ограничения, связанные с неполным пониманием принципов работы всей системы CMS Joomla. Хотя, я не могу сказать, что предлагаемые решения плохи, они в достаточной мере эффективны и ими вполне можно пользоваться.

Однако, в этой статье я хочу предложить «не городить огород», а воспользоваться тем, что предложили сами разработчики joomla в качестве ответа в своем багтрекере (ссылка). Так как гневных сообщений было много, был выпущен патч, который необходимо внедрить самостоятельно своими руками. Он почти полностью снимает проблему, за исключением одной мелочи, которую мы тоже поправим своими руками. После этого проблема с каноническими url в joomla 3.x отпадает полностью. И можно наслаждаться жизнью.

Почему не надо удалять или блокировать вывод rel=”canonical” в шаблоне?

Среди прочих решений, предлагаемых на большинстве сайтов или форумов, особняком стоит решение, суть которого заключается в удалении, блокировки или вырезании вывода тега «link» с атрибутом rel=”canonical”. Это решение действительно очень надежно и полностью снимает проблему с исключением каких-либо страниц сайта из поискового индекса поисковых систем.

Однако, это решение дает «зеленый свет» другой проблеме, присущей всем CMS без исключения – это дубли страниц в поисковом индексе. Поисковые системы уже давно «привыкли», к тому что сайты работающие на базе какой-либо CMS имеют дублирующие адреса, по которым открывается один и тот же контент. И поэтому они в разумных пределах допускают, что такое возможно и не накладывают санкций. Однако, все же Google впервые предложил, а затем и Яндекс поддержал решение, которое позволяет несколько взять под контроль ситуацию с дублями страниц, и этим решением как раз является указание канонического адреса страницы. Канонического, то есть «правильного» по мнению администратора сайта. В результате, если материал открывается по разным адресам, в поисковый индекс попадает именно тот адрес, который для данного материала указан как канонический. Что весьма удобно.

Поэтому удаление тега «link» с атрибутом rel=”canonical” – не является оптимальным решением. Тем более в ситуации, когда есть возможность исправить ошибку без удаления или блокировки вывода этого тега в шапке html-разметки страниц Вашего сайта.

Решение.

В общем-то решение достаточно простое и оно подробно описано в багтрекере, но не всем может быть понятен английский, к тому же не всем может быть понятен «синтаксис» описания исправлений, которое имеется в выпущенном патче. Поэтому здесь я постараюсь все изложить «по-русски».

Для начала необходимо перейти к файлу:

/libraries/joomla/uri/uri.php

И найти в нем строку 202:

return self::$instances[$uri];

и заменить ее на:

return clone self::$instances[$uri];

Файл сохранить и закрыть. Далее перейти к следующей правке, а именно открыть файл:

/plugins/system/sef/sef.php

И сначала сразу после 34 строки (закрывающая фигурная скобка):

                        $app = JFactory::getApplication();                        $doc = JFactory::getDocument();                         if ($app->getName() != 'site' || $doc->getType() !== 'html')                         {                                    return true;                         }  

добавить:

                        $router = $app->getRouter();

Далее, необходимо полностью удалить строку 39:

                        $current = JUri::current();

Затем, вместо строк 46-49:

                        $link = 'index.php' . $uri->toString(array('query', 'fragment'));                         $link = $domain . JRoute::_($link);                           if ($current !== $link)  

записать:

                        $parsed = $router->parse($uri);                         $fakelink = 'index.php?' . http_build_query($parsed);                         $link = $domain . JRoute::_($fakelink, false);                           if ($uri !== $link)  

И наконец последняя правка, которую необходимо выполнить согласно выпущенному патчу. В этом же файле вместо строки 51:

                                   $doc->addHeadLink($link, 'canonical');  

записать:

                                   $doc->addHeadLink(htmlspecialchars($link), 'canonical');  

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

Дополнение.

Однако, если ограничиться только этими правками, то может возникнуть проблема с каноническим url главной страницы сайта, если она оформлена как блог материалов на главной странице. А именно, к основному адресу Вашего сайта дописывается:

?view=featured

И это может выглядеть примерно так:

<link href="http://www.vash-site.ru/?view=featured" rel="canonical" />  

В результате, именно такой адрес становится каноническим, при индексации главной страницы Вашего сайта, что тоже как-то не красиво. Это можно легко исправить, если немного модифицировать строку 51, которую мы уже меняли выше. Вместо нее, нужно написать:

$doc->addHeadLink(htmlspecialchars(str_replace("?view=featured","",$link)), 'canonical');  

То есть, здесь я предлагаю просто насильно вырезать «?view=featured» из текста канонической ссылки главной, и заменить его на пустую подстроку «». И это работает. Теперь в разделе «head» html разметки главной страницы Вашего сайта, должна быть указана каноническая ссылка главной страницы вида:

<link href="http://www.vash-site.ru/" rel="canonical" />  

И это именно то, что нам и нужно!

Если информация этой статьи будет интересна и полезна Вашему кругу друзей и знакомых, то Вы можете опубликовать ссылку - тогда им проще будет ее найти. Они Вам будут благодарны:).

Комментарии к статье:

www.webengineer.pro

Canonical Url – избавляемся от дублей в Joomla

Canonical Url это одно из лучших решений для избавления от дублирующихся страниц на сайте, сделанном на Joomla. Данное расширение поможет вам бороться с неизвестными URL (в том числе и с содержащими дополнительные параметры), по которым отображается дублирующийся контент. Благодаря этому, поисковые системы будут хранить у себя только один вариант URL страницы и ваш сайт будет лучше ранжироваться при поиске, что, в свою очередь, приведет к увеличению посещаемости сайта.

Использование Canonical Url

 Для работы с Canonical Url вам нужно авторизоваться в админке Joomla и перейти в «Компоненты -> Canonical -> Компоненты» и импортировать XML-файлы для расширений, которые используются у вас на сайте.

Расширение Canonical Url основывается на пунктах меню, которые созданы для перехода на категории или материалы. Если вы создали корректное меню, то тег rel=”canonical” будет автоматически добавлен для соответствующей ссылки  пункта меню.

Основные возможности Canonical Url

Автоматическое создание канонических URL

Плагин Система – Canonical будет автоматически создавать теги canonical, выбирая первую ссылку, созданную в пункте меню.

Управление ссылками

Расширение будет показывать все ссылки, которые связаны с определенным пунктом меню. Так вы сможете увидеть дубли и управлять ими.

Менеджер компонентов

Canonical Url имеет менеджер компонентов, который позволяет выбирать расширения, для которые следует удалять дубли. Вы можете самостоятельно определить части вашего сайта, для которых будет использоваться Canonical Url.

Специальный модуль для работы через фронтенд

Этот модулю используется для проверки корректности URL, использующегося для создания канонического тега. Он также помогает вводить URL’ы, которых еще нет в меню в админке, что помогает ускорить процесс работы.

Совместимость с многими сторонними расширениями

Canonical Url позволяет создавать теги не только для компонента com_content Joomla, но также поддерживает и другие расширения, такие как com_k2, com_flexicontent, com_fwgallery, com_easyblog , com_easydiscuss, com_breezingforms , com_contact, com_zoo, com_users.

joomla3x.ru


Prostoy-Site | Все права защищены © 2018 | Карта сайта