В поисковой оптимизации внешние ссылки (т.е. ссылки, ведущие на другие сайты) часто играют значимую роль в различных аспектах. Например, это важно, если сайт участвует в ссылочных биржах. Для скрытия внешних ссылок обычно их «экранируют», т.е. делают переход на сайты через скрипт-редиректор, например так: <a href="/go.php?url=http://ya.ru">Яндекс.Поиск</a>.
Файл go.php должен находиться в корне сайта и может иметь примерно такое содержание:
<?php header('Location: '.$_GET['url']); ?>
На самом деле он может быть немного сложнее и включать различные проверки, чтобы ему не подсунули битую или чужую ссылку.
Ссылки такого типа выглядят некрасиво и неудобны для читателей вашего сайта. Например, их не очень удобно публиковать или делиться. Кроме того может возникнуть ощущение жадности автора сайта. Поэтому мы предлагаем следующую технологию, основанную на javascript.
В секцию <head></head> включаем внешний javascript-файл redirector.js, расположенный в корне сайта,
<head> ... <script src="/redirector.js" type="text/javascript"></script> ... </head>
следующего содержания:
if(typeof $ != 'undefined') { $(document).ready(function(){ $('a').each(function(){ if(this.href.match(/go\.php\?url=(.+)(#.*)?$/) !== null) this.href = base64_decode(RegExp.$1)+RegExp.$2; }); }); } else{ if (typeof window.addEventListener != 'undefined') window.addEventListener('load', redirectorInit, false); else if (typeof window.attachEvent != 'undefined') window.attachEvent('onload', redirectorInit); function redirectorInit(){ var as = document.getElementsByTagName('A'); for(var i = 0; i < as.length; i++) { if(as[i].href.match(/go\.php\?url=(.+)(#.*)?$/) !== null) as[i].href = base64_decode(RegExp.$1)+RegExp.$2; } } } function base64_decode(data) { // original http://kevin.vanzonneveld.net // http://phpjs.org/functions/base64_decode/ var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, dec = "", tmp_arr = []; if (!data) return data; data += ''; do { // unpack four hexets into three octets using index points in b64 h1 = b64.indexOf(data.charAt(i++)); h2 = b64.indexOf(data.charAt(i++)); h3 = b64.indexOf(data.charAt(i++)); h4 = b64.indexOf(data.charAt(i++)); bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; o1 = bits >> 16 & 0xff; o2 = bits >> 8 & 0xff; o3 = bits & 0xff; if (h3 == 64) { tmp_arr[ac++] = String.fromCharCode(o1); } else if (h4 == 64) { tmp_arr[ac++] = String.fromCharCode(o1, o2); } else { tmp_arr[ac++] = String.fromCharCode(o1, o2, o3); } } while (i < data.length); dec = tmp_arr.join(''); return dec; }
Функция декодирования base64_decode была позаимствована с сайта phpjs.org.
Теперь внешние ссылки на сайт будем формировать по такой схеме /go.php?url=base64_encode_code, где base64_encode_code — это строка символов, которая формируется функцией base64_encode. Например, адрес http://ya.ru/ через функцию base64_encode преобразуется в строку aHR0cDovL3lhLnJ1Lw==. В сети есть онлайн-кодировщики, которые легко можно найти, например так.
Скрипт redirector.js ищет все ссылки на странице и отбирает те, у которых адрес (href) начинается с /go.php?url=. У таких ссылок параметр url декодируется в адрес сайта и присваиваеся адресу ссылки. Пользователю такие ссылки видятся как естественные. Их можно, например, копировать. Для поисковиков ссылка остается закодированной.
В принципе файл go.php уже не нужен, но можно подстраховаться на случай, если у пользователя отключены скрипты или произошла ошибка в выполнении, из-за которой наш скрипт не отработал. Поэтому файл go.php немного перепишем следующим образом
<?php header('Location: '.base64_decode($_GET['url'])); ?>