Вопрос о том. как правильно подать материалы сайта поисковым машинам тогда, когда на сайте Joomla включается пагинация меня давно волновал. В базе проиндексированных страниц и страниц, находящихся в индексе поисковой базы уже несколько десятков тысяч, но есть дубли. Разработчики Joomla почему-то до сих пор не озаботились этим вопросом: тем, как правильно настроить индексирование страниц сайта с включённой пагинацией, хотя разработчики поисковых машин уже давно предложили решение того, как обходить все страницы пагинации и собирать вес со всех страниц, передавая его на первую страницу с включенным модулем пагинации. Пришло время разобраться с этим вопросом и решить его на примере шаблона Protostar. Для других шаблонов решение должно быть похожим на то, что я предлагаю в этой статье.
Внимание!
Всё описанное в этой статье не будет играть никакого значения, так как в спецификации HTML нет значенияcanonical
атрибутаrel
для тега<a>
. Есть только для тега<link>
.
Поэтому, описанное ниже никак не повлияет на SEO Joomla.
Статью оставляю, так как в ней содержатся полезные сведения работы расширений Joomla. В остальном, данный подход в создании канонических ссылок не будет работать до тех пор, пока в спецификации HTML не появится данная опция для тега<a>
и/или поисковые машины не начнут её использовать.
Как правильно настроить пагинацию страниц Joomla с точки зрения SEO
Первым делом разберёмся с тем, как правильно настроить пагинацию страниц Joomla с точки зрения СЕО. Вот что пишет Платон Щукин в рекомендациях Яндекса по этому вопросу ещё в 2015-году (и информация до сих пор актуальная и используется в поисковых алгоритмах как Яндекса, так и Google для определения основной страницы из списка страниц со включённой пагинацией):
Что делать со страницами пагинации и сортировки товаров?
Если в какой-либо категории на вашем сайте находится большое количество товаров, могут появиться страницы пагинации (порядковой нумерации страниц), на которых собраны все товары данной категории. Если на такие страницы нет трафика из поисковых систем и их контент во многом идентичен, то советую настраивать атрибут
rel="canonical"
тега<link>
на подобных страницах и делать страницы второй, третьей и дальнейшей нумерации неканоническими, а в качестве канонического (главного) адреса указывать первую страницу каталога, только она будет участвовать в результатах поиска.
И это действительно должно работать: атрибут rel="canonical"
тега <link>
для первой (основной) страницы с пагинацией даст знать поисковому роботу, что именно эту страницу нужно включить в поисковую базу проиндексированных страниц, и в тоже время позволит пройти роботу дальше по ссылкам пагинации, собрав веса со ссылок на второстепенных страницах, передав их по назначению тем материалам, которые там расположены.
Как не надо настраивать пагинацию страниц Joomla с точки зрения SEO
Некоторые вебмастера решают эту задачу, закрывая доступ поисковым роботам в файле robots.txt
на вложенные страницы пагинации директивой Disallow
. Для Joomla это будет выглядеть так:
Disallow: *?start*
Это сработает и дубли не попадут в поисковую базу, но при этом не будет собрана информация со страниц пагинации. Зачем исключать из поисковой работы те страницы, которые есть на сайте, если они реально имеют ссылки, которые могут получить дополнительный вес со второстепенных страниц пагинации?
Текущее положение с пагинацией в Joomla на примере шаблона Protostar
Посмотрим в код одной из страниц Joomla, на которой есть пагинация:
<nav role="navigation" aria-label="Разбиение на страницы">
<ul class="pagination-list">
<li><a title="В начало" href="/cms/joomla/kunena/kunena-forum.html" class="pagenav" aria-label="Перейти на В начало страницу "><span class="icon-first" aria-hidden="true"></span></a></li>
<li><a title="Назад" href="/cms/joomla/kunena/kunena-forum.html" class="pagenav" aria-label="Перейти на Назад страницу "><span class="icon-previous" aria-hidden="true"></span></a></li>
<li class="hidden-phone"><a title="1" href="/cms/joomla/kunena/kunena-forum.html" class="pagenav" aria-label="Перейти на страницу 1">1</a></li>
<li class="active hidden-phone"><a aria-current="true" aria-label="Страница 2">2</a></li>
<li class="hidden-phone"><a title="3" href="/cms/joomla/kunena/kunena-forum.html?start=12" class="pagenav" aria-label="Перейти на страницу 3">3</a></li>
<li><a title="Вперёд" href="/cms/joomla/kunena/kunena-forum.html?start=12" class="pagenav" aria-label="Перейти на Вперёд страницу "><span class="icon-next" aria-hidden="true"></span></a></li>
<li><a title="В конец" href="/cms/joomla/kunena/kunena-forum.html?start=12" class="pagenav" aria-label="Перейти на В конец страницу "><span class="icon-last" aria-hidden="true"></span></a></li>
</ul>
</nav>
Как видно из кода, приведённого выше, все ссылки в этом расширении Joomla имеют равный вес и ссылки передаются без каких либо указаний в HTML-теге <a>
. Тогда, как в ссылке <a title="В начало" href="/cms/joomla/kunena/kunena-forum.html" class="pagenav" aria-label="Перейти на В начало страницу ">
хорошо бы передать атрибут rel="canonical"
для указания поисковым машинам на то, что это ссылка на каноническую страницу и именно её и нужно использовать в поисковой выдаче.
Как это сделать?
Исправление шаблона пагинации в Joomla для SEO на примере шаблона Protostar
Итак, за пагинацию в шаблоне Protostar отвечает файл, находящийся тут:
/templates/protostar/html/pagination.php
В районе 153-й строчки идёт проверка и формирования ссылки на первую страницу пагинации:
// Check for "Start" item
if ($item->text === JText::_('JLIB_HTML_START'))
{
$display = '<span class="icon-first" aria-hidden="true"></span>';
$aria = JText::sprintf('JLIB_HTML_GOTO_POSITION', strtolower($item->text));
}
Допишем сюда ещё одну переменную $canonical
со значением rel="canonical"
. Это позволит определить значение этой переменной при формировании кода пагинации страницы. Если при формировании страницы этой ссылки на стартовую страницы не будет, то значение переменной $canonical
будет не определено. В итоге получим ещё одну строку:
// Check for "Start" item
if ($item->text === JText::_('JLIB_HTML_START'))
{
$display = '<span class="icon-first" aria-hidden="true"></span>';
$aria = JText::sprintf('JLIB_HTML_GOTO_POSITION', strtolower($item->text));
$canonical = ' rel="canonical"';
}
Теперь осталось только включить значение этой переменной в формирование HTML-кода ссылки на первую страницу пагинации в районе 189-й строки.
Было:
return '<li' . $class . '><a title="' . $item->text . '" href="' . $item->link . '" class="pagenav" aria-label="' . $aria . '">' . $display . '</a></li>';
Стало:
return '<li' . $class . '><a' . $canonical . ' title="' . $item->text . '" href="' . $item->link . '" class="pagenav" aria-label="' . $aria . '">' . $display . '</a></li>';
Теперь, обновив страницу с пагинацией увидим:
<nav role="navigation" aria-label="Разбиение на страницы">
<ul class="pagination-list">
<li><a rel="canonical" title="В начало" href="/cms/joomla/kunena/kunena-forum.html" class="pagenav" aria-label="Перейти на В начало страницу "><span class="icon-first" aria-hidden="true"></span></a></li>
<li><a title="Назад" href="/cms/joomla/kunena/kunena-forum.html" class="pagenav" aria-label="Перейти на Назад страницу "><span class="icon-previous" aria-hidden="true"></span></a></li>
<li class="hidden-phone"><a title="1" href="/cms/joomla/kunena/kunena-forum.html" class="pagenav" aria-label="Перейти на страницу 1">1</a></li>
<li class="active hidden-phone"><a aria-current="true" aria-label="Страница 2">2</a></li>
<li class="hidden-phone"><a title="3" href="/cms/joomla/kunena/kunena-forum.html?start=12" class="pagenav" aria-label="Перейти на страницу 3">3</a></li>
<li><a title="Вперёд" href="/cms/joomla/kunena/kunena-forum.html?start=12" class="pagenav" aria-label="Перейти на Вперёд страницу "><span class="icon-next" aria-hidden="true"></span></a></li>
<li><a title="В конец" href="/cms/joomla/kunena/kunena-forum.html?start=12" class="pagenav" aria-label="Перейти на В конец страницу "><span class="icon-last" aria-hidden="true"></span></a></li>
</ul>
</nav>
То есть задача решена. В строке со ссылкой на первую страницу пагинации мы поставили нужный для правильного СЕО атрибут rel="canonical"
.
Выводы
Таким образом, небольшой правкой в коде формирования пагинации расширения Joomla можно решить глобальную задачу указания поисковым роботам страницы, которую требуется использовать в индексе ссылок поисковой выдачи с сайта. И это решение более правильное с точки зрения SEO в сравнении с ограничением доступа поисковым ботам на страницы пагинации в файле robots.txt
.
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)