Pull to refresh

Надежный способ сокрытия ссылок сайта от поисковых роботов

Reading time 4 min
Views 6.8K

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

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

  1. javascript позволяет закрыть ссылку от индексации, но сам google уже спокойно понимает такие скрипты;

  2. можно добавить к ссылке атрибут nofollow – это просто, но ссылочный вес самой ссылки будет теряться и при периодическом переиндексировании снизится общий вес сайта;

  3. cамый странный метод сокрытия ссылок — это закрытие конкретных страниц от индексации при помощи мета тегов или в файле robots.txt, но происходит полная потеря ссылочного веса передаваемого странице.

Зная эти нюансы, специалист по СЕО исключил все три способа сокрытия ссылок и предложил мне попытаться найти новое решение. И оно было найдено: что, если засунуть ссылку в некий стандартный функционал на сайте, который поисковый робот всегда игнорирует?
Возьмем обычную форму с методом отправки post:

<form method="post">
    <button class="my">
       Образец экспериментальной ссылки
    </button>
</form>

При помощи класса my можно стиль формы сделать оптимальным для дизайна вашего сайта, например:

<style>
      .my{
          border:none;
          background: none;
          text-decoration: underline;
          color: blue;
          cursor: pointer;
          color:#00bceb
      }
      .form{
        width: 300px;
        margin: 50px auto;
      }
</style>

Как же добавить в форму нужную ссылку? Тут я вспомнил про javascript, теперь наша форма выглядит так:

<form method="post">
    <button class="my" onclick="window.open('https://librebook.me/the_mysterious_island');">
        Образец экспериментальной ссылки
    </button>
</form>

Как только пользователь кликнет по кнопке формы, замаскированной под ссылку, сработает форма с методом post, команда onclick выполнится и откроется новая вкладка по требуемому адресу. Задача условно решена. Однако, если таких ссылок много на странице, для каждой писать форму?

Воспользуемся PHP. Пусть у нас имеется массив ссылок, например:

$mass = [
   'Таинственный остров' => 'https://www.litmir.me/bd/?b=265607',
   'Три дня Индиго' => 'https://www.litres.ru/sergey-lukyanenko/tri-dnya-indigo/',
   'Зеленая Миля' => 'https://librebook.me/the_green_mile',
   'Герой должен быть один' => 'https://librebook.me/geroi_doljen_byt_odin',
   'Затерянный мир' => 'https://librebook.me/zateriannyi_mir_doil_artur_ignatius_konan',
];

Добавим простейшим способом все формы на страницу:

foreach($mass as $k => $v) {
   echo '<br><form method="post"><button class="my" onclick="window.open(\''. $v .'\');">'. $k .'</button></form>';
}

Здесь нужно очень внимательно следить за расстановкой одинарных и двойных кавычек, чтобы не было ошибки.

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

function s_link(string $name, string $link) {
   $res = '<br><form method="post"><button class="my" onclick="window.open(\''. $link .'\');">'. $name .'</button></form>';
   return $res;
}

$res = s_link('Yandex','https://ya.ru');
echo $res;

Если js в данном примере не нравится, то можно обойтись без него:

<form method="post" action="https://www.litmir.me/bd/?b=265607" target="_blank">
    <button class="my">
       Таинственный остров
    </button>
</form>

Тогда функция будет выглядеть так:

function m_link(string $name, string $link) {
  $res = '<br><form method="post" action="'.$link.'" target="_blank"><button class="my">'.$name.'</button></form>';
  return $res;
}

$res = m_link('Books','https://www.labirint.ru/books/');
echo $res; 

Если заместо названия ссылки хочется поместить картинку, то html код:

<form action="https://google.ru" target="_blank">      
    <button class="my">
       <img src="123.jpg" alt=""> 
    </button>
</form>


Чтобы еще больше упростить жизнь, если подобных ссылок очень много, можно сделать выборку всех статей из базы данных в тех разделах сайта, где требуется сделать замену ссылки на форму. Затем посмотреть вхождение конкретной ссылки в статью и поставить на нее место форму отправки данных. В этом случае придется учитывать особенности «движка» вашего сайта, количество статей и ссылок. Например, обработку данных лучше делать поэтапно: берем сто статей, производим необходимую работу, следующий массив из ста статей. Подобные скрипты запускаются обычно вечером, когда с контентом сайта никто не работает.

Теперь посмотрим, как браузер реагирует на простую ссылку: видим появление сообщения в левом нижнем углу с адресом ссылки.

После помещения ссылки в форму, браузер ее уже не замечает.


Есть небольшой недостаток внешнего вида "ссылки" у данного способа: сам тег <form> является блочным, то есть занимает всю строку. Если попытаться вставить подобные элементы в предложение, то все формы уходят на новую строку и текст становится с разрывами. Это явление лучше учитывать: я добавлял в стили "display: contents" и разрывов уже не было.

Код на гитхабе для ленивых

Уважаемые читатели! Какими методами сокрытия ссылок веб-страниц вы пользуетесь?

Tags:
Hubs:
-11
Comments 58
Comments Comments 58

Articles