Я переделываю тему одного блога, пытаясь снизить количество индексируемых внутренних ссылок. Если это простая ссылка стандартной конструкции, то никакой трудности подставить в нее rel="nofollow" нет. Основная же загвоздка заключается в ссылках, создаваемых встроенными функциями.
Например, совершенно не ясно, как сделать неиндексируемой вот такие ссылки:
1 2 3 | <?php the_author_posts(); ?> <?php the_category(); ?> <?php the_tags(); ?> |
и другие подобные.
Так же не ясно, как сделать неидексируемыми ссылки, создаваемые виджетами? Например, вот этими: WP_Widget_Pages, WP_Widget_Calendar, WP_Widget_Archives, WP_Widget_Links, и другими.
Я понимаю, что можно разобрать до винтиков default-widgets.php, но все же считаю, что вмешиваться в системные файлы не совсем правильно.
Есть ли какой-нибудь способ сделать ссылки, создаваемые базовыми функциями и виджетами, неиндексируемыми? Может фильтры какие, прописываемые в functions.php?








the_author_posts отдает число (кол-во постов автора текущего поста)
the_category – можно сделать хук
что-то типа:
add_filter('the_category', 'fb_the_category'); function fb_the_category($text) { $text = preg_replace('#rel="#', 'rel="nofollow ', $text); return $text; } [/cc] the_tags - тоже самое, только хук на the_tags WP_Widget_Pages - хук на wp_list_pages, но немного изменится ф-ция замещенияadd_filter('wp_list_pages', 'fb_wp_list_pages'); function fb_wp_list_pages($text) { $text = preg_replace('#href="#', 'rel="nofollow" href="', $text); return $text; } [/cc] для WP_Widget_Calendar:add_filter('get_calendar', 'fb_get_calendar'); function fb_get_calendar($text) { $text = preg_replace('#href="#', 'rel="nofollow" href="', $text); return $text; } [/cc] для WP_Widget_Archives:add_filter('get_archives_link', 'fb_get_archives_link'); function fb_get_archives_link($text) { $text = preg_replace('#href='#', 'rel="nofollow" href='', $text); return $text; } [/cc] Где-то так... ЗЫ: всё это не проверял, но должно работать ЗЗЫ: можно всё это совместить в одну ф-цию и только фильтров напихатьПрименил несколько фильтров – работают. Большое спасибо!
Наверняка то же самое можно сделать и для других функций?
Например, для the_tags работает такое:
2
3
4
5
function fb_the_tags($text) {
$text = preg_replace('#rel="#', 'rel="nofollow ', $text);
return $text;
}
А вот для ссылки на посты автора
для
the_author_posts_link:
2
3
4
5
function fb_the_author_posts_link($text) {
$text = preg_replace('#href="#', 'rel="nofollow" href="', $text);
return $text;
}
(регэксп отличается)
Работает! Премного благодарен!
А для
а у этой ф-ции нет хука, но никто не мешает в буфер сохранять что он выводит:
2
3
4
5
6
7
8
9
ob_start();
comments_popup_link();
$text = ob_get_contents();
ob_end_clean();
$text = preg_replace('#href="#', 'rel="nofollow" href="', $text);
echo $text;
}
Что-то не работает… :(
а в самой теме вместо comments_popup_link();
вставить fb_comments_popup_link();
ЗЫ: я не пробовал, но должно работать; если таки не заработает – попробую, но попозже…
В принципе, для comments_popup_link не принципиально – я могу заменить эту функцию просто выводом количества комментариев, а линк и тайтл подставлю вручную:
А вот что делать с RSS лентами, которые автоматически формирует движок?
RSS (полн) – /feed
RSS (сокр) – /feed/rss
RSS комментариев к посту – например, /2978/feed
RSS комментариев в блоге – /comments/feed
В явном виде ссылок на них нет, но при анализе внутренних ссылок на страницах они фигурируют и индексируются.
вы хотите вместо
сделать
?
Спасибо, что напомнили! Уже догадался, что в link тоже можно напрямую подставлять nofollow.
Спасибо еще раз – ваши ответы достойны отдельной статьи на http://n-wp.ru.
PS. Осталась одна загвоздка – не могу избавиться от индексируемых ссылок в трекбеках/пингах/комментариях. В блоге используется функция wp_list_comments, которую предоставляет сам движок WordPress . Лезть во внутрь движка совсем не хочется, а делать фильтры я не мастер.
2
3
4
5
6
7
8
9
ob_start();
wp_list_comments($args, $comments);
$text = ob_get_contents();
ob_end_clean();
$text = preg_replace('#<a href="#', '<a rel="nofollow" href="', $text);
echo $text;
}
в теме используйте fb_wp_list_comments вместо wp_list_comments
можно сделать через аргумент callback для ф-ции wp_list_comments:
http://codex.wordpress.org/Function_Reference/wp_list_comments#Comments_Only_With_A_Custom_Comment_Display
там нужно будет скопировать большую часть кода и добавить нофоллоу
Большое спасибо! Первый вариант полностью устраивает.
Работает!
Единственное но. Когда я использовал comments_popup_link, то указывал свои аргументы:
< ?php comments_popup_link(__('#', 'piano-black'), __('1', 'piano-black'), __('%', 'piano-black')); ?>[/cc] Это работало - цифры выводились так, как я задумал. В случае с заменой мои параметры не работают - WordPress выводит то, что заложено у него по-умолчанию (1 comm.) .2
3
4
5
6
7
8
9
ob_start();
comments_popup_link($zero, $one, $more, $css_class, $none);
$text = ob_get_contents();
ob_end_clean();
$text = preg_replace('#href="#', 'rel="nofollow" href="', $text);
echo $text;
}
и просто название ф-ции замените
по поводу рсс позже отвечу
Да, работает! Премного благодарен!
А как можно сейчас закрыть обычную исходящую ссылку со страницы? Ведь уже ноуидексы и ноуфолловы не работают? Дело в том, что мне надо , чтобы ещё была спрятана рефссылка. То есть, как закрыть вот такую конструкцию от индексации?
Как сделать внешние ссылки внутренними | Плагин RC Link Redirector
Сенк ю вери мач! А если речь, например, будет идти о хтмл, как быть?
Использовать сервис коротких ссылок.
Но тогда же всё равно останутся ссылки, но уже на сервис коротких ссылок…?
Кстати, написано, что этот плагин только до версии 2.6. Да и проверил я его – не работает. А какой объективный сервис есть для определения исходящих ссылок? А то в разных сервисах разные данные…