Всем привет! Чтобы добавить запись типа meta rel="canonical" href="url"
к каждой странице вашего сайта на WordPress, добавьте этот код в functions.php
вашей темы:
function remove_args($url) {
$parsed = parse_url($url);
$fragment = '';
if (array_key_exists('fragment', $parsed)) {
$fragment = '#' . $parsed['fragment'];
}
return sprintf("%s://%s%s%s",
$parsed['scheme'],
$parsed['host'],
$parsed['path'] ?? '',
$fragment);
}
function print_canonical_link() {
$url = "";
// Одиночная страница
if (is_single()) {
global $page;
// Пост из нескольких частей
if ($page) {
$url = get_pagenum_link($page);
}
else {
$url = get_permalink();
}
}
// Страница пагинации типа что-то-там/page/N
else if (is_paged()) {
$url = get_pagenum_link(get_query_var('paged'));
}
// Главная страница сайта
else if(is_front_page()) {
$url = get_home_url();
}
// Страницы категории или тега
else if(is_category() || is_tag()) {
$url = get_term_link(get_queried_object());
}
if ($url) {
echo '<link rel="canonical" href="'.remove_args($url).'" />';
}
}
add_action('wp_head', 'print_canonical_link');
Подробности для непосвящённых: функция print_canonical_link()
выводит запись вида
<meta rel="canonical" href="url" />
во время вызова штатной функции wp_head()
, что очень уважают поисковые системы, но это неточно. А функция remove_args()
удаляет GET аргументы вида «?key=value» из URL. Критика, замечания, пожелания приветствуются.
Отличная статья, спасибо за подробное объяснение! Да, добавление мета-тега canonical важно для предотвращения проблем с дублированным контентом. Ваш код работает корректно, но стоит помнить, что при использовании плагинов SEO, таких как Yoast SEO или All in One SEO, мета-тег canonical уже добавляется автоматически. Если вы предпочитаете не использовать дополнительные плагины, ваш способ через functions.php — отличный вариант. Также хочу отметить, что для комплексной оптимизации сайта на WordPress я использую плагин Clearfy Pro, он помогает управлять множеством настроек, включая SEO, без необходимости вмешательства в код. Рекомендую ознакомиться с его возможностями. Мне помогает)
Спасибо за наводку. Теперь я могу сделать цикл статей по реализации функций вашего платного плагина шаг за шагом в functions.php или даже реализовать похожий, но бесплатный плагин.