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

rel=canonical: как сделать канонический url самой записи на страницах пагинации комментариев?

Подскажи пожалуйста, хочу использовать пагинацию комментариев, но ссылки имеют вид сайт.ru/about/comment-page-1/#comments.

Как сделать, чтобы канонической на всех страницах пагинации комментариев была основная сайт.ru/about/, а не сайт.ru/about/comment-page-1/#comments?

0
Гость
8.1 год назад
  • 0
    Kama9601

    Вариант для версии WP 4.6+ (обновлен 2019-08-10)

    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;
    }

    Вариант для версии WP меньше 4.6

    За вывод канонических ссылок в WordPress отвечает функция rel_canonical(). Подключается она через фильтр wp_head.

    Так как функция не предоставляет никаких фильтров, чтобы изменить её поведение вам нужно удалить фильтр и добавить свой, при этом создав аналогичную функцию, копируем код функции и изменяем его:

    remove_action( 'wp_head', 'rel_canonical');
    add_action( 'wp_head', 'kama_rel_canonical');
    function kama_rel_canonical(){
    	if ( ! is_singular() ) {
    		return;
    	}
    
    	if ( ! $id = get_queried_object_id() ) {
    		return;
    	}
    
    	$url = get_permalink( $id );
    
    	$page = get_query_var( 'page' );
    	if ( $page >= 2 ) {
    		if ( '' == get_option( 'permalink_structure' ) ) {
    			$url = add_query_arg( 'page', $page, $url );
    		} else {
    			$url = trailingslashit( $url ) . user_trailingslashit( $page, 'single_paged' );
    		}
    	}
    
    	/* этот блок отвечает за пагинацию комментариев, поэтому его закроем
    	$cpage = get_query_var( 'cpage' );
    	if ( $cpage ) {
    		$url = get_comments_pagenum_link( $cpage );
    	}
    	*/
    
    	echo '<link rel="canonical" href="' . esc_url( $url ) . "\" />\n";
    }

    Добавьте код в functions.php и Все готово!

    Теперь любая страница комментариев будет иметь в канонической ссылке основной URL записи.

    Сергей 8 лет назад

    Спасибо тебе огромное, сколько не обращался к тебе за помощью, всегда получал положительный ответ. Удачи тебе и процветания твоему блогу!!!

    BigDimoz 2.3 года назад

    Тимур, привет! Выручил, как раз сейчас этот код понадобился, а куда, как ни к тебе на wp-kama заглянуть; есть всё!

    Алексей 2.2 года назад

    Скажите, а для страниц категорий товаров (Woocommerce) на Вордпресс можно настроить rel="canonical" так же для первой страницы?

    Комментировать
  • 3

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

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

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация