Чтобы запретить поисковикам учитывать все ссылки в посте, можно воспользоваться функцией 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”.








