Изменяем канонические URL для категорий WordPress

Изменяем канонические URL для категорий WordPress

Решение проблемы с неверными каноническими URL в WordPress когда структура сайта имеет расширение файлов постов.

Злополучный плагин AIOSEO, в девичестве All In SEO Pack крайне не корректно работает с каноническими URL.

Дело в том, что для поисковика URL вида http://site.com/foo и http://site.com/foo/ разные URL, а AIOSEO в качестве канонического URL ставит URL без слеша.

Наличие слеша в конце URL важно для SEO. Слеш в конце имени категории указывает поисковику, что это не какой-то отдельный файл, а раздел сайта. Следовательно поисковик понимает, что сайт имеет четкую структуру.

Причем ставится слеш в конце URL или нет зависит от темы, которая установлена. У меня на некоторых проектах слеши в конце отображаются вполне корректно и вмешательство в работу плагина AIOSEO не требуется.

Проблема с каноническими URL в AOISEO возникает тогда, когда в настройках WordPress "Постоянные ссылки" используется расширение файлов .html или другое расширение.

AIOSEO со своими неверными каноническими URL для категорий портит нам всю картину.

Задача по корректированию каннонических URL для категорий делиться на 2 этапа:

  1. Удаляем код, который нам сделал AIOSEO
  2. Пишем свой код для вывода канонических URL

Удаляем код AIOSEO

Для этого используем все те же фильтры. Открываем файл functions.php и после всех директив вставляем следующий код:

//отключаем каннонический урл категорий
add_filter( 'aioseo_canonical_url', 'aioseo_filter_canonical_url' );
function aioseo_filter_canonical_url( $url ) {
   if ( is_category() || is_tag() ) {
      return '';
   }
   return $url;
}

В этом примере мы отключили вывод link rel="canonical" для категорий и тегов.
Если необходимо удали канонические URL с отдельных страниц вместо is_tag() пишем там is_page().

Пишем свой код для вывода канонических URL

В принципе есть несколько вариантов решения этой задачи.

  • С помощью плагина. Например такого. Я его не проверял, гарантий не даю.
  • С помощью штатных средств WordPress и функции wp_get_canonical_url(). Опять же не факт, что wp_get_canonical_url() выведет канонический URL со слешем в конце.
  • С помощью дополнительных полей.
  • С помощью глобальных переменных.

Вывод с помощью дополнительных полей

Странно, но этот способ мне не подошел, хотя я неплохо знаю как работать с дополнительными полями. Плагин ACF категорически не желал получать значение касдомного поля в header.php. Не знаю почему.

То есть получать то он его получал, но только в том случае если категория была пустая, без постов в ней.

Попробовал постучаться в сапорт ACF, но видимо, сапорт поглощен более интересными делами.

Вывод канонических URL с помощью глобальных переменных

Собственно нам никто не мешает получить полный URL к файлу с помощью глобальных переменных.

Для этого открываем в редакторе файл header.php и где-нибудь перед закрываюзщим тегом </head> пишем такую конструкцию:

<!-- канонический URL категории/ -->	
<?php if (is_category() !=is_paged()){
echo '<link rel="canonical" href="https://' .$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] .'"/>',PHP_EOL; 
}
?>
<!-- /канонический URL категории -->	

Оператор !=is_paged() нужен для того, чтобы канонические URL не выводились на стнаницах пагинации. Впрочем, если у вас страницы пагинации не закрыты от индексации этот оператор можно исключить. Тогда link rel='canonical' будет выводиться на всех страницах категорий, в том числе и станицах с пагинацией.

Не могу не упомянуть вот эту статью про канонические URL и AIOSEO. Там автор предлагает свою функцию вывода канонических URL взамен функционалу AIOSEO.

Статья довольно старая и у меня код, предлагаемый автором не заработал.

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

Да, и все манипуляции лучше проводить в дочерней теме WordPress, если мы не хотим, чтобы все исчезло после обновления темы.

Об авторе

Дмитрий Дмитриев

Дмитрий administrator

Привет, меня зовут Дмитрий и я занимаюсь созданием сайтов на Wordpress. Мне нравится моя работа, я могу сделать вам сайт на Wordpress или помочь с реализацией ваших замыслов на другой CMS.

Оставить ответ