15,737 просмотров

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

Гипотеза

Судя про проведенным ранее экспериментам, результаты которых актуальны и поныне, javascript из всех поисковиков читает лишь Google. Поэтому, в данном исследовании затрагивается лишь эта поисковая система. Многие знают, что от Google контент спрятать сложно, но интересно было все же разобраться, парсит ли Google яваскрипт любой сложности или только простые выражения?

Гипотеза состояла в том, что поисковая ситема Google распознает лишь простые варианты скриптов и контент можно спрятать, усложнив скрипт.

Цель эксперимента

Целью данного исследования является подтвердить или опровергнуть гипотезу, а также в случае опровержения определить, какие все же скрипты Google не распознаст.

Проведение эксперимента

Для проведения эксперимента 20 февраля 2011 г. была создана отдельная страница, на которой расположен контент с ссылками с помощью javascript в разных вариантах: с помощью обычного document.write, кусочного, вызова функции, подключения внешних файлов, в том числе обфускейченных (запутанных), а также с помощью работы с DOM документа.

Ссылка на экспериментальную страницу была добавлена в Твиттере с просьбой заретвитить (спасибо всем за помощь, в сумме было 27 ретвитов). Другими словами, тви-друзья помогли сделать страницу популярной для Google, чтобы ускорить индексацию и быстрее узнать результаты. Через несколько минут страница уже была в индексе, но ссылки пока не работали. На данный момент основной робот Google проиндексирвал весь необходимый контент и можно проверять результаты.

Результаты эксперимента

Рассмотрим полученные результаты по каждому из видов используемого javascript-подхода.

1. Безатрибутная ссылка

Этот приём использует ссылку без атрибута href и для роботов такой тег не является ссылкой. На экспериментальной странице с помощью DOM был добавлен атрибут href:

<a name="a" id="a">безатрибутный индекс</a>. <script type="text/javascript">document.getElementById("a").setAttribute("href","http://seodic.ru/terms/%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81");</script>

Результаты в данном случае показали, что такая ссылка не работает для Google, то есть, вес не передаёт. По уникальному анкору “безатрибутный индекс” страница-акцептор не находится.

2. Кусочный document.write

Здесь использовалось небольшое усложнение, когда строка была разбита на несколько строк с их конкатенацией:

document.write("Немного контента с уникальной фразой devjslink и обещанной ссылкой " + "<" + "a h" + "ref" + "=\"h" + "tt" + "p:" + "//" + "seodic" + "." + "ru" + "/terms/" + "%D0%B6%D0%B8%D1%80%D0%BD%D0%B0%D1%8F-%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B0" + "\"" + ">" + "кусочная js ссылка" + "<" + "/" + "a" +">" + ".");

Такая конструкция не помогла, Google проиндексировал контент, как видит это пользователь. По уникальному тексту devjslink можно найти экспериментальную страницу, а по уникальному тексту анкора кусочная js ссылка находится акцептор (страница, куда ведет ссылка). То есть, в этом случае вес по ссылке передался, она учлась.

3. Вызов внутренней функции и document.write

Внутри документа была описана функция, содержащая document.write с выводом определенного текста и ссылки. В нужном месте документа была вызвана эта функция.

Результаты показывают, что в этом случае яваскрипт-контент индексируется и ссылка находится. Такая ссылка тоже передает вес.

4. Вызов функции из внешнего файла и document.write

Эта часть похожа не предыдущую, только функция была определена во внешнем доступном файле file2.js, подключенном в документе.

Результаты показали, что вызов функции из внешнего файла также обрабатывается Google и результаты аналогичные предыдущим – контент индексируется, ссылка работает.

Интересно было посмотреть серверные логи, когда именно поисковый робот заходил за дополнительными .js файлами. Анализ логов показал, что Google читает внешние файлы не сразу, а через какой-то промежуток времени (около недели) и приходит с тем же юзер-агентом “Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)”. Также интересно, что внешние файлы для страниц запрашиваются, практически, одновременно (в отличие от html-страниц сайта) с частотой около 2 раз в месяц.

Серверные логи посещения гуглбота экспериментальной страницы в марте

5. Внешний скрипт и document.write

Во внешнем скрипте (file1.js) сразу был описан document.write без дополнительных функций. По текущим результатам контент проиндексирован, так как экспериментальная страница находится по уникальному тексту из скрипта devjsrelink, однако, ссылка не работает (проверка). Очень странное явление, так как подобная конструкция оказалась не самой сложной и Google её распарсил (распознал), но ссылке вес не передал. Полагаю, что это временно и после следующей переиндексации ссылка сработает.

6. Обфускейченный внешний скрипт с document.write

В этой части эксперимента было создано два обфускейченных файла: file3.js, file4.js. Различаются они лишь методом обфускации.

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

Скриншот, подтверждающий понимание Гуглом обфускейченных внешних файлов

7. Запрет индексации внешнего скрипта в robots.txt

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

Результаты показывают, что контент из этого файла так и не проиндексировался (проверочная ссылка). Анализ серверных логов показал, что в папку /robots/ Google не заходил, а соответственно, file5.js не индексировал.

8. Работа с DOM документа

Следующий текст с ссылкой были созданы с помощью работы с DOM документа.

var a = document.createElement("A");
a.setAttribute("href", "http://seodic.ru/terms/%D1%80%D0%B5%D0%BB%D0%B5%D0%B2%D0%B0%D0%BD%D1%82%D0%BD%D0%BE%D1%81%D1%82%D1%8C");
a.innerHTML = "экспериментальная dom ссылка";
var s = document.createElement("SPAN");
s.innerHTML = "Этот текст и ссылка добавлены с помощью работы объектной модели DOM… ";
s.appendChild(a);
var span = document.getElementById("b");
span.appendChild(s);

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

9. Комплексный вариант скрипта

И последний случай – комплексный вариант, в котором задействованы все предыдущие модели: обфускейченный внешний файл размещаем в папку, закрытую от индексации в robots.txt, при этом в файле используем функцию, работающую с DOM. В нужном месте вызываем функцию, печатающую контент с ссылкой.

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

Выводы

Как видно из результатов эксперимента, от робота Google не так просто что-то скрыть. Все варианты ссылок работают, за исключением тех, что размещены во внешних файлах, закрытых от индексации. Также в ряде случаев при работе с объектной моделью документа, поисковый парсер не всегда распознает ссылки, но посмотрим, что будет в будущем. Наша гипотеза не подтвердилась.

Если у вас есть какие-то комментарии – делитесь!


Постовой: Эксперимент частично проведен по просьбе Dimox.

  • 0 Нет
  • 73 Да
  • Мне понравилось!

Если вам понравилась статья, вы можете подписаться на RSS или E-mail рассылку. Для получения обновлений по электронной почте, введите ваш e-mail адрес в эту форму (Доставка от FeedBurner):