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

Изменяем канонические URL для категорий
Продолжаем кастрировать All In SEO Pack

Злополучный плагин AISEO, в девичестве All In SEO Pack крайне не корректно работает с каноническими URL. В этой статье я опишу метод борьбы с каноническими URL в WordPress.

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

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

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

Спойлер

Я всегда устанавливаю плагин Smart Trailing Slash. Его нет в официальном репрозитории Вордпресс, но можно легко найти его аналог. Этот плагин дописывает слеш в конце URL категории и не отдает это на откуп разработчикам темы.

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

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

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

Удаляем код AISEO

Для этого используем все те же фильтры. Открываем файл 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 со слешем в конце.
  • С помощью дополнительных полей.
  • С помощью глобальных переменных.
Еще по теме:  Какой плагин для кэширования Wordpress выбрать?

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

Странно, но этот способ мне не подошел, хотя я неплохо знаю как работать с дополнительными полями. Плагин 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 и AISEO. Там автор предлагает свою функцию вывода канонических URL взамен функционалу AISEO.

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

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

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

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