WordPress как на ладони

rel_canonical()WP 2.9.0

Выводит тег <link rel=canonical> на экран. Автоматически вызывается во время события wp_head, чтобы вывести каноническую ссылку в head документа.

Работает только для страниц типа is_singular().

Чтобы отключить каноническую ссылку в head части, нужно удалить хук:

remove_action( 'wp_head', 'rel_canonical' );

Метатег сanonical поисковыми системами только в одном случае: когда поисковая система, обнаружила дублирующий контент, и при этом у нее нет достаточных своих оснований для выбора каноничного адреса.

Во всех прочих случаях, canonical игнорируется. То есть прописывать на страницах пагинации каноникал на любую другую страницу кроме самой себя - не имеет никакого смысла, так как страница пагинации не является дублирующим контентом. За исключением, конечно, случаев, когда на ней действительно один и тот же контент. Правда не представляю как это можно было бы в трезвом уме сделать.

© Demi Murych

Работает на основе: wp_get_canonical_url()

Хуков нет.

Возвращает

null. Выводит на экран html тег <link rel='canonical' href='$link' />

Использование

rel_canonical();

Примеры

1

#1 Выведем в head часть каноническую ссылку

Добавим следующий код в header.php в head часть документа, чтобы на всех is_single() страницах вывести каноническую ссылку:

<?php rel_canonical(); ?>

// выведет: <link rel='canonical' href='$link' />\n
1

#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() WP 6.5.2

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";
	}
}
3 комментария
    Войти