» » » Циклические ссылки или ссылка на саму себя
logotip

Циклические ссылки или ссылка на саму себя

Всем привет! Сегодня на seo-mayak.com мы будем говорить о циклических ссылках.

Циклические ссылки встречаются довольно часто, и на WordPress блогах, и на других CMS, как говориться, чтобы найти «живой» пример такой ссылки, далеко ходить не надо. Велика вероятность, что и у Вас на сайте есть хоть одна циклическая ссылка.

Буду откровенным, у себя на блоге я решил данную проблему совсем недавно, наконец-то дошли руки, хотя о циклических ссылках я конечно знал давно.

Итак, определение для тех, кто не в курсе.

Циклические ссылки — это ссылки, ведущие на туже страницу, где они расположены. На такую ссылку можно кликать бесконечно и всегда будет подгружаться один и тот же контент, т.е. это ничто иное, как ссылка на саму себя. Потому они и называются циклическими, что получается некий замкнутый цикл.

Так проблема это, или нет? Вот об этом и пойдет сегодня речь. Поехали!

Как найти циклическую ссылку

На 100% уверен, что у начинающих мастеров веб-индустрии циклические ссылки есть: в меню страниц, в меню рубрик, в заголовке сайта (в некоторых случаях в логотипе) или в заголовке статьи, нередко циклические ссылки можно встретить в подвале.

Определить просто. Практически на всех сайтах есть страница «Контакты». Так вот, находясь на странице «Контакты», нажмите опять на «Контакты» и если страница обновится, т.е. подгрузится заново, то можете себя поздравить — вы только что нашли циклическую ссылку.

tciclicheskie-ssylki

На самом деле радоваться тут особо нечему, так как вы обнаружили проблему. Не скажу, что проблема первостепенная, но каждый уважающий себя веб-мастер, обязательно должен с ней разобраться и сейчас объясню почему.

Ссылка на саму себя — проблема или нет

Как я уже сказал выше, по моему мнению ссылка на саму себя не относится к такому типу проблем, которые требуют первостепенного решения. Если взять в качестве примера мой блог, то он неплохо развивался при наличии циклических ссылок.

Но почему же тогда интернет полон кричащих статей, в которых авторы советуют обязательно избавляться от ссылок на самих себя?

Известный блогер Devaka, еще в 2010 году, провел эксперимент с циклическими ссылками, по завершению которого сделал интересный вывод:

Как видим, ни один из проверочных способов не дал результатов, другими словами, ссылки со страницы на саму себя не работают (не участвуют в ссылочном графе). Удаление подобных ссылок со страницы будет своего рода оптимизацией, так как другие страницы сайта недополучают статический вес из-за присутствия неработающих линков.

Выходит, недополучение статического веса важными страницам и есть основная проблема циклических ссылок.

Может быть статический вес не так важен для рубрик, которые зачастую закрыты от индексации или для статических страниц, но недополучение статического веса главной страницей, наводит на мысли.

Известно, что на главной сосредотачивается основной вес сайта и если теряется даже небольшая его часть, то это отрицательно сказывается на всем проекте.

Тем более в 90% случаев на главной располагаются минимум две (бывает и больше) циклические ссылки — это ссылка в заголовке с анкором «Названия сайта» и ссылка в меню с анкором «Главная». Такие дела!

Кроме того, считаю, что циклические ссылки оказывают негативное влияние на поведенческий фактор.

Из всего вышесказанного можно сделать вывод — бороться с циклическими ссылками все же надо, этим мы сейчас и займемся. Приступим!

Как убрать циклические ссылки с главной страницы

Для начала, давайте уберем ссылку на саму себя из заголовка сайта. Открываем файл header.php и ищем строчку, отвечающую за вывод заголовка. Например, что похожее на это:

<h1><a href="<?php echo esc_url( home_url( '/' ) ); ?>"><?php bloginfo( 'name' ); ?></a></h1>

Или на это:

<h1 itemprop="headline"><a href="<?php bloginfo('url');?>"><?php bloginfo('name');?></a></h1>

Шаблоны все разные, поэтому могут быть и другие варианты.

Что нам надо сделать? Нам надо создать сценарий-условие, которое будет заключаться в следующем. Если открыта главная страница, то ссылка с заголовка будет превращаться в постой текст.

<?php if (is_front_page() || is_home()) : ?>
<h1>SEO Маяк</h1>
<?php else : ?>
<h1><a href="/">SEO Маяк</a></h1>
<?php endif; ?>

В примере я заменил php функции, выводящие URL и название сайта, на их текстовый вариант. Подробней об этом здесь.

Давайте я поясню, как работает данный сценарий. Здесь применяется конструкция if/else, создающее условие. Другими словами, если (if) открыта главная страница (is_home), выводим заголовок сайта без ссылки, иначе (else) выводим заголовок с атрибутами ссылки и завершаем сценарий (endif;).

Конечно придется подправить стили, без этого никак, ведь неактивный заголовок превратится в простой текст, а в style.css или другом css файле, стили прописаны для ссылки.

В силу разнообразия WordPress-тем, я не могу привести какой-либо стандартный пример стилевого оформления, понятно, что у каждого сайта свой дизайн и свои стили, так что новичкам будет еще один повод вникнуть в CSS.

Теперь давайте разберемся с логотипом. Опять же, в разных шаблонах код вывода логотипа может отличатся. Для примера, приведу код из стандартной темы WordPress — Twentyfourteen:

<a href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home">
<img src="<?php header_image(); ?>" width="<?php echo get_custom_header()->width; ?>" height="<?php echo get_custom_header()->height; ?>" alt="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>"></a>

Применим знакомую нам конструкцию if/else. В итоге должно получится так:

<?php if (is_front_page() || is_home() ) : ?>
<img src="<?php header_image(); ?>" width="<?php echo get_custom_header()->width; ?>" height="<?php echo get_custom_header()->height; ?>" alt="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>">
<?php else : ?>
<a href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home"><img src="<?php header_image(); ?>" width="<?php echo get_custom_header()->width; ?>" height="<?php echo get_custom_header()->height; ?>" alt="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>">
</a>
<?php endif; ?>

Как видите, ничего сложного!

Есть еще одна часто встречающиеся циклическая ссылка на главную, которая находится в меню страниц, но об этом мы уже поговорим в следующем разделе.

Как убрать циклические ссылки из меню страниц

Здесь многое зависит от функции, которая выводит данное меню. В wordPress заложено три функции:

1.wp_list_pages()
2.wp_page_menu()
3.wp_nav_menu()

У данных функций есть определенная структура взаимедействий. Базовой функцией является wp_list_pages(). На ее основе работает функция wp_page_menu(), которая отличается от своего родителя лишь возможностью выводить ссылку на главную страницу.

Функция wp_nav_menu волне самостоятельная и отвечает за вывод произвольного меню. Но, в случаи, если функция не найдет ни одного произвольного меню, то следуя параметрам заложенным по умолчанию, передаст все свои полномочия функции wp_page_menu(), которая сформирует меню из имеющихся страниц.

Теперь надо выяснить, какая из функций отвечает за вывод меню страниц в вашей теме. Искать одну из вышеперечисленных функций, надо в том же файле header.php.


Функция wp_list_pages()

В первую очередь давайте рассмотрим функцию wp_list_pages(), которая выводит в меню все существующие страницы, кроме главной. Поэтому ссылка на главную в коде прописывается отдельно.

<ul id="nav">
<li><a href="<?php echo esc_url( home_url( '/' ) ); ?>">Главная</a></li>
<?php wp_list_pages('sort_column=menu_order&title_li=&depth=1'); ?>
</ul>

Здесь просто надо добавить уже знакомый нам сценарий. В итоге должно получится так:

<ul id="nav">
<?php if ( is_home() ) : ?>
<li>Главная</li>
<?php else : ?>
<li><a href="/">Главная</a></li>
<?php endif; ?>
<?php wp_list_pages('sort_column=menu_order&title_li=&depth=1'); ?>
</ul>

Пришло время обезвредить циклические ссылки во всех оставшихся пунктах меню, выводимого функцией wp_list_pages().

Разработчики WordPress предусмотрели специальный CSS-класс, который автоматически подставляется к активному пункту меню:

tciclicheskie-ssylki1

Раз у нас есть уникальный класс current_page_item, за который можно зацепиться, значит стоит попробовать составить регулярное выражение.

Вот что у меня получилось:

function mayak_list_page_no_link($no_link){
$gg_mk = '!<li class="(.*?)current_page_item"><a(.*?)>(.*?)</a>!si';
$dd_mk = '<li class="$1current_page_item">$3';
return preg_replace($gg_mk, $dd_mk, $no_link );
}
add_filter('wp_list_pages', 'mayak_list_page_no_link');

Теперь все названия активных пунктов меню будут выводится в виде простого текста, останется лишь подправить слили. Напомню, что стили надо прописывать для класса current_page_item. Например:

.current_page_item{
font-size: 16px // размер шрифта
color: #fffff // цвет текста
background:#F0F0F0; //цвет фона
}


Функция wp_page_menu()

Если в вашей теме, формированием меню страниц занимается функция wp_page_menu(), то ссылка на главную может отдельно не прописывается, а задаваться в параметрах. Например:

<?php wp_page_menu('show_home=Главная'); ?>

В этом случаи, можно справится с циклическими ссылками одной функцией:

function mayak_page_menu_no_link($no_link){
$gg_mk = '!<li class="(.*?)current_page_item"><a(.*?)>(.*?)</a>!si';
$dd_mk = '<li class="$1current_page_item">$3';
return preg_replace($gg_mk, $dd_mk, $no_link );
}
add_filter('wp_page_menu', 'mayak_page_menu_no_link');

Осталась последняя функция, которая может использоваться разработчиками тем WordPress для построения меню страниц.


Функция wp_nav_menu()

Функция wp_nav_menu() появилась с версии WordPress 3.0 и используется большинстве современных шаблонов.

Как я уже говорил выше, данная функция выодит произвольного меню, если таковое было создано. Но если ни одного произвольного меню не было найдено, то согласно настройкам по умолчанию, за вывод списка страниц будет отвечать знакомая нам функция wp_page_menu().

Получается, если на сайте нет активных собственных менюшек, то для борьбы с циклическими ссылками можно использовать функцию-фильтр mayak_page_menu_no_link(), которую я привел выше..

Но если произвольное меню было создано и находится в активном состоянии, то в работу вступает функция wp_nav_menu(), для которой требуется уже другое лекарство .

Придется немного подкорректировать функцию:

function mayak_nav_menu_no_link($no_link){
$gg_mk = '!<li(.*?)class="(.*?)current_page_item(.*?)"><a(.*?)>(.*?)</a>!si';
$dd_mk = '<li$1class="\\2current_page_item\\3">$5';
return preg_replace($gg_mk, $dd_mk, $no_link );
}
add_filter('wp_nav_menu', 'mayak_nav_menu_no_link');

Теперь должно быть все в порядке. Пришло время разобраться с ссылками в меню категорий.

Как удалить циклические ссылки из меню категорий

Меню категорий на WoirdPress в 90% случаях формирует функция wp_list_categories() (бывают редкие исключения). Если в вашем шаблоне применяться другая функция, то пишите в комментариях, что-нибудь придумаем.

Для извлечения циклических ссылок из wp_list_categories() применим следующий фильтр:

function mayak_category_no_link($no_link){
	$gg_mk = '!<li class="cat-item (.*?) current-cat"><a (.*?)>(.*?)</a>!si';
	$dd_mk = '<li class="cat-item \\1 current-cat">\\3';
	return preg_replace($gg_mk, $dd_mk, $no_link );
}
add_filter('wp_list_categories', 'mayak_category_no_link');

Роботу функции вы можете наблюдать на моем блоге. Фильтр работает, как для категорий первого уровня вложенности, так и для всех других уровней.

Ссылка на саму себя в заголовке статьи

В некоторых темах, непонятно зачем, заголовок записи в файле single php или в одном из прикрепленных к нему файлов, заключен в ссылку. Например так:

<h2><a href="<?php the_get_permalink() ?>"><?php the_title(); ?></a></h2>

Или так:

<?php the_title( '<h1 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h1>' ); ?>

Могут быть и другие варианты. Получается ссылка на туже страницу, т.е пресловутая ссылка на саму себя.

Для удаление циклической ссылки из заголовка записи, достаточно просто убрать из кода атрибуты ссылки.

Возможно в природе WordPress есть другие виды циклических ссылок, которые я не описал. Вы сильно поможете, если приведете в комментариях соответствующие примеры.

До встречи!

С уважением, Виталий Кириллов

Комментарии: 92

  1. артем:

    Спасибо, Виталий, за урок. Тоже давно хотел разобраться с циклическими ссылками. Только что сходу удалил ссылку с логотипа, теперь буду разбираться дальше.

    Ответить
  2. Наталья:

    И снова всеобъемлюющая доходчивая статья!)) Спасибо, Виталий!
    Поспорила бы, как лингвист, насчет названия «циклические ссылки», но это не к Вам, раз уж все их так называют)
    Как оказалось, у меня на старой версии сайта такие ссылки отсутствуют в большей степени, нашла вот у себя такой код, давно вставляла:

    function no_link_current_page( $p ) {
       return preg_replace( '%(current_page_item\"><a).*?(>)%', '$1$2', $p, 1 );
    }
    
    function no_link_current_cat( $c ) {
        return preg_replace( '%(current-menu-item[a-z0-9 _-]*?\"><a).*?(>)%', '$1$2', $c, 1 );
    }
    
    add_filter( 'wp_list_pages', 'no_link_current_page' );
    add_filter( 'wp_nav_menu', 'no_link_current_cat' );
    

    функционал такой же, как Вы предлагаете, но регулярка попроще.
    А вот в новой версии сайта, как оказалось, этот код не работает (из-за стилей наверное), так что придется дорабатывать.
    Так что спасибо за полезную информацию!

    Ответить
    • Виталий Кириллов:

      Здравствуйте Наталья! Да я знаком с представленными Вами регулярными выражениями. Но мне показалось, что в таком виде они плохо поддаются доработке. В выводе менющек довольно много нюансов, с одним из них вы и столкнулись в своей новой теме. На самом деле не важно, как составлено регулярное выражение, самое главное, чтобы оно работало!

      Ответить
      • Наталья:

        Это точно — если работает, лучше ничего не трогать)) Кстати, заработало у меня почти все, до остального позже доберусь)

        Ответить
    • Александр:

      Заработал данный вариант, даже стили не пришлось перебирать.

      Ответить
      • Александр:

        Столкнулся с проблемой данного варианта, валидатор микроразметки начал ругаться, что пустые </a>, пришлось переделывать на вариант, который в статье.

        Ответить
  3. артем:

    С логотипом никаких проблем не возникло, но вот ссылки в меню и меню категорий не удалось убрать. Меню у меня выводится при помощи функции wp_nav_menu(), но вставка кода в functions.php ни к чему не приводит. Виталий! Если это не сложно, не могли бы Вы посмотреть в чем может быть дело?

    Ответить
    • Виталий Кириллов:

      Артем, Вы используете произвольное меню или страницы выводятся по умолчанию?

      Ответить
      • артем:

        использую произвольное меню.

        Ответить
        • Виталий Кириллов:

          Артем, в функции wp_nav_menu может быть задан другой класс для активного пункта. У вас задан класс current-menu-item, замените его в функции. Должно получиться так:

          function mayak_nav_menu_no_link($no_link){
          $gg_mk = '!<li(.*?)class="(.*?)current_menu_item(.*?)"><a(.*?)>(.*?)</a>!si';
          $dd_mk = '<li$1class="\\2current_menu_item\\3">$5';
          return preg_replace($gg_mk, $dd_mk, $no_link );
          }
          add_filter('wp_nav_menu', 'mayak_nav_menu_no_link');
          
          Ответить
          • артем:

            заменил, но, к сожалению, не срабатывает у меня функция ((

            Ответить
            • Виталий Кириллов:

              Не правильно класс в примере прописал, надо через тире. Попробуйте:

              function mayak_nav_menu_no_link($no_link){
              $gg_mk = '!<li(.*?)class="(.*?)current-menu-item(.*?)"><a(.*?)>(.*?)</a>!si';
              $dd_mk = '<li$1class="\\2current-menu-item\\3">$5';
              return preg_replace($gg_mk, $dd_mk, $no_link );
              }
              add_filter('wp_nav_menu', 'mayak_nav_menu_no_link');
              
              Ответить
          • артем:

            Виталий, спасибо огромное, теперь работает. Осталось стили подправить.

            Ответить
  4. артем:

    Виталий, огромное спасибо, всё получилось и со стилями разобрался. Всё работает, как часы. 🙂

    Ответить
  5. артем:

    Виталий, добрый день еще раз. Рано я начал радоваться, но выпилить циклические ссылки из меню рубрик и нижнего меню (в футере) не выходит. перепробовал уже и так и эдак. посмотрите, пожалуйста, в чем может быть дело, если не затруднит.

    Ответить
    • Виталий Кириллов:

      Здравствуйте Артем! У вас для активного пункта меню вообще не выводиться класс, хотя должен. Вы как выводите рубрики, через виджет «Рубрики»?
      Та же ситуация с меню страниц в подвале.

      Ответить
  6. артем:

    Да, в настоящее время в сайдбаре рубрики выводятся с помощью виджета. В футере меню выводится посредством настроек темы, а не через админку wp.

    Ответить
    • Виталий Кириллов:

      Артем, темы все разные, по видимому у Вас просто отключен вывод класса для активного пункта меню. Попробуйте вывести рубрики с напрямую с помощью функции wp_list_categories(). В статье подробно описано, как это сделать и какие параметры передать в функцию для корректной работы. Когда разберемся с рубриками, посмотрим, что у Вас в подвале.

      Ответить
      • артем:

        рубрики с помощью wp_list_categories() в сайдбаре вывести получилось, код работает.
        фильтр mayak_category_no_link($no_link) применил, но циклические ссылки по-прежнему в рубриках не исчезают.((

        Ответить
        • Виталий Кириллов:

          Тогда надо смотреть код, что-то блокирует вывод класса по умолчанию.

          Ответить
          • артем:

            Добрый день, Виталий. Отказался я в конечном итоге от выпиливания циклических ссылок из меню рубрик. И даже не из-за того, что блокировался вывод класса. просто после внедрения кодов для вывода рубрик с помощью wp_list_categories() и выполнения PHP-кода в виджетах, время генерации главной и других страниц сайта возросло в разы!!! например, главная стала грузиться 6,5 секунд! хотя до манипуляция составляло 0,4 сек. поэтому, все вернул на круги своя…оставляю свой выбор в пользу скорости загрузки сайта. да и по сути наличие рубрик в сайдбаре не достаточно оправдано, если все они выводятся в главном меню. и, кстати, еще такой вопрос, как Вы относитесь к дублирующим ссылкам — т.е., когда, например, с главной страницы в анонсе статьи на нее ссылаются заголовок, картинка и кнопка «далее»?

            Ответить
            • Виталий Кириллов:

              Здравствуйте Артем. Жаль, что у Вас не получилось.
              По поводу дублирующих ссылок. Конечно дублирующие ссылки — это плохо. Но здесь вот что важно понимать. Простая ссылки и ссылка картинка не одно и тоже. Ссылка кнопка «далее» не относится к дублирующей, если она добавляет якорь #more в конец URL (посмотрите, как у меня работает).

              Ответить
  7. Алекс:

    Спасибо вам за ваши эксперименты и доходчивый язык

    Ответить
  8. Анастасия:

    Спасибо за статью. Отправляюсь на поиски циклических ссылок и улучшаю сайт!

    Ответить
  9. Станислав:

    Подскажите пожалуйста, а как настроить стили для меню? Все получилось, ссылка на страницу больше не активна, но не могу прописать для нее стили(

    Ответить
  10. Сергей:

    Здравствуйте Виталий. Спасибо большое, все сделал, все работает, правда со стилями пришлось возиться.
    У меня вопрос: Категории у меня скрыты от индексации с использованием вашего ajax метода, я так понимаю мне не нужно избавляться от циклических ссылок? И тут немного подумав, я пришел к тому, что не сработает ваш код, ведь ссылка уже подменяется на span data-link=.
    Поэтому хотел бы добавить для тех, кто все же хочет заморочиться :), что бы код сработал нужно в нём заменить a-ссылку на span. Вдруг кому пригодится.
    Спасибо еще раз!

    Ответить
  11. Александр:

    Добрый день.
    У меня выводится функцией wp_nav_menu(). А как прописать стили для нее, если она выводится в основном меню и в сайдбаре и имеет соответственно разное оформление? Спасибо.

    Ответить
    • Александр:

      Обошелся малой кровью, вставив функцию 2-го комментатора

      Ответить
    • Виталий Кириллов:

      Александр, учитесь работать с браузным расширением Firebug.

      Ответить
      • Александр:

        Спасибо, надо было подольше посидеть, разобрался)

        Ответить
  12. Саня:

    Не проще ли через JS ? И активное меню раскрасили и атрибут href удалили.

    var link = window.location.href;
    $(‘.sub-menu li a[href=»‘+link+'»]’).addClass(‘act’).removeAttr(«href»);

    или так
    var link = window.location.href;
    $(‘.sub-menu li a[href=»‘+link+'»],.menu-item a[href=»‘+link+'»] ‘).addClass(‘act’).removeAttr(«href»);

    Ответить
  13. Александр:

    Подскажите, а можно прицепить функцию допустим к определенному классу (textwidget напр.), если в данном классе так же выводится ссылка на страницу и получается, что она тоже цикличная. Благодарю)

    Ответить
    • Виталий Кириллов:

      Для этого мне надо видеть всю картину целиком.

      Ответить
      • Александр:

        В футере располагается текстовый виджет с ссылками на страницы.

        <a href="#" rel="nofollow">Ссылка</a>

        Можно как-то прицепить данную функцию к определенному div-у или классу?

        Ответить
        • Виталий Кириллов:

          Надо составлять регулярное выражение под конкретную ситуацию.

          Ответить
  14. Виктор:

    Так просто?? Взял на заметку))

    Ответить
  15. Bahus:

    Что добавить в класс .current_page_item, чтобы фон текста стал такого же размера, как при наведении на остальные пункты меню? Сейчас у меня фон стоит точно по размеру текста. Не айс, однако.

    Ответить
    • Виталий Кириллов:

      Чтобы добавить стили при наведении надо прописать псевдокласс «:hover»

      Ответить
      • Bahus:

        Я не про это. Если убрать вашу функцию, то размер фона текущего пункта меню равен фону пункта при наведении. При включенной функции, этот пункт уже не ссылка. Хотелось бы, чтобы фон сразу был больше текста. а то ерунда получается. Наводишь на другие пункты меню — фон увеличивается, а текущий пункт с маленьким фоном.

        Ответить
        • Виталий Кириллов:

          Сделайте внутренние отступы и поставьте приоритет «!important»:

          padding: xx xx !important;
          Ответить
          • Bahus:

            Все получилось. Благодарю.

            Ответить
  16. Евгений:

    Виталий привет! Функция wp_nav_menu срабатывает, но стили почему то нет, не знаешь в чем может быть проблема?

    Ответить
    • Виталий Кириллов:

      Евгений, темы все разные и не всегда даже мне сходу удается определить причину. Как правило каждый случай уникален.

      Ответить
      • Евгений:

        Виталий! у меня меню произвольное, выводится current-menu-item, функцию я в комментах нашел и вставил, все заработало, но вот стили..за стили этого класса отвечает следующий код: .current-menu-item #featured-area{background:url(images/featured.png) no-repeat;position:relative;margin:0 auto;width:1001px;text-align:left;min-height:424px}#feat-content{height:300px}#feat-content и если я прописываю код стиля что ты привел в статье, то у меня ничего не меняется, ужас в меню остается! не знаешь как исправить стиль?

        Ответить
        • Виталий Кириллов:

          Да вроде нормальный вид у меню.

          Ответить
  17. Сергей:

    Здравствуйте. Читаю Ваш блог уже давно. Много что для меня полезного нашел. Вот сейчас хочу убрать циклические страницы, но что-то не выходит. При вставке вашей функции wp_nav_menu() в functions.php циклическая страница исчезает когда находишься на главной, но надпись «Главная» видоизменяется (стает совсем мелкая) и опускается немного ниже. Возможно я конечно что-то делаю не так, так как я новичок в этих делах. И функцию wp_nav_menu() нужно редактировать, либо же просто вставить ваш код?

    Ответить
    • Виталий Кириллов:

      Здравствуйте Сергей! Вы правильно вставили функцию, просто теперь надо править стили для класса current_page_item, о чем я и писал в статье.

      Ответить
      • Сергей:

        в style.css?

        Ответить
        • Виталий Кириллов:

          Да, он самый, хотя в разных шаблонах, к нему могут быть подключены и другие css файлы.

          Ответить
          • Сергей:

            Спасибо Виталий. Но у меня это класса current_page_item нигде нету…(

            Ответить
            • Виталий Кириллов:

              Ну так правильно, его добавить надо. Это класс у Вас добавляется в исходный код для неактивной ссылки.

              Ответить
              • Сергей:

                Здесь я наверное вряд ли разберусь, для это в данный момент «темный лес».

                Ответить
  18. вячеслав:

    Здравствуйте Виталий,подскажите как разобраться с этой задачей. У меня два меню на блоге одно вверху второе в сайтбаре выводятся одной функцией nav_menu. как сделать чтобы стили у каждого меню были разные.Тот клас что вы указале в функции, он меняет стили в обоих меню хотелось бы сделать чтобы у каждого меню были свои стили.

    Ответить
    • Виталий Кириллов:

      Найдите в исходном коде вывод рубрик, и посмотрите какой там класс применяется для активной ссылки.

      Ответить
  19. Den:

    Спасибо большое за познавательный материал, даже и не задумывался никогда о таких ссылках. Теперь все поправил у себя;)
    Будем Вас чаще читать)

    Ответить
  20. Maxim:

    Может кому пригодиться, как я убрал ссылку из заголовка статьи.

    До
    <?php the_title( sprintf( '’, esc_url( get_permalink() ) ), » ); ?>
    После

    Ответить
  21. Виктор:

    Здравствуйте! Подскажите пожалуйста, как вот в этом случае удалить циклическую ссылку с логотипа? Тема наворочаная и не могу разобраться, помогите пожалуйста!

    Ответить
    • Виталий Кириллов:

      Здравствуйте Виктор!

      Весь код я публиковать не стал, хотел обратить ваше внимание на следующий участок:

      <?php if( is_home() || is_front_page() ) echo '<h1>'; else echo '<h2>'; ?>
      <?php if( tie_get_option('logo_setting') == 'title' ): ?>
      <a data-link="<?php echo home_url() ?>/"><?php bloginfo('name'); ?></a>
      <span><?php bloginfo( 'description' ); ?></span>
      <?php else : ?>
      <?php if( tie_get_option( 'logo' ) ) 
      $logo = tie_get_option( 'logo' );
      else $logo = get_stylesheet_directory_uri().'/images/logo.png';
      ?>
      <a title="<?php bloginfo('name'); ?>" data-link="<?php echo home_url(); ?>/">
      <img src="<?php echo $logo; ?>" alt="<?php bloginfo('name'); ?>" 
      <?php if(  tie_get_option('logo_retina_width') && tie_get_option('logo_retina_height') ) 
      echo 'width="'.tie_get_option('logo_retina_width') .'" height="'.tie_get_option('logo_retina_height').'"'; ?> /><strong><?php bloginfo('name'); ?> <?php bloginfo( 'description' ); ?></strong>
      </a>
      <?php endif; ?>
      

      Надо работать с этим куском:

      <a title="<?php bloginfo('name'); ?>" data-link="<?php echo home_url(); ?>/">
      <img src="<?php echo $logo; ?>" alt="<?php bloginfo('name'); ?>" 
      <?php if(  tie_get_option('logo_retina_width') && tie_get_option('logo_retina_height') ) 
      echo 'width="'.tie_get_option('logo_retina_width') .'" height="'.tie_get_option('logo_retina_height').'"'; ?> /><strong><?php bloginfo('name'); ?> <?php bloginfo( 'description' ); ?></strong>
      </a>
      

      Т.е, должно получиться следующее:

      <?php if( is_home() || is_front_page() ): ?>
      <a title="<?php bloginfo('name'); ?>" data-link="<?php echo home_url(); ?>/"><img src="<?php echo $logo; ?>" alt="<?php bloginfo('name'); ?>" <?php if(  tie_get_option('logo_retina_width') && tie_get_option('logo_retina_height') ) echo 'width="'.tie_get_option('logo_retina_width') .'" height="'.tie_get_option('logo_retina_height').'"'; ?> /><strong><?php bloginfo('name'); ?> <?php bloginfo( 'description' ); ?></strong>
      </a>
      <?php else : ?>
      <img src="<?php echo $logo; ?>" alt="<?php bloginfo('name'); ?>" <?php if(  tie_get_option('logo_retina_width') && tie_get_option('logo_retina_height') ) echo 'width="'.tie_get_option('logo_retina_width') .'" height="'.tie_get_option('logo_retina_height').'"'; ?> />
      <?php endif; ?>
      
      Ответить
  22. Олег:

    Здравствуйте. Как исправить мой код, так чтобы ссылки категорий перестали быть цикличными?

    Код в файле functions.php отвечающий за wp_list_categories() следующий:

    add_filter( ‘get_archives_link’, ‘avada_cat_count_span’ );
    add_filter( ‘wp_list_categories’, ‘avada_cat_count_span’ );
    function avada_cat_count_span( $no_links ) {
    preg_match_all( ‘#\((.*?)\)#’, $links, $matches );
    if ( ! empty( $matches ) ) {
    $i = 0;
    foreach ( $matches[0] as $val ) {
    $links = str_replace( ‘ ‘ . $val, ‘ ‘ . $val . », $links );
    $links = str_replace( ‘ ‘ . $val, ‘ ‘ . $val . », $links );
    $i++;
    }
    }
    return $links;
    }

    Ответить
  23. Виктор:

    К меня на странице категория выводится вот таким способом.
    <div class="article__additional">
    <?php
    $categories = get_the_category();

    if($categories){
    foreach($categories as $category) {
    $output .= '<a data-link="'.get_category_link($category->term_id ).'">' . $category->name . '</a>, ';
    }
    $output = trim($output, ', ');
    }
    ?>
    <div class="rubric"><div class="rub">Рубрика:</div><strong><span itemprop="articleSection"><?php echo $output; ?></span></strong>

    В рубиках удалось убрать цекличность, а как убрать тут?

    Ответить
    • Виталий Кириллов:

      Тут надо функцию переписывать, фильтр тут не поможет.

      Ответить
  24. Илья:

    Добрый вечер! Удобно сделали закрепленный блок «Содержание статьи».

    По поводу циклических ссылок, как быть с блоком как у вас «Популярное на блоге» или если есть блок «СВЕЖИЕ ЗАПИСИ». С одной стороны можно их убрать, но могут быть хуже поведенческие и меньше ссылочного веса будет на этих страницах, с другой если оставить так — то циклические ссылки на эти статьи. И не понятно как лучше.
    Как сделать чтобы в момент нахождения в статье с этих блоков не было циклических ссылок на себя же?

    Заметил у вас логотип в H1, а заголовок блога в H2. В основном встречаю что логотип без мета тегагов H, а заголовок блога в H1. Для чего вы сделали так?

    Ответить
    • Виталий Кириллов:

      Илья, вы что-то попутали. Логотип у Меня без тегов заголовка.
      Что касается циклических ссылок в популярных записях. Можно подумать, как исключить вывод циклических ссылок. Может и дойдут когда-нибудь руки до этого.

      Ответить
      • Илья:

        Я об мета теге H1 в котором обернут логотип, и H2 в котором обернут Title блога. Скриншот imger.ru/jpg/zkclkbUYv6HlRagU

        Ответить
        • Виталий Кириллов:

          Даже на вашем скриншоте видно, что в H1 обернут заголовок блога:

          <h1 itemprop="headline"><a href="/">SEO Маяк</a></h1>

          А в H2 заголовок статьи:

          <h2 itemprop="headline">Редактор для категорий (рубрик), меток и произвольных таксономий</h2>

          Где Вы здесь логотип, и тем более title увидели, мне не понятно.

          Ответить
  25. Ян:

    Привет. Очень полезная статья, как раз убирал циклические ссылки Вашими способами и столкнулся с одной проблемой. У меня есть прописанные вручную ссылки . Например, Текст ссылки. Их тоже нужно избавить «цикличности».

    Это я так понял нужно этим способом убрать: . Только ничего не получается, дело скорее всего в идентификаторах is_front_page() || is_home, я пробовал просто is_front_page() и is_home, и даже !is_front_page(), но работает некорректно. Что посоветуете сделать?

    Ответить
  26. Виталий:

    Добрый день! Подскажите пожалуйста, хочу убрать циклические ссылки из рубрик в сайд баре, который реализовал через виджет Advanced Category, но ничего не получается, не понимаю какая функция вызывает их. Помогите плз

    Ответить
  27. Mika:

    А как вообще убрать пункт «Главная»?

    Ответить
    • Виталий Кириллов:

      Все зависит от шаблона!

      Ответить
      • Mika:

        У меня тоже, как у вас. Со страниц на главную ведут 3 ссылки (с меню, в лого, хлебные крошки). Разве это нормально в плане сео? Если сотни новостей на сайте, то и 3 сотни ссылок на главную.

        Ответить
        • Виталий Кириллов:

          Кроме seo, есть еще понятие юзабилити, т.е. удобство для пользователя.
          Сделать то все можно.
          Для начала скажите, какой функцией у Вас меню выводится?

          Ответить
  28. Mika:

    Вот так выводится github.com/kusold/graphene/blob/master/includes/theme-menu.php#L11

    Начиная с 63 строки. Убрал между (то есть код с 64 до 68), но почему-то взвыло ошибку и теме перестала открываться.

    Помогите пожалуйста советом. Заранее спасибо.

    Ответить
    • Виталий Кириллов:

      Попробуйте удалить кусок с 62 по 71 строчку

      Ответить
      • Виталий Кириллов:

        В общем тут надо экспериментировать, к сожалению сегодня больше вам времени уделить не могу.

        Ответить
  29. Mika:

    Спасибо за помощь. Помогло удаление с 64 до 69.
    Я так и с самого начала делал, но через редактор вордпресса и выводило каждый раз ошибку.
    Через файрзилла ошибки больше не выдает и главной больше нет.

    Ответить
  30. Владислав:

    Здравствуйте… а что можно сделать с метками и категориями(рубриками)?… Они же в поиске не участвуют?

    Ответить
    • Виталий Кириллов:

      Не совсем понял о чем вы, но можно избавится от сквозных ссылок в меню категорий или меток.

      Ответить
  31. Mika:

    Спасибо, помогли избавиться от некоторых циклических ссылок. Но вот от ссылок в рубриках никак не могу избавиться. В файле category несколько строк кода. Как эти ссылки убрать не подскажете? s018.radikal.ru/i524/1708/ae/2a913f6861e5.jpg

    Ответить
    • Виталий Кириллов:

      Шаблоны все разные, поэтому так с ходу подсказать не могу, надо смотреть.
      Там может одной функцией выводится все элементы определенной области, ищите по названию функции в других файлах шаблона.
      Для этого надо хоть немного разбираться в файлах.

      Ответить
  32. Юрий:

    Добрый вечер! Спасибо Вам за сайт , Спасибо за статью
    Подскажите как убрать ссылки в плагине WP Category Post List Widget

    Ответить
    • Юрий:

      Там стоит класс wp-cpl. Я и так и этак вставлял этот класс, не срабатывает. Помогите

      Ответить
  33. Александр:

    Добрый день. Спасибо за подробный и доходчивый материал. Сделал по вашей инструкции, всё работает. Но получилось так что у меня два h1 на всех страницах, кроме главной)) Пришлось убрать h1 из лого вообще. Но всё же для чего вообще h1 в лого ? Это же тег для разметки текста

    Ответить
    • Виталий Кириллов:

      Здравствуйте, Александр!

      Есть шаблоны, в которых есть возможность приписать текстовый заголовок или вывести логотип, на выбор.
      Но горе-мастера делают общие h1 и для текстового заголовка, и для логотипа.

      Ответить
  34. Павел:

    Виталий добрый день, у меня логотип добавлен не через функцию. Те когда вставляю ваш скрипт то ссылка логотипа без картинки. Подскажите как добавить картинку логотипу?

    <span class="hidden-link" data-link="»
    title=»expert» rel=»home»>

    Ответить
    • Виталий Кириллов:

      Здравствуйте, Павел!
      Приведите код вывода логотипа целиком. В слепую мне сложно что-либо советовать.

      Ответить
  35. Андрей:

    Статья актуальна во все времена. И у меня сходу вопрос. Об необходимости исключить циклические ссылки я узнал немного раньше, чем прочитал эту статью. И в тот момент, так как я не силен в ПХП, я решил убрать эти все ссылки прям с кода в ручную. Скажи, как будет лучше в плане оптимизации сайта, удалить код из шаблона на прямую или писать такие скрипты? Я просто создал дочернюю тему и в ней делал все правки. Как будет лучше по ощущениям блогу, обработать сторонние скрипты или обработать файлы дочерней темы? Очень волнует меня этот вопрос.

    Ответить
    • Виталий Кириллов:

      Фалы дочерней темы обрабатываются даже раньше, чем файлы основной.
      Т.е, если Вы создали в дочерней теме файл functions.php, первым обработан будет именно он, а потом уже файл functions.php основной темы.
      Все файлы, которые подключаются отдельно к основной теме, срабатывают позже.

      Ответить
  36. Денчик:

    День добрый. На старой теме прекрасно удалились циклические ссылки в рубриках и верхнем меню.
    Сменил шаблон. Рубрики работают, а в произвольном меню нет.
    Если не трудно, посмотрите плз. Может подкорректировать что надо?
    dendrblog.ru

    Ответить
  37. Денчик:

    P.S. Код срабатывает для ссылок на страницы в меню и ссылки на главную. А для ссылок на рубрики нет.

    Ответить
    • Виталий Кириллов:

      В новом шаблоне у Вас сменился html.
      Чтобы все работало надо привить регулярку в функции.
      Каждый случай индивидуален.

      Ответить
  38. Irina:

    Ребят, а у меня не то, чтобы она цикличная, а просто трэш какой-то. Ссылки некоторые на сайте выглядят так https://working-mama.ru/https-working-mama-ru-гороскопы
    То есть ссылка ещё и саму себя вкрячила через дефис. Объясните, плз, нубу. Что это? И как это лечится.

    Ответить
  39. Артур:

    Виталий, спасибо за статью, но всё это по большей части второстепенно. А вот где первостепенно, так это в сайдбаре или в «похожих материалах». Это не то что даже с точки зрения Seo, это даже визуально выглядит нелепо, когда находясь на какой-то странице, тебе предлагают, причём замечу, в ущерб остальным статьям, перейти на неё же. А ведь в этих блоках могла бы быть другая статья вместо повтора текущей. Вот об этом почему-то никто не писал из блогеров и рецептов кроме Морковина не предлагал, да и у него через плагин, некрасивое решение. А ведь именно в этих местах цикличные ссылки первичны как проблема, а вовсе не в хэдере или футере.

    Ответить

Оставить комментарий

Внимание комментатор! Прежде чем вставить: HTML, JavaScript или PHP код в свой комментарий, преобразуй его в html сущность!

Subscribe without commenting

» Подписаться на комментарии по RSS