Googlebot теперь находит ссылки и в JavaScript’е.
August 7th, 2008 Posted in Uncategorized In EnglishДолжно быть я что-то пропустил. Всегда думал, что Google не видит ссылки внутри JavaScript кода. А даже если и видит, то такие ссылки не имеют никакой ценности для SEO: при подсчёте PR они не учитываются и для индексации не используются, т.е. если на страницу можно попасть только в результате выполнения скрипта и на неё нет прямых ссылок, то такая страница не будет проиндексирована вообще. И что? Это информация уже устарела?
Вот моя история.
Есть у меня один новый сайт. Ему всего месяц, страниц мало и входящих ссылок пока почти нет. Поэтому достаточно легко проследить то, как он индексируется Гуглом. На сайте в тестовом режиме работает сервис, проверяющий веб страницы на предмет скрытых вредных включений (невидимые спаммерские ссылки, iframe’ы, скрипты, редиректы). Для работы сервиса активно используется AJAX.
Недавно, проверяя статистику посещений, увидел, что кто-то зашёл ко мне с Гугла по запросу types of hidden spam. Я решил посмотреть, на какой месте показывается мой сайт в результатах по этому запросу. Оказалось, что на первом. И это при общем количестве результатов превышающем 14 миллионов. Приятно, но немного неожиданно для очень нового сайта.
Ещё больше меня смутила «страница», на которую указывал результат: unmaskparasites.com/security-tools/find-hidden-links/site/?siteUrl=. Я использую этот URL (или вернее сказать, часть URL’а) внутри скрипта для динамического построения персонализированных ссылок для показа в отчетах. Ни одна из страниц на моём сайте (да и на других тоже) не ссылается на unmaskparasites.com/security-tools/find-hidden-links/site/?siteUrl=
Вообще-то, на сайте есть статическая страница с подобным текстом о распространённых типах скрытых ссылок, посвящённая обнаружению заражённых WordPress блогов. На эту страницу есть прямые ссылки с других страниц.
Так почему же Гугл предпочёл неполный динамический URL, спрятанный внутри JavaScript’а, неимеющий никаких входящих ссылок, а не полноценную страницу со статическим URL’ом и прямыми входящими ссылками? Может эта страницу почему-то не была проиндексирована? Я ввёл запрос site:unmaskparasites.com. Сайт совсем небольшой, и все страницы, включая эту, оказались проиндексированы. Более того, этот запрос выявил страницы, которые вообще не должны были быть проиндексированы, так как использовались только внутри служебных AJAX запросов. (unmaskparasites.com/results/ и unmaskparasites.com/token/ на скриншоте. )
Какого черта! Откуда Гугл узнал про них?!
Покопавшись немного в исходниках своего сервиса и кэшированных Гуглом страницах, я могу с большой долей уверенности сказать, что Google разбирает JavaScript, выполняет его, находит в нём ссылки и использует их для индексации.
Доказательства
Ссылки в AJAX запросах.
http://unmaskparasites.com/results/ и http://unmaskparasites.com/token/ - это служебные URL’ы, использующиеся исключительно в AJAX (JavaScript)-запросах. Нигде больше эти URL’ы не используются. Вот так они используются в моих скриптах:
$.get(’/token/’, function(txt){ …
и
$.post(”/results/”, { …
Как видите, тут простым регулярным выражением не обойтись. Ссылки относительные, и нужно понимать, что делает код, чтоб отличить строки содержащие такие ссылки от прочих строк.
Ссылки в строках с HTML кодом.
URL http://unmaskparasites.com/security-tools/find-hidden-links/site/?siteUrl= также встречается только в скрипте. На этот раз внутри строки, в которой подготавливается HTML код для вставки в нужное место на странице:
...‘<a href=”/security-tools/find-hidden-links/site/?siteUrl=’ + escape($(”#id_siteUrl”).val() )+ ‘”>’ …
Если спайдер будет выполнять этот код, то получится следующая строчка: ‘<a href=”/security-tools/find-hidden-links/site/?siteUrl=”‘>’, так как он не заполняет форму, и значение поля id_siteURL будет пустым. Получаем URL идентичный тому, что был почему-то проиндексирован Гуглом. Опять же, переведённый из относительной формы в абсолютную.
У Googlebot’а JavaScript не такой, как в наших браузерах.
Складывается впечатление, что Googlebot выполняет только ту часть кода скрипта, которая нужна для обнаружения ссылок и игнорирует всё остальное.
Анализируя, кэшированную страницу http://unmaskparasites.com/results/, ясно видно, что она была получена после GET-запроса с пустыми параметрами. Однако, если выполнять мой код, то 1). с пустыми параметрами невозможно дойти до самого вызова, так как не будет пройдена валидация, 2). выполнялся бы POST-запрос.
Можно предположить, что Googlebot не оснащён полноценным движком JavaScript. Он всего лишь умеет разбирать код, находить ссылки и выполнять усечённый набор команд (например для склейки строк).
jQuery
Есть у меня ещё предположение, что подобное возможно только тогда, когда Гугл видит, что используется код, основанный на известных ему библиотеках. Я использую jQuery и загружаю её напрямую с Гугловских серверов:
http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js
Это единственная сторонняя библиотека, загружаемая моими страницами, и Гугл может быть уверен, что функции $post(…) и $get(…) загружают страницы через AJAX-запросы, а $(’#results’).html(…) вставляет HTML код в div с идентификатором «results».
Google Toolbar
Чтоб рассмотреть альтернативные версии попадания ссылок из JavaScript в результаты поиска, допустим, что Гугл узнал о них с помощью тулбара, установленного в моём браузере. Однако есть ряд факторов, указывающих на то, что тулбар тут не при чём:
- Ссылки, используемые в AJAX-запросах никогда не попадают в адресную строку браузера, а значит нет причин запрашивать для них PageRank.
- Тулбар запрашивает информацию лишь по тем ссылкам, что встречаются в реальной жизни. Значит, с помощью тулбара Гугл скорее бы проиндексировал ссылки типа: http://unmaskparasites.com/security-tools/find-hidden-links/site/ или http://unmaskparasites.com/security-tools/find-hidden-links/site/?siteUrl=example.com, но уж никак не http://unmaskparasites.com/security-tools/find-hidden-links/site/?siteUrl=
- Другие «секретные» страницы, которые я загружал в браузере, остались непроиндексированными.
- Вы когда нибудь видели, чтоб страница на одномесячном домене без единой входящей ссылки оказывалась на первом месте в результатах поиска (пусть даже и по непопулярному запросу), имея при этом более 14 миллионов конкурентов?
Немного официальной информации от Гугла.
Только что нашёл ряд косвенных подтверждений в официальном блоге Google Webmaster Central.
“Основная проблема с Ajax-сайтами в том, что хоть Googlebot и прекрасно разбирается в структуре HTML-ссылок, у него могут возникнуть сложности при индексации сайтов, использующих JavaScript для навигации. Хоть мы и работаем над тем, чтоб лучше понимать JavaScript, всё же лучший способ сделать сайт дружественным для поисковых роботов – это предоставить им HTML-ссылки на ваш контент.”
Видите, они говорят, что разобраться с JavaScript сложно, но не говорят, что это невозможно. И при этом они “работают над тем, чтоб лучше понимать JavaScript”. И вот сейчас, спустя 9 месяцев, они похоже уже могут кое-что понять в JavaScript.
“Googlebot не выполняет некоторые команды JavaScript.”
О чём я и говорил. Googlebot выполняет JavaScript, но его поддержка довольно ограничена.
“Что касается ActionScript, мы способны находить ссылки, загружаемые с помощью ActionScript.”
Если они могут находить ссылки в ActionScript, то что мешает им делать подобное и с JavaScript?
Новая веха?
Flash, JavaScript, что дальше? Похоже скоро поисковые роботы смогут «видеть» веб страницы почти также как и мы, люди. Пока же проверьте скрипты на своих страницах. Возможно вы показываете Гуглу больше, чем ему следует видеть. Я уже добавил несколько новых Disallow правил в robots.txt.
Или это у меня паранойя?
Did you enjoy this post? Why not leave a comment below and continue the conversation, or subscribe to my feed and get articles like this delivered automatically to your feed reader.
One Response to “Googlebot теперь находит ссылки и в JavaScript’е.”
By Алексей on 2011-01-17
Гугл берет ссылки для индексации из гуглБара. Так же как и яндекс, отсюда могут вылезать подобные запросы.
При установке Бара вы соглашаетесь с условиями, где сказано что гугл будет использовать посещенные вами ссылки для улучшения качества поиска.
У яндекса был когдато хитробот, - он интерпритировал яваскрипт, вбскрипт чтобы определять редирект на страницах. Был создан для противодействия поисковому спаму.
Думаю гугл теперь пошел в том же направлении.