Есть такой замечательный 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);
Что он делает:
- Проверяет на какой странице мы сейчас находимся — категории или теги. И является ли эта страница не первой, т. е. 2, 3, 4, и последующей.
- Получаем данные термина по заданным параметрам. Для этого используем WP функцию «get_term_by()»
- Получаем ссылку на главную страницу термина, для категории - «get_category_link()», а для тегов - «get_tag_link()»
- Для любой другой страницы, возвращаем каноническую ссылку сформированную плагином по умолчанию.
А для главной страницы, если она имеет page/2, page/3 и так далее, как добавить?
Я вас правильно понял, вы хотите чтобы по ссылке
plance.top/page/2
, каноникал имел вид -plance.top
?Да, как это сделать?
Для рубрик ваш код прекрасно работает, а для главной нет
Решил через переменные, добавил %%page%% к тайтлу главной, и к описанию тоже, теперь они разные )) но если подскажете с каноникл, лучше будет.
По каноникал не понял. Там есть свои фильтры. Вот для примера, для сингл страницы кастомного пост тайпа.
add_filter('wpseo_canonical', function($canonical)
{
if(is_singular('sbc-service'))
{
return rozrobka_get_current_page_url();
}
return $canonical;
});
А что делать, если проблема наблюдается на страницах архивов custom post type и архивах такс? 🙂
Какая именно проблема наблюдается? напишите подробнее.
В версии 14.3 не работает код. Не знаете решение для данной версии?
Почему не работает не знаю.
Спасибо добрый человек! Код сработал отлично!
Всегда пожалуйста