Как полностью закрыть от индексации ссылки в комментариях

Официально Яндекс больше не учитывает noindex и обращает внимание только на rel="nofollow" http://help.yandex.ru/webmaster/?id=1111291, но возможно еще что-то поменяется, поэтому привожу инструкцию, и как закрыть ссылки в комментариях от индексации с помощью noindex, и как поставить для них атрибут nofollow.

По-умолчанию WordPress добавляет атрибут rel="nofollow" для ссылки в имени автора комментария, но если ссылка была добавлена в тело самого комментария без использования html-тегов, замечено, что WordPress не будет добавлять для таких ссылок rel="nofollow" (хотя ссылка автоматически вставится).

Чтобы закрыть такие ссылки в noindex/nofollow качаем плагин WP-Noindex.

Открываем его, находим там 12-ю строку:

return str_replace('<a ', '<noindex><a ', $comment);

и добавляем rel="nofollow", в итоге получится такой код:

return str_replace('<a ', '<noindex><a rel="nofollow" ', $comment);

Как видим, сам по себе плагин заключает ссылку только в noindex, указанная правка позволяет также добавлять атрибут rel="nofollow".

Можем полностью переписать этот плагин для использования только rel="nofollow" (исправила название и описание плагина в примере, чтобы не путать).

<?php
/*
Plugin Name: WP-Nofollow
Plugin URI: http://www.wordpressplugins.ru/seo/wp-noindex.html
Description: Добавляет в ссылки атрибут rel="nofollow", что запрещяет их индексацию Яндексом и Google.
Author: Flector
Author URI: http://www.wordpressplugins.ru
Version: 1.00
*/

function wp_nofollow($comment) {
	return str_replace('<a ', '<a rel="nofollow" ', $comment);
}
function wp_nofollow2($comment) {
	return str_replace('</a>', '</a>', $comment);
}

add_filter('comment_text', 'wp_nofollow');
add_filter('comment_text', 'wp_nofollow2');
?>

Для заключения в noindex ссылки в имени автора, находим в файле comments.php (или в functions.php) строку вида:

<?php printf(__('<cite class="fn">%s</cite> <span class="says">пишет:</span>'), get_comment_author_link()) ?>

или содержащую:

<?php comment_author_link() ?>

и заменяем на:

<?php printf(__('<cite class="fn"><noindex>%s</noindex></cite> <span class="says">пишет:</span>'), get_comment_author_link()) ?>

или:

<noindex><?php comment_author_link() ?></noindex>

Если совсем нужно убрать ссылку на автора, можем заменить comment_author_link на comment_author.

Существует также плагин WP No External Links. Он позволяет закрывать от индексации не только ссылки в комментариях, но и все ссылки в записях, или делать переадресацию для них. Однако он работает только у части пользователей 3.0+, у других, и у меня в том числе, он не сохраняет настройки, поэтому закрыть ссылки выборочно в комментариях или записях не получится, только везде сразу.