Автоматическое добавление nofollow ко всем внешним ссылкам в постах определенной категории

Автоматическое добавление nofollow ко всем внешним ссылкам в постах определенной категории | n-wp.ru
Несколько функций, позволяющих контролировать индексацию ссылок в постах.
👍 Научим бесплатно правильно создавать сайты на WordPress. Подробнее →

Чтобы запретить поисковикам учитывать все ссылки в посте, можно воспользоваться функцией wp_rel_nofollow. Она пропускает через себя содержимое, находит в нем ссылки, и добавляет в них атрибут rel=»nofollow». Добавьте в файл functions.php:

function all_nofollow($content) {
    return stripslashes(wp_rel_nofollow($content));
}
 
add_filter('the_content', 'all_nofollow');

Иногда бывает нужно закрыть от индексации только внешние ссылки. С точки зрения поисковой оптимизации это более разумных ход, нежели чем закрытие вообще всех ссылок, и внешних и внутренних. Для этого существует множество плагинов, однако можно обойтись и без них, добавив специальный код в файл functions.php:

function nofollow_ext($matches){
	$a = $matches[0];
	$site_url = site_url();
	if (strpos($a, 'rel') === false){
		$a = preg_replace("%(href=S(?!$site_url))%i", 'rel="nofollow" $1', $a);
	} elseif (preg_match("%href=S(?!$site_url)%i", $a)){
		$a = preg_replace('/rel=S(?!nofollow)S*/i', 'rel="nofollow"', $a);
	}
	return $a;
}
 
function nofollow_ext_links($content) {
	return preg_replace_callback('/<a>]+/', 'nofollow_ext', $content);
}
 
add_filter('the_content', 'nofollow_ext_links');

Этот код содержит две функции и фильтр. Он определяет все ссылки, которые выводятся в основном содержимом поста с помощью функции the_content, и если в них нет атрибута rel=»nofollow», то он добавляется. Добавление идет на лету, во время формирования страницы в браузере. То есть код не вмешивается в содержимое поста, записанное в базе данных. Такой подход удобен: если вы в дальнейшем захотите отказаться от запрета индексации всех внешних ссылок в посте, то просто удалите этот код из файла functions.php или закомментируйте его.

Закрытие от индексирования всех внешних ссылок в постах -не совсем гибкий подход. Иногда требуется оставить внешние ссылки открытыми в постах определенных категорий, например, в категориях, где вы публикуете рекламные статьи. Поэтому нужен код, который бы позволял указывать, в постах каких категорий закрывать ссылки от индексации, а в каких оставлять открытыми. Добавьте в файл functions.php:

function category_nofollow( $the_content ) {
	global $post;
	if( in_category( array(2,4,6,8) ) ) {
		$the_content = stripslashes( wp_rel_nofollow( $the_content ) );
	}
	return $the_content;
}
 
add_filter('the_content', 'category_nofollow');

2, 4, 6 — это ID категорий, в которых все ссылки будет закрыты от индексации

Закрытие всех ссылок в посте, даже если он опубликован в категории-исключении, не является рациональным. Правильнее было бы закрывать только внешние ссылки в постах определенных категорий. Для этого используйте этот код в файле functions.php:

function category_nofollow_ext($matches){
	$a = $matches[0];
	$site_url = site_url(); 
	if (strpos($a, 'rel') === false){
		$a = preg_replace("%(href=S(?!$site_url))%i", 'rel="nofollow" $1', $a);
	} elseif (preg_match("%href=S(?!$site_url)%i", $a)){
		$a = preg_replace('/rel=S(?!nofollow)S*/i', 'rel="nofollow"', $a);
	}
	return $a;
}
 
function category_nofollow_ext_link($content) {
    global $post;
    if( in_category( array(2,4,6,8) ) ) {
	    return preg_replace_callback('/<a>]+/', 'category_nofollow_ext', $content);
	else {
	    return $content;
	}    
}

add_filter('the_content', 'category_nofollow_ext_link');

2, 4, 6 — это ID категорий, в постах которых ко всем ссылкам будет добавлен атрибут rel=»nofollow».

Создай свой первый сайт на WordPress

Рут
Оцените автора
Добавить комментарий