rel_canonical()
Выводит тег <link rel=canonical> на экран. Автоматически вызывается во время события wp_head, чтобы вывести каноническую ссылку в head документа.
Работает только для страниц типа is_singular().
Чтобы отключить каноническую ссылку в head части, нужно удалить хук:
remove_action( 'wp_head', 'rel_canonical' );
Метатег сanonical поисковыми системами только в одном случае: когда поисковая система, обнаружила дублирующий контент, и при этом у нее нет достаточных своих оснований для выбора каноничного адреса.
Во всех прочих случаях, canonical игнорируется. То есть прописывать на страницах пагинации каноникал на любую другую страницу кроме самой себя - не имеет никакого смысла, так как страница пагинации не является дублирующим контентом. За исключением, конечно, случаев, когда на ней действительно один и тот же контент. Правда не представляю как это можно было бы в трезвом уме сделать.
Хуков нет.
Возвращает
null. Выводит на экран html тег <link rel='canonical' href='$link' />
Использование
rel_canonical();
Примеры
#1 Выведем в head часть каноническую ссылку
Добавим следующий код в header.php в head часть документа, чтобы на всех is_single() страницах вывести каноническую ссылку:
<?php rel_canonical(); ?> // выведет: <link rel='canonical' href='$link' />\n
#2 Удаление канонических ссылок на страницах пагинации комментариев
На страницах пагинации комментариев канонический URL выглядит так: сайт.ru/about/comment-page-1/. Это не всегда хорошо, вроде бы, потому что контент записи в этом случае дублируется.
Чтобы это исправить используем такой код:
add_filter( 'get_canonical_url', 'remove_comment_page_canonical_url', 10, 2 );
function remove_comment_page_canonical_url( $canonical_url, $post ){
// for comment page of current post only
if ( get_query_var( 'cpage', 0 ) && $post->ID === get_queried_object_id() ) {
$canonical_url = get_permalink( $post );
}
return $canonical_url;
}
Подробно об этом коде я ответил в вопросе.
Список изменений
| С версии 2.9.0 | Введена. |
| С версии 4.6.0 | Adjusted to use wp_get_canonical_url(). |
Код rel_canonical() rel canonical WP 6.8.3
function rel_canonical() {
if ( ! is_singular() ) {
return;
}
$id = get_queried_object_id();
if ( 0 === $id ) {
return;
}
$url = wp_get_canonical_url( $id );
if ( ! empty( $url ) ) {
echo '<link rel="canonical" href="' . esc_url( $url ) . '" />' . "\n";
}
}