Как в Yoast SEO отключить пагинацию в канонических ссылках категорий и тегов

Как в Yoast SEO отключить пагинацию в канонических ссылках категорий и тегов

Есть такой замечательный Yoast SEO плагин от Yoast в репозитории WordPress. В нем имеется достаточно много функций удовлетворяющих большинство потребностей не продвинутого (а может даже и продвинутого СЕО специалиста).

Но речь сейчас пойдет не о его функциональных возможностях и преимуществах перед другими похожими плагинами. А о пагинации в канонических ссылках тегов и категорий.

То такое канонические ссылки и для чего они нужны. Страница гугл-документации говорит нам следующее:

Каноническим называется URL страницы, которую роботы Google считают главной среди нескольких ее вариантов на вашем сайте. Например, если одна и та же страница размещена по нескольким URL, таким как example.com?dress=1234 и example.com/dresses/1234, одна из версий будет выбрана в качестве канонической. Учтите, что страницы могут быть не полностью одинаковыми и относиться к разным доменам.

Яндекса и прочих, это так же касается.

Вернемся к плагину Yoast. По умолчанию, ссылки пагинации тегов и категорий имеют следующий вид:

<link rel="canonical" href="http://wordpress.l/category/bez-rubriki/page/2/" />
<link rel="canonical" href="http://wordpress.l/tag/teg1/page/2/" />

Что на СЕО влияет не лучшим образом. А лучше, когда они ссылаются на главную страницу рубрики или тега, да и любой кастомной таксономии если таковы используются на вашем сайте (хотя все не однозначно и зависит от функционала сайта). Т. е. будут иметь такой вид:

<link rel="canonical" href="http://wordpress.l/category/bez-rubriki/page/" />
<link rel="canonical" href="http://wordpress.l/tag/teg1/page/" />

Что бы это реализовать, нам нужно обратиться к документации Yoast данного плагина. В которой, не однократно упоминался фильтр «wpseo_canonical». Что же, попробуем использовать его для улучшения нашей ситуации. Для этого напишем следующий код:

add_filter('wpseo_canonical', function($canonical) {

	if(is_category() && is_paged())
	{
		$Term = get_term_by('id', get_query_var('cat'), 'category');
		return get_category_link($Term -> term_id);
	}
	elseif(is_tag() && is_paged())
	{
		$Term = get_term_by('slug', get_query_var('tag'), 'post_tag');
		return get_tag_link($Term -> term_id);
	}
	
	return $canonical;
}, 10, 1);

Что он делает:

  1. Проверяет на какой странице мы сейчас находимся — категории или теги. И является ли эта страница не первой, т. е. 2, 3, 4, и последующей.
  2. Получаем данные термина по заданным параметрам. Для этого используем WP функцию «get_term_by()»
  3. Получаем ссылку на главную страницу термина, для категории - «get_category_link()», а для тегов - «get_tag_link()»
  4. Для любой другой страницы, возвращаем каноническую ссылку сформированную плагином по умолчанию.
Поделиться в соцсетях:
Статьи на похожую тематику

С вашим WordPress сайтом проблемы? нужен дополнительный функционал? нестандартный плагин или сверстать новую страницу?
Тогда напишите мне через форму обратной связи, и я постараюсь вам помочь.

Комментарии
  1. Андрей

    А для главной страницы, если она имеет page/2, page/3 и так далее, как добавить?

    ответить
    1. Pavel
      17.05.2020 в 21:04 автор блога

      Я вас правильно понял, вы хотите чтобы по ссылке plance.top/page/2, каноникал имел вид - plance.top ?

      ответить
      1. Алекс

        Да, как это сделать?
        Для рубрик ваш код прекрасно работает, а для главной нет

        ответить
      2. Алекс

        Решил через переменные, добавил %%page%% к тайтлу главной, и к описанию тоже, теперь они разные )) но если подскажете с каноникл, лучше будет.

        ответить
        1. Pavel
          25.03.2021 в 10:50 автор блога

          По каноникал не понял. Там есть свои фильтры. Вот для примера, для сингл страницы кастомного пост тайпа.

          add_filter('wpseo_canonical', function($canonical)
          {
          if(is_singular('sbc-service'))
          {
          return rozrobka_get_current_page_url();
          }
          return $canonical;
          });

          ответить
  2. Анатолий

    А что делать, если проблема наблюдается на страницах архивов custom post type и архивах такс? 🙂

    ответить
    1. Pavel
      19.05.2020 в 09:12 автор блога

      Какая именно проблема наблюдается? напишите подробнее.

      ответить
  3. Тарас

    В версии 14.3 не работает код. Не знаете решение для данной версии?

    ответить
    1. Pavel
      20.06.2020 в 13:34 автор блога

      Почему не работает не знаю.

      ответить
  4. Bit24

    Спасибо добрый человек! Код сработал отлично!

    ответить
    1. Pavel
      02.12.2020 в 20:35 автор блога

      Всегда пожалуйста

      ответить
Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *