Как индексаторы поисковых систем обрабатывают javascript?
Недавно нами был проведен эксперимент, целью которого являлось доподлинно установить, как роботы-индексаторы различных поисковых систем обрабатывают HTML-код сайтов с включениями javascript и, в частности, редиректов.
Во время опыта на главной странице сайта с хорошей посещаемостью и высокими позициями в выдаче Google по профильным ключевым словам было размещено несколько страниц с разными фрагментами js-кода на каждой из них. Javascript различными способами перенаправлял браузеры пользователей на другие страницы, специально созданные для эксперимента, нигде не «засвеченные», и никоим образом не слинкованные с самим сайтом для обеспечения чистоты эксперимента. Таким образом, поисковый бот мог попасть на конечные страницы только через страницы с тестовыми скриптами. Оставалось только спустя некоторое время проследить по логам сервера, на какие из страниц заходили поисковые боты, а на какие – нет.
В итоге выяснилось, что Googlebot и прочие индексирующие боты различных поисковых систем смогли обработать почти все команды на javascript, включенные в код страниц, то есть, автоматически перенаправлялись, видели, и индексировали конечную страницу.
В первом примере кода, обработанного поисковым роботом, мы видим стандартную команду редиректа.
HTML:
<script language=”JavaScript”>
document.location.href = “http://www.site.com/directory/1.html”;
</script>
Во втором примере редирект осуществляется при помощи зашифрованного скрипта:
HTML:
<script language=’JavaScript’>var str = ‘wbs%21s%3Eepdvnfou%2Fsfgfssfs-u%3E%23%23-r%3C
%0B%21%21%21%21%21%21%21%21%21%21%21%21%21%21
epdvnfou%2Fmpdbujpo%3E%23iuuq%3B00xxx%2Fbetpgu.efwfmpqnfou
%2Fdpn0uftukt03fod%2Fiunm%23%3C’; str = unescape(str); res = ‘’; for (var i = 0; i < str.length; i++){ res += String.fromCharCode(str.charCodeAt(i)-1); } eval(res);</script>
В третьем примере индексирующему роботу предстояло обработать часть скрипта в iframe, с чем он успешно справился и перешел по ссылке:
HTML:
<iframe xsrc=”http://www.site.com/directory/f.html” width=”100%” height=”100%” frameborder=0 hspace=0 vspace=0 marginwidth=0 marginheight=0 allowtransparency=true scrolling=no></iframe>
Но были и исключения. Вот фрагменты javascript-кода, которые могли бы служить редиректом для пользовательского Интернет-проводника, но не для поискового робота.
На одной из страниц редирект был сделан таким образом, что обработать и исполнить его мог либо браузер, либо краулер с функциями форматирования и обработки блоков HTML страницы, подобными браузерным. Скрипт выглядел примерно так:
HTML:
<div style=”overflow:auto; height: 1px;”>
<table width=”100%”>
<tr>
<td id=”first”>aassssssdddddffffgggghhhhjjjkklll</td>
<td>aassssssdddddffffgggghhhhjjjkklll</td>
<td>aassssssdddddffffgggghhhhjjjkklll</td>
<td>aassssssdddddffffgggghhhhjjjkklll</td>
<td>aassssssdddddffffgggghhhhjjjkklll</td>
<td>aassssssdddddffffgggghhhhjjjkklll</td>
<td>aassssssdddddffffgggghhhhjjjkklll</td>
<td>aassssssdddddffffgggghhhhjjjkklll</td>
<td>aassssssdddddffffgggghhhhjjjkklll</td>
<td>aassssssdddddffffgggghhhhjjjkklll</td>
</tr>
<tr>
<td>aassssssdddddffffgggghhhhjjjkklll</td>
<td>aassssssdddddffffgggghhhhjjjkklll</td>
<td>aassssssdddddffffgggghhhhjjjkklll</td>
<td>aassssssdddddffffgggghhhhjjjkklll</td>
<td>aassssssdddddffffgggghhhhjjjkklll</td>
<td>aassssssdddddffffgggghhhhjjjkklll</td>
<td>aassssssdddddffffgggghhhhjjjkklll</td>
<td>aassssssdddddffffgggghhhhjjjkklll</td>
<td>aassssssdddddffffgggghhhhjjjkklll</td>
<td id=”second”>aassssssdddddffffgggghhhhjjjkklll</td>
</tr>
</table>
</div>
<script language=”JavaScript”>
var D=document;
function AbsPos(O, Parent){
var X=0, Y=0, Next, D=document;
Next=O; if (Parent==null) Parent=D;
while (Next!=null && Next!==Parent){
Y+=Next.offsetTop; X+=Next.offsetLeft; Next=Next.offsetParent;
}
return [X, Y];
}
var first = AbsPos(D.getElementById(’first’));
var second = AbsPos(D.getElementById(’second’));
if (first[0] != second[0]) {
document.location.href = “http:/’+'/www.site.com/directory/t.html”;
}
else {
document.write(’whatever‘);
}
</script>
Как выяснилось, боты поисковых систем такими свойствами (к слову, совершенно лишними для робота индексатора) не обладают. Воспользовавшись этим наблюдением, можно редиректить только браузеры реальных пользователей, полностью скрывая истинное назначение объекта javascript от краулеров поисковых систем.
В следующем примере редирект должен был срабатывать, когда окно браузера становится активным:
HTML:
<script language=”JavaScript”>
function f(){
document.location.href = “http://www.site.com/directory/x.html”;
}
window.onFocus = f()
</script>
Разумеется, по этой ссылке краулер не прошел, так как не мог выполнить требуемых действий.
В третьем образце кода URL-ссылка помещалась в теле js-объекта, но не служила редиректом.
HTML:
<script language=”JavaScript”>
function rnb() {
http://www.site.com/directory/abc.html
}
</script>
По этой ссылке краулеры тоже не прошли, из чего следует еще один вывод. Команды языка javascript индексирующие роботы компании Google и других поисковых систем обрабатывают корректно, то есть исполняют скрипт, и “видят” результат выполнения скрипта. Однако раскладывать скрипт на составляющие, т.е. парсить, не умеют.
Итак, подведем итоги: краулеры основных поисковых систем и Google, в частности, умеют исполнять, но не парсить команды javascript. То есть, они способны понять, для чего данный скрипт сделан, и является ли он безобидным скриптом, составляющим часть динамического оформления страницы, или же коварным ходом поисковых оптимизаторов. Если скрипт составлен с учетом специфики его обработки браузером и поисковым роботом, то можно утаить от поисковых систем истинное назначение ваших скриптов. Все это выглядит как прием Black Hat SEO, но в ряде случаев такая техника может быть необходима для более удобной реализации вполне миролюбивых целей.