Joomla и мета-тег canonical в плагине SEF

убрать дубли joomla плагин SEF

Как убрать дубли страниц в Joomla 3 стандартными методами?

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

Мало кто знает что версиях Joomla 3 на этот случай в самой системе джумлы сделали стандартный плагин который умеет определять канонический адрес страницы и выводить на ней мета-тег canonical.

Мета-тег canonical сообщает поисковым роботам какой адрес страницы является предпочтительным, таким образом даже если будут дубли это будет не важно, индексироваться будут только те страницы которые имеют тег rel=”canonical”

Итак в Joomla 3.4.8 этот плагин называется Система – SEF и выглядит он таким образом:

Joomla и мета-тег canonical в плагине SEF

Однако по умолчанию этот плагин остаётся неактивен, и для того чтобы его включить идём в менеджер плагинов, ищем там плагин SEF

Включаем его ставя галочку в его настройках, а также задаём полный адрес своего домена. (Если в будущем вы будете подключать SSL для домена или переезжать на новый домен, то не забудьте изменить адрес в плагине SEF!)

После включения идем на свою страницу и проверяем между тегами HEAD такую строку: <link href=http://my-site.com rel=canonical />

Joomla и мета-тег canonical в плагине SEF

Как добавить тег canonical в старые версии Joomla?

Поскольку не все обновили свои движки, а продолжили использовать старые версии Joomla, то возникает вопрос: как же добавить canonical в Joomla 2?

1. Не используйте ссылку тега base в качестве canonical! Это вредно.
2. Читайте комментарии в коде.
3. При обновлении заменяем весь код который добавили.

Ссылка Canonical для главной страницы. 

Открываем файл templates/МОЙ ШАБЛОН/index.php

после
// No direct access.
defined('_JEXEC') or die;
добавляем
// ------------ Start Canonical-Mod
$document = JFactory::getDocument();
$mainmenu =&amp; JSite::getMenu();
if($mainmenu-&gt;getActive() == $mainmenu-&gt;getDefault()) :
$livesite = substr_replace(JURI::root(), '', -1, 1);
$docpagenr = '';
$docstart = JRequest::getInt('start',0);
if($docstart&gt;0) :
// Если хотим чтобы в канонической ссылке прописывалась постраничная разбивка типа start=10..., то раскомментируем сроку ниже.
//$docpagenr = '?start='.$docstart;
endif;
//$docroute = JRoute::_('index.php?Itemid='.$mainmenu-&gt;getDefault()-&gt;id);
// Если в качестве канонической ссылки хотим использовать системную ссылку Joomla типа http://мойсайт.рф/home.html , то раскомментируем сроку выше, и закомментируем строку ниже.
$docroute = '/';
$document-&gt;addHeadLink( $livesite . $docroute . $docpagenr, 'canonical', 'rel', '' );
endif;
// ------------ End Canonical-Mod

Ссылка Canonical для страниц компонента материалов (com_content)

Открываем файл templates/МОЙ ШАБЛОН/html/com_content/archive/default.php

после
// no direct access
defined('_JEXEC') or die;
 
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers');
добавляем
// ------------ Start Canonical-Mod
$mainmenu =&amp; JSite::getMenu();
if($mainmenu-&gt;getActive()!== $mainmenu-&gt;getDefault()) :
$app = JFactory::getApplication();
$document = JFactory::getDocument();
$livesite = substr_replace(JURI::root(), '', -1, 1);
 
$docpagenr = '';
$docstart = JRequest::getInt('start',0);
if($docstart&gt;0) :
// Если хотим чтобы в канонической ссылке прописывалась постраничная разбивка типа start=10..., то раскомментируем сроку ниже. В противном случае будет индексироваться только главная страница архива
//$docpagenr = '?start='.$docstart;
endif;
$docroute = JRoute::_('index.php?Itemid='.$app-&gt;getMenu()-&gt;getActive()-&gt;id);
 
$document-&gt;addHeadLink($livesite . $docroute . $docpagenr, 'canonical', 'rel', '');
endif;
// ------------ End Canonical-Mod

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

после
// no direct access
defined('_JEXEC') or die;
 
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers');
добавляем
// ------------ Start Canonical-Mod
$mainmenu =&amp; JSite::getMenu();
if($mainmenu-&gt;getActive()!== $mainmenu-&gt;getDefault()) :
$requrl = trim($_SERVER['REQUEST_URI']);
$document = JFactory::getDocument();
$livesite = substr_replace(JURI::root(), '', -1, 1);
 
$docpagenr = '';
$docstart = JRequest::getInt('start',0);
if($docstart&gt;0) :
// Если хотим чтобы в канонической ссылке прописывалась постраничная разбивка типа start=10..., то раскомментируем сроку ниже. В противном случае будет индексироваться только главная страница материала
//$docpagenr = '?start='.$docstart;
endif;
$docroute = $this-&gt;item-&gt;readmore_link;
 
// Начало проверки системной ссылки в запросе. (для редиректа 301 или отдачи ошибки 404.)
(bool)$valideurl = strpos( $requrl, $docroute );
if ($valideurl === false) :
header("HTTP/1.1 301 Moved Permanently");
header("Location: " . $livesite . $docroute);
header("Connection: close");
exit();
// Если хотим отдать ошибку 404, то закомментируем 4 строки выше этой, и раскомментируем 1 сроку ниже.
//JError::raiseError(404, JText::_('PAGE COULD NOT BE FOUND'));
endif;
// Конец проверки системной ссылки в запросе.
 
$document-&gt;addHeadLink($livesite . $docroute . $docpagenr, 'canonical', 'rel', '');
endif;
// ------------ End Canonical-Mod

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

после
// no direct access
defined('_JEXEC') or die;
 
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers');
добавляем
// ------------ Start Canonical-Mod
$mainmenu =&amp; JSite::getMenu();
if($mainmenu-&gt;getActive()!== $mainmenu-&gt;getDefault()) :
$document = JFactory::getDocument();
$livesite = substr_replace(JURI::root(), '', -1, 1);
 
$docpagenr = '';
$docstart = JRequest::getInt('start',0);
if($docstart&gt;0) :
// Если хотим чтобы в канонической ссылке прописывалась постраничная разбивка типа start=10..., то раскомментируем сроку ниже. В противном случае будет индексироваться только главная страница категории
//$docpagenr = '?start='.$docstart;
endif;
 
$docroute = JRoute::_(ContentHelperRoute::getCategoryRoute($this-&gt;parent-&gt;id));
 
$document-&gt;addHeadLink($livesite . $docroute . $docpagenr, 'canonical', 'rel', '');
endif;
// ------------ End Canonical-Mod

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

после
// no direct access
defined('_JEXEC') or die;
 
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers');
добавляем
// ------------ Start Canonical-Mod
$mainmenu =&amp; JSite::getMenu();
if($mainmenu-&gt;getActive()!== $mainmenu-&gt;getDefault()) :
$document = JFactory::getDocument();
$livesite = substr_replace(JURI::root(), '', -1, 1);
 
$docpagenr = '';
$docstart = JRequest::getInt('start',0);
if($docstart&gt;0) :
// Если хотим чтобы в канонической ссылке прописывалась постраничная разбивка типа start=10..., то раскомментируем сроку ниже. В противном случае будет индексироваться только главная страница категории
//$docpagenr = '?start='.$docstart;
endif;
 
$docroute = JRoute::_(ContentHelperRoute::getCategoryRoute($this-&gt;category-&gt;id));
 
$document-&gt;addHeadLink($livesite . $docroute . $docpagenr, 'canonical', 'rel', '');
endif;
// ------------ End Canonical-Mod

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

после
// no direct access
defined('_JEXEC') or die;
 
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers');
добавляем
// ------------ Start Canonical-Mod
$mainmenu =&amp; JSite::getMenu();
if($mainmenu-&gt;getActive()!== $mainmenu-&gt;getDefault()) :
$document = JFactory::getDocument();
$livesite = substr_replace(JURI::root(), '', -1, 1);
 
$docpagenr = '';
$docstart = JRequest::getInt('start',0);
if($docstart&gt;0) :
// Если хотим чтобы в канонической ссылке прописывалась постраничная разбивка типа start=10..., то раскомментируем сроку ниже. В противном случае будет индексироваться только главная страница категории
//$docpagenr = '?start='.$docstart;
endif;
 
$docroute = JRoute::_(ContentHelperRoute::getCategoryRoute($this-&gt;category-&gt;id));
 
$document-&gt;addHeadLink($livesite . $docroute . $docpagenr, 'canonical', 'rel', '');
endif;
// ------------ End Canonical-Mod

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

после
// no direct access
defined('_JEXEC') or die;
 
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers');
добавляем
// ------------ Start Canonical-Mod
$mainmenu =&amp; JSite::getMenu();
if($mainmenu-&gt;getActive()!== $mainmenu-&gt;getDefault()) :
$app = JFactory::getApplication();
$document = JFactory::getDocument();
$livesite = substr_replace(JURI::root(), '', -1, 1);
 
$docpagenr = '';
$docstart = JRequest::getInt('start',0);
if($docstart&gt;0) :
// Если хотим чтобы в канонической ссылке прописывалась постраничная разбивка типа start=10..., то раскомментируем сроку ниже. В противном случае будет индексироваться только главная страница архива
//$docpagenr = '?start='.$docstart;
endif;
$docroute = JRoute::_('index.php?Itemid='.$app-&gt;getMenu()-&gt;getActive()-&gt;id);
 
$document-&gt;addHeadLink($livesite . $docroute . $docpagenr, 'canonical', 'rel', '');
endif;
// ------------ End Canonical-Mod

Необязательный шаг. Чисто для указания запрета индексации формы добавления/редактирования материала. 
Открываем файл templates/МОЙ ШАБЛОН/html/com_content/form/edit.php

после
// Create shortcut to parameters.
$params = $this-&gt;state-&gt;get('params');
добавляем
$document = &amp; JFactory::getDocument();
$document-&gt;setMetadata('robots', 'noindex, nofollow');

Как дополнение желательно делать запрет на индексацию страниц с параметрами  ?limitstart и ?limit добавив их в файл robots.txt
Код

Disallow: *?limitstart
Disallow: *?limit

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

копируем components/com_content/views/archive/tmpl/default.php в templates/МОЙ ШАБЛОН/html/com_content/archive/default.php
копируем components/com_content/views/article/tmpl/default.php в templates/МОЙ ШАБЛОН/html/com_content/article/default.php
копируем components/com_content/views/categories/tmpl/default.php в templates/МОЙ ШАБЛОН/html/com_content/categories/default.php
копируем components/com_content/views/category/tmpl/blog.php в templates/МОЙ ШАБЛОН/html/com_content/category/blog.php
копируем components/com_content/views/category/tmpl/default.php в templates/МОЙ ШАБЛОН/html/com_content/category/default.php
копируем components/com_content/views/featured/tmpl/default.php в templates/МОЙ ШАБЛОН/html/com_content/featured/default.php
копируем components/com_content/views/form/tmpl/edit.php в templates/МОЙ ШАБЛОН/html/com_content/form/edit.php
Like this post? Please share to your friends:
Leave a Reply

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: