Задача любой ссылки на сайте – связывать два документа будь-то главная страница, рубрика, запись или файл. И это правильно, удобно и вполне логично. Однако есть вид ссылок, которые нарушают такую идиллию и называются они – циклическими.
Циклическая ссылка – это ссылка, ведущая пользователя на ту же страницу, где он уже находится, тем самым вводя в заблуждение. Такие ссылки не одобряются поисковыми системами.
Многие темы для WordPress буквально «кишат» циклическими ссылками, тем самым ухудшая юзабилити и отношение ПС к сайту, поэтому срочно избавляемся от них.
План статьи:
1. Плагин Remove Redundant Links
2. Как удалить ссылку на саму себя из заголовка статьи
3. Как удалить циклическую ссылку с логотипа
4. Как удалить ссылку на текущую страницу в меню WordPress
5. Применяем ссылку-якорь вместо обычной
6. Как удалить ссылки-якоря из даты в комментариях
7. Как избавиться от циклических ссылок в replytocom
WordPress плагин Remove Redundant Links
Удалить циклические ссылки можно при помощи плагина для ВП Remove Redundant Links.
Достоинства данного метода:
- Простота: скачал, загрузил, установил и готово (не нужно ничего настраивать и копаться в коде).
- Удаляет практически все циклические ссылки: из логотипа, меню, блоков последних и популярных записей, статических страниц, рубрик, архивов и т.п.
Недостатки:
- Как и любой другой плагин он создаёт небольшую нагрузку на сайт.
- Есть вероятность что будет не работать или конфликтовать с другими плагинами. В этом случае делаем все руками по инструкциям ниже.
Принцип работы плагина:
Он удаляет из ссылки:
Дополняя её Тайтлом:
* Перевести тайтл можно в файле remove-redundant-links.php, который находится в папке с плагином. Для этого найдите в нём «You are here» и измените на «Вы находитесь здесь».
И Классом:
* То есть при желании мы можем задать своё оформление.
Как удалить ссылку на саму себя из заголовка статьи
Прежде всего, необходимо найти эту циклическую ссылку. В WordPress она находится в шаблоне сайта, в одном из его файлов: чаще всего в «Одна запись (single.php)», реже в «content-single.php». В зависимости от шаблона – название может быть любым, но чаще всего этот файл называют так.
Если не умеете пользоваться фтп и php-редактором, то отредактировать эти файлы можно из админки, перейдя по адресу:
и открыв в нужный файл:
Теперь наша задача найти код похожий на этот:
И превратить его в подобный:
В итоге вместо ссылки, анкором которой был заголовок статьи, будет выводиться только текст заголовка.
Как удалить циклическую ссылку с логотипа
Ссылка лежит в файле шаблона «Заголовок (header.php)».
Наша задача указать, что на главной странице сайта ссылка должна отсутствовать, а на остальных показываться. Для этого следует воспользоваться простым php-условием:
if ( is_home() && !is_paged() ) {
echo('<p class="logo">Site.ru</p>'); // код, который будет выводится на главной странице
} else {
echo('<p><a class="logo" href="/">Site.ru</a></p>'); // действие для остальных страниц
}
?>
Внимание! Если ссылка и логотип имеет такой вид:
Тогда, прежде чем его «оборачивать» в php-условие, его следует упростить (заменить на простой html-код), иначе условие не сработает, и вместо сайта вы увидите белую страницу. Вот как его нужно переделать:
То же самое касается и логотипа (если он задан картинкой):
Этот код нужно поменять на:
А потом уже его помещать в php-условие.
Меню может выводиться разными способами, но в большинстве тем для Вордпресс оно выводится с помощью функции wp_nav_menu.
Для начала найдём меню:
• Если оно в верхней части сайта, значит открываем файл «Заголовок (header.php)»;
• Если в нижней – «Подвал (footer.php)»;
• Если в боковой – «Боковая колонка (sidebar.php)».
Теперь нужно заменить wp_nav_menu() на wp_nav_menu_extended()
Пример:
Теперь открываем файл «Функции (functions.php)»
И после:
С новой строки вставляем такой код:
$_echo = array_key_exists('echo', $args) ? $args['echo'] : true;
$args['echo'] = false;
$menu = wp_nav_menu($args);
// Load menu as xml
$menu = simplexml_load_string($menu);
// Find current menu item with xpath selector
if (array_key_exists('xpath', $args)) {
$xpath = $args['xpath'];
} else {
$xpath = '//li[contains(@class, "current-menu-item") or contains(@class, "current_page_item")]';
}
$current = $menu->xpath($xpath);
// If current item exists
if (!empty($current)) {
$text_node = (string) $current[0]->children();
// Remove link
unset($current[0]->a);
// Create required element with text from link
$element_name = $args['replace_a_by'] ? $args['replace_a_by'] : 'span';
$dom = dom_import_simplexml($current[0]);
$n = $dom->insertBefore(
$dom->ownerDocument->createElement($element_name, $text_node),
$dom->firstChild
);
$current[0] = simplexml_import_dom($n);
}
$xml_doc = new DOMDocument('1.0', 'utf-8');
$menu_x = $xml_doc->importNode(dom_import_simplexml($menu), true);
$xml_doc->appendChild($menu_x);
$menu = $xml_doc->saveXML($xml_doc->documentElement);
if ($_echo) {
echo $menu;
} else {
return $menu;
}
}
Теперь циклические ссылки в категориях исчезнут.
Использование ссылки-якорь
Для тех, кто не хочет лезть в программирование или у кого-то другой движок есть еще пара вариантов, как убрать эти нехорошие ссылки сами на себя. Сейчас распишу первый. Метод этот прост. Нужно в конец ссылки подставить хэш-тег (символ «решетка»).
К примеру, было так:
Стало так:
Текст после # может быть любой (2, ssilka2, menu и т.п). Получится, по-сути, ссылка-якорь.
Любая ссылка на сайте должна для чего-то служить, поэтому если вы таким методом избавляетесь от цикличных ссылок, чтобы все было логично, нужно сделать закладку (ту область, в которую ведет ссылка-якорь ). Для этого рядом со ссылкой (или в том месте, куда нужно перенести фокус посетителя) вставляем:
(где 2 – это текст, идущий после #)
По итогу получится такой код:
Я считаю, что ссылки с хэш-тегом на конце (ссылка-якорь) не являются циклическими. Во-первых, эти ссылки не открываются в новом окне или вкладке, то есть не вводят пользователя в заблуждение. Во-вторых, они созданы специально для того, чтобы «перемещать посетителя» по текущей странице, а значит, в них не может быть чего-то плохого.
Но те, кто так не считает, может удалять и такие ссылки. К примеру, такие ссылки выводятся в датах в комментариях WordPress’е.
Как удалить ссылки-якоря из даты в комментариях
Те, кто считает, что эти ссылки пользователям не нужны, могут от них избавиться. Можно, конечно, залезть в саму CMS WordPress, но тогда придётся после каждого обновления движка править код, что неудобно. Поэтому предлагаю альтернативу.
Открываем файл «Функции (functions.php)» и после:
Вставляем следующий код:
$GLOBALS['comment'] = $comment;
extract($args, EXTR_SKIP);
if ( 'div' == $args['style'] ) {
$tag = 'div';
$add_below = 'comment';
} else {
$tag = 'li';
$add_below = 'div-comment';
}
?>
<<?php echo $tag ?> <?php comment_class( empty( $args['has_children'] ) ? '' : 'parent' ) ?> id="comment-<?php comment_ID() ?>">
<?php if ( 'div' != $args['style'] ) : ?>
<div id="div-comment-<?php comment_ID() ?>" class="comment-body">
<?php endif; ?>
<div class="comment-author vcard">
<?php if ( $args['avatar_size'] != 0 ) echo get_avatar( $comment, $args['avatar_size'] ); ?>
<?php printf( __( '<cite class="fn">%s</cite> <span class="says">says:</span>' ), get_comment_author_link() ); ?>
</div>
<?php if ( $comment->comment_approved == '0' ) : ?>
<em class="comment-awaiting-moderation"><?php _e( 'Your comment is awaiting moderation.' ); ?></em>
<br />
<?php endif; ?>
<div class="comment-meta commentmetadata">
<?php
/* translators: 1: date, 2: time */
printf( __('%1$s at %2$s'), get_comment_date(), get_comment_time() ); ?><?php edit_comment_link( __( '(Edit)' ), ' ', '' );
?>
</div>
<?php comment_text(); ?>
<div class="reply">
<?php comment_reply_link( array_merge( $args, array( 'add_below' => $add_below, 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?>
</div>
<?php if ( 'div' != $args['style'] ) : ?>
</div>
<?php endif; ?>
<?php
}
Теперь открываем файл «Комментарии (comments.php)» и находим код:
И меняем его на:
Вот и всё. Напоминаю, если при внесении правок изменился цвет или размер шрифта, вы сможете всё это подправить с помощью файла «Список стилей (style.css)».
Как избавиться от циклических ссылок в replytocom
Очень многие вордпресс-темы в комментариях содержат ссылки «Ответить». Выглядят они следующим образом:
Такие ссылки не только являются циклическими, но и могут быть проиндексированы ПС (Гугл проиндексил).
Если они не нужны вовсе можно их удалить. Если вы воспользовались способом выше (удалением ссылок из даты), то в файле finction.php нужно удалить следующий код:
<?php comment_reply_link( array_merge( $args, array( 'add_below' => $add_below, 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?>
</div>
Если они все же нужны, то их можно переделать следующим способом.
В файл functions.php вашего шаблона после:
добавляем такой код:
$comment = get_comment( $comment );
// If no comment author is blank, use 'Anonymous'
if ( empty($comment->comment_author) ) {
if (!empty($comment->user_id)){
$user=get_userdata($comment->user_id);
$author=$user->user_login;
} else {
$author = __('Anonymous');
}
} else {
$author = $comment->comment_author;
}
// If the user provided more than a first name, use only first name
if(strpos($author, ' ')){
$author = substr($author, 0, strpos($author, ' '));
}
// Replace Reply Link with "Reply to <Author First Name>"
$reply_link_text = $args['reply_text'];
$link = str_replace(array($reply_link_text, '<a', '/a>', 'href'), array('Ответ для '.$author, '<span', '/span>', 'rel'), $link);
return $link;
}
add_filter('comment_reply_link', 'add_comment_custom_reply_link', 10, 3);
После этого не забывайте в style.css подправить стили, как вам нравится. К примеру:
margin-bottom:15px;
}
.comment-reply-link {
color: #0c72a2;
}
.comment-reply-link:hover {
text-decoration: underline;
cursor: pointer;
}
P.S.: эту же тему обсуждаем на форуме.
Еще один вариант удалить цикличные ссылки – это скрыть их от ПС с помощью ajax, но об этом мы поговорим в следующей записи.
Для составления этого поста помогли: раз, два, программист Игорь.
Всем спасибо. Если есть вопросы или дополнения, пишите.
Гранд мерси!
Спасибо за статью, скажи а были какие-то реально результаты в плане роста позиций после замены всего этого на сайтах где были цикличные ссылки?
Такое сложно проверить. Нужно ставить эксперименты… Но мое мнение такое. Представь, что есть 1000 мелочей-ошибок, исправив которые получишь топ 1 в ПС. Исправив 1-2 ошибки, можно даже не заметить изменений позиций. Так же тут. Не думаю, что убрав ссылки «сами на себя» на сайте улучшаться позиции, но плюсом это точно станет, хоть и не большим.
Результаты как такие могут не быть заметны, но известный блоггер Devaka еще в 2010 с циклическими ссылками эксперимент проводил. Их тупо не индексируют как надо, в следствии теряем вес.
8)
Приветствую. Отличная статья, дали всем тему для экспериментов)
Подскажите, как на существующем многостраничнике быстро найти такие циклические ссылки (без разницы какая CMS)? Xenu, SEO Frog, или какой сервис порекомендуете для таких аудитов?
Думаю вариантов много, но пока знаю только: saitreport.ru
Вот только там ссылки с хеш-тегом он тоже считает циклическими. Зато умеет много чего еще и выдает удобные отчеты.
Тарифы на однократный анализ
До 250 страниц в анализе — 70 руб.
До 1000 страниц в анализе — 100 руб.
До 5000 страниц в анализе — 330 руб.
До 10000 страниц в анализе — 600 руб.
До 20000 страниц в анализе — 1000 руб.
До 50000 страниц в анализе — 2500 руб.
До 100000 страниц в анализе — 5000 руб.
До 300000 страниц в анализе — 16500 руб.
До 500000 страниц в анализе — 25000 руб.
Спасибо друг! Поковыряюсь на своем сайте на досуге!
Кстати такой вопрос -если ссылки в нофолоУ всё равно лучше ее сделать не циклической?
Ссылка в nofollow все равно остается ссылкой.
Напомни пожалуйста, где посмотреть код, чтобы на главной странице использовать свое меню. У меня все меню в nofollow, хочу на главной открыть его.
Помоему на твоем сайте давно видел статью, там код «условие» для главной страницы как то приписывалось, не могу найти!
Так я тут же в этой статье написал: https://9seo.ru/kak-udalit-ciklicheskie-ssylki/#logo
Не получается! Если разместить такой код, то на всех страницах(включая главную) срабатывает только второе условие. У меня главная это обычная страница,где в настройка стоит сделать главной.
Та же история…
а так?
<?php
if ( is_home()) {
echo('Site.ru’); // код, который будет выводится на главной странице
} else {
echo(‘Site.ru‘); // действие для остальных страниц
}
?>
Не работает. По-прежнему срабатывает 2 условие…
В абзаце про удаление ссылок из меню написано «И перед:
<?php"
Разве не после <?php надо вставлять?
Заработался… Все верно — после. Исправил.
Спасибо, тоже терпеть не могу циклические ссылки, везде стараюсь их убирать.
Ооо, спасибо большое. Так как я новичок в SEO, я никогда даже не задумывался о циклических ссылках
Добавлю 5 копеек. У меня не сработало условие is_home() && !is_paged() . Не понимало где главная. Вот это условие сработало — is_home() || is_front_page()
Саня, спасибо! полезная статья а то всё финстрипы да путешествия. Побольше бы таких полезностей. Лайк
Пожалуйста. Заходите еще
«Тогда, прежде чем его «оборачивать» в php-условие, его следует упростить (заменить на простой html-код), иначе условие не сработает, и вместо сайта вы увидите белую страницу.»
зачем? ведь в пхп есть слияния. можно спокойно писать
Спасибо. В php просто не особо силен.
Почему сам на блоге не убрал циклические ссылки?
хз) Щас частично убрал. Надо найти время и заняться. Какое-то у меня хреновое отношение к блогу. Блог как хобби.
Спасибо за очень полезную статью!!! Все работает! Хотелось бы еще узнать как исключить циклические ссылки в сайдбаре для «Свежих записей». Для категорий я нашел как исключить а для записей — не нахожу!
Привет! Есть решение: обновил пост, читай тут
Не подскажите, как убрать ссылку с показа рубрики в странице? Буду благодарен за ответ.
Ты имеешь ввиду ссылку из меню?
Нет, я имел в виду, ссылки, из рубрик, которые показывают, в какой рубрике находится статья. Но я уже все сделал.
По поводу удаления ссылок с даты, хочу добавить, что не обязательно вставлять этот большой код, достаточно убрать строчку ( get_comment_link( $comment->comment_ID ), она находится в файле comment-template.php не знаю как у вас, у меня на 1724 строке. Только удалите код полностью между . весь я его написать не могу, в комментариях он не выводится.
Спасибо. Все работает. Но такая штука. Убрал циклицность из меню, у меня слетают стили для этих меню. Может в коде можно прописать, чтобы стили оставались? Подскажите, пожалуйста, что можно сделать.
Конечно будет слетать — у тебя стили прописаны для ссылки, а она превращается в текст. Нужно свои стили прописать к тексту (такие же как к ссылке).
Как вычислить все циклические ссылки на сайте?
Есть различные сервисы и инструменты. Вот тут к примеру можно: saitreport.ru
Достойный мануал. Респектос!
Воспользуюсь ка я плагином) А то не напортачить бы что нибудь в коде) Спасибо за статью, буду проверять как повлияет на блог удаление ссылок)
Я плагин поставила, торможения не заметила и кстати плагин — это тоже код
Здравствуйте. Плагин помог, но перестал работать шорткод. Пытался поступить по Вашему описанию, но там не все так просто, лино для меня далекого от программирования. Если вышлю код сможете посмотреть?
Извините, нет времени. Да и не сильно я в этом силен. Вам лучше обратиться за помощью к фрилансерам.
Александр, а как Вы удалили ссылку на главную из заголовка статьи и циклические ссылки в свежих записях? (просто у меня такая же тема, никак не могу сделать.)
Это в коде надо править. Если код не понимаете, то лучше поставить плагин
Вот интересно,если на сайте около десяти тысяч страниц и каждая страница ссылается на главную через урл картикни в шапке,надо ли закрывать или удалять этот url картинки на главную,и как это отразится на весе страниц в целом для сайта?Вообще в планах чтобы трафик шёл на категории и сами страницы с постами.Поэтому и спрашиваю надоли удалять ссылку на главную.
Я думаю, что не надо удалять. Раньше может это бы и сработало. Сейчас скорее всего не заметишь результат. Вообще. Закрывал в аякс на нескольких сайтах целиком шапку вместе с меню + блоки в сайдбаре — результата никакого.
Жалко, что 2 года назад я это не прочитал :O(
Здравствуйте! Спасибо за статью, вспомнил, что когда-то именно по ней настроил Remove Redundant Links для ВП. Сейчас середина 17-го, прошло 2 года с момента написания статьи и 7 лет с момента эксперимента Деваки) Объективно что-нибудь изменилось? Лично у меня очень противоречивое отношение к наличию/отсутствию циклических ссылок. Во-первых, если пройтись по топам разных тематик (включая всеми любимые «пластиковые окна»), то везде есть те, кто прекрасно себя чувствуют с циклическими ссылками. Во-вторых, за несколько лет аналитики в визоре и живых разговоров с пользователями я часто наблюдал негативную реакцию на невозможность нажать на ссылку. Людей это раздражает. По их же словам, они не хотят задумываться, на какой они странице сейчас (и это нормально, потому что мы знаем, что максимальное время концентрации современного пользователя — максимум 10 секунд). Они просто хотят нажать. А им не дают. То есть с точки зрения UX пока больше негатива. А что с точки зрения СЕО? Кто-нибудь проводил эксперименты, анализировал динамику позиций?
Здравствуй!
Думаю, даже если кто-то проводил эксперименты, то вряд ли пришел к каким-то внятным выводам. Факторов очень много и такая мелочь, как циклические ссылки, не может сильно влиять на результаты.
Но как я люблю говорить: «Все складывается из мелочей».
А для себя решил, что циклические ссылки не нужны пользователю. Он хочет на них кликнуть лишь потому что они вводят его в заблуждение. Находясь на этой самой странице, пользователь думает, что это еще одна какая-то страница с нужной ему информацией и кликает поэтому…
Тема еще жива?
У меня такой вопрос. На страницах категорий выводятся около анонсов статей: дата, автор, метки и название категории. И если ты находишься в этой же категории, то название текущей категории рядом со статьями не очень уместно.
Пусть на главной странице или в поиске, или если статья из дочерней категории, то пусть в родительской будет видео… но не в текущей категории!
Как это сделать?
Я не вывожу название категорий на страницах категорий.
Сделать можно так:
*тут код, который выводит название рубрики*
<?php }?>
Если хочешь оставить вывод в родительской, а в дочерних категориях не выводить, то примерно такой код:
*тут код, который выводит название рубрики*
<?php } ?>
где 1,2,3,4,5,6,7,8,9 — это ID родительских рубрик, в которых нужно выводить код.
Автор, спасибо за статью. Подскажи, как вписать класс в этот span теперь? Я про wp_nav_menu_extended.
Честно говоря, я бы не сказал, что нагрузка небольшая, потому что она внушительная!
А как убрать такую ссылку из хлебных крошек?
Вручную не подскажу как. Плагин Remove Redundant Links не удаляет?
В моей теме такого кода нет
Чтобы плагин не убивал модалки, находим в файле class.Remove_Redundant_Links.php строчки
if ( ! isset ( $attr_arr[‘href’] ) )
{
return $str;
}
и ниже дописываем:
if (( $attr_arr[‘href’] ) == ‘#’)
{
return $str;
}
Спасибо.
Решение с кодом помогло, а вот плагин сломал галерею.