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