Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
В один из рабочих дней мне пришел список заданий. Отдельным пунктом была просьба найти способ надежного сокрытия внешних ссылок на сайте от поисковых систем.
В чем суть проблемы? Существует несколько способов спрятать ссылку от поисковых роботов, но у них имеются свои особенности:
javascript позволяет закрыть ссылку от индексации, но сам google уже спокойно понимает такие скрипты;
можно добавить к ссылке атрибут nofollow – это просто, но ссылочный вес самой ссылки будет теряться и при периодическом переиндексировании снизится общий вес сайта;
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;
Чтобы еще больше упростить жизнь, если подобных ссылок очень много, можно сделать выборку всех статей из базы данных в тех разделах сайта, где требуется сделать замену ссылки на форму. Затем посмотреть вхождение конкретной ссылки в статью и поставить на нее место форму отправки данных. В этом случае придется учитывать особенности «движка» вашего сайта, количество статей и ссылок. Например, обработку данных лучше делать поэтапно: берем сто статей, производим необходимую работу, следующий массив из ста статей. Подобные скрипты запускаются обычно вечером, когда с контентом сайта никто не работает.
Теперь посмотрим, как браузер реагирует на простую ссылку: видим появление сообщения в левом нижнем углу с адресом ссылки.
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/858/b39/80b/858b3980b204a9a6016f24878a14167e.png)
После помещения ссылки в форму, браузер ее уже не замечает.
![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/15d/668/401/15d6684013d6aeef62036d811bd9351f.png)
Есть небольшой недостаток внешнего вида "ссылки" у данного способа: сам тег <form> является блочным, то есть занимает всю строку. Если попытаться вставить подобные элементы в предложение, то все формы уходят на новую строку и текст становится с разрывами. Это явление лучше учитывать.
Код на гитхабе для ленивых
Уважаемые читатели! Какими методами сокрытия ссылок веб-страниц вы пользуетесь?