Блог Яндекса для вебмастеров

Индексация AJAX-сайтов поисковым роботом Яндекса

21 мая 2012, 12:21

Все большей популярностью у разработчиков сайтов пользуется технология AJAX. Несомненно, у нее есть широкие возможности – в частности, она позволяет разрабатывать интерактивные веб-страницы, которые выделяются своим быстродействием и производительностью.

Однако то, как содержимое страницы «видит» браузер и пользователь, отличается от того, как страницу «видит» робот поисковой системы. Например, пользователь видит удобный интерфейс с динамически подгружаемыми страницами, в то время как содержимое той же страницы для поискового робота может быть пустым или представленным в виде остального статического HTML-контента страницы, для генерации которого не используются скрипты.

При создании AJAX-сайтов могут использоваться URL с #, но такой URL не используется поисковым роботом. Как правило, часть URL после # отсекается. Поэтому вместо URL вида http://site.ru/#example он обращается к главной странице сайта, расположенной по адресу http://site.ru. Это значит, что контент страницы может не проиндексироваться и, как следствие, не попасть в результаты поиска.

Для улучшения индексации AJAX-сайтов мы поддержали изменения в поисковом роботе и правилах обработки им URL таких сайтов.

Теперь вебмастер AJAX-сайта может указать поисковому роботу Яндекса на необходимость индексации, поддержав соответствующую схему в структуре сайта. Для этого нужно:

1. Заменить в URL страниц символ # на #!. Так робот будет понимать, что он может обратиться за HTML-версией контента этой страницы.
2. HTML-версия контента этой страницы размещается на URL, где #! заменен на ?_escaped_fragment_=.

Пример:
URL: http://www.examplesite.ru/#blog
Заменили на: http://www.examplesite.ru/#!blog
Положили HTML-контент на URL: http://www.examplesite.ru/?_escaped_fragment_=blog

3. При этом контент главной страницы должен быть доступен по адресу http://www.examplesite.ru/?_escaped_fragment_=
4. Чтобы робот понимал, что главная страница также на AJAX, нужно разместить мета-тег <meta name="fragment" content="!">. Мета-тег может использоваться на любой странице, сгенерированной с помощью AJAX.

В этом случае страница будет проиндексирована поисковым роботом, а в результатах поиска пользователи увидят «правильные» URL – без
?_escaped_fragment_=.

Подробнее об этом читайте в Помощи

 

Команда Поиска

53 комментария
Подписаться на комментарии к посту

Конечно, зачем переписывать поисковик, пускай все переписывают сайты =)

Это похоже не на решение, а своебразный костыль......

Ну-ка ну-ка, и как же это вы реализовали бы?

Сканированием конечной, генерируемой и JS страницей. Но зачем тратить ресурсы программистов, когда можно навставлять на все сайты рунета костыли :-) Отстутствие конкуренции - великая сила :-)

Н-да, не прошли бы вы у меня собеседование.

Это ваш Великий аргумент на все случаи жизни? :-)

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

trankov,
Так, как это сделано у google...
trankov,
Как это Google реализовал ? Вот так и реализуйте

(+1)

[:]|||||||||[:]Давайте ещё больше работы программисту. Проще переделать админку с обязательным исключением занака #, чем так переписывать URL.

Комментарий удалён

Простите, но если бы Яндекс не скопировал этот способ с Гугля, а придумал что-то ещё более лучшее, то что бы делали мы простые смертные вебмастеры не готовые хакать свои движки заточенные под Гугль?

Что с индексацией? Отчего зависит его скорость? Домен уже авторизован.

Чем дальше, тем больше обращения Яндекса к вебмастерам сводятся к простой формуле: "вот что нужно сделать вам, чтобы было удобнее нам". В конце дописывается магическая фраза "в интересах пользователей".

Бабло решает все. Особо когда давит гугль как финансово так и путем отбора кадров. Вот и остается в яндексе решения от полупрофи. Профи ушли в другие места :-)

Вам надо индексировать ajax, вы и индексируйте. А на нас, вебмастеров перекладывать свою некомпетентность не нужно. Не во всех случаях робот Яндекса желанный гость.

и когда была проблема с индексацией AJAX-сайтов?

только у самых тупых и криворуких вебмастеров и программистов - теперь понятно для кого работает Яндекс! :(

Забыли пятый пункт, в котором написано "Еще вебмастер должен распознать, что на сайт пришли по ссылке http://www.examplesite.ru/#!blog, распарсить якорь и выдать пользователю тот контент, который был проиндексирован"

А не проще ли и правильнее было бы посмотреть в торону HTML5?

Eugene.Y.Ivanov
22 мая 2012, 22:24

Правильно делать нужно по другому.

 

Нужно просто понять, что ajax - это лишь транспорт.

 

То есть, на примере, приведённом в статье, страница должна располагаться по адресу http://www.examplesite.ru/blog

При этом и человек, у которого отключен js, и робот, увидят html-версию страницы.

Если же на клиенте включен js, то начинает работать красивая логика сайта и ускорять загрузку и т.п.

Конкрентно - для загрузки контента по ajax браузер также обращается по ТОМУ ЖЕ адресу  http://www.examplesite.ru/blog и сервер просто навсего отдаёт браузеру контент в другом формате, например, json, да или всё тот же html. Клиент принимает данные и располагает их в нужном месте страницы. Всё, никаких вывертов делать не нужно, менять поисковики, менять сайты и прочее-прочее.


Приведу примеры, как сервер может понять, что запрос от клиента пришёл ajax-овый. Это во-первых, тот самый заголовок X-Requested-With, равный XMLHttpRequest. Во-вторых, для большей надёжности (прокси режут заголовки и т.д.), можно передавать какой-нибудь параметр вида &ajax=1, которые соотв. передаётся только через js. В-третьих, если внести в архитектуру сайта правило, что если url оканчивается на .html, то передаётся обычная версия для роботов и клиентов без js, а если например, оканчивается на .json, то версия в json.

 

Успешно применяю это в своих проектах. Если нужно, обращайтесь, покажу примеры.

Комментарий удалён
Eugene.Y.Ivanov
23 мая 2012, 00:55

Нет, две версии делать не приходится, ибо архитектура движка сделана таким образом, что всё происходит автоматически.

Про хешевую ссылку я ничего не говорил.

 

Кстати, на хабре на днях выложили классную библиотеку для истории на клиенте:

http://habrahabr.ru/post/144071/

Универсальная - и для старых хешей, и для нового html5.

Eugene.Y.Ivanov
23 мая 2012, 10:46

А понял, спасибо. Исправил.

Первый раз тут ;-)

Опять яндекс навязывает стандарты, а не подстраивается под веб мастеров

Согласен полностью. Себя нужно обезапасить.

а есть ли живой пример такой индексации, который можно посмотреть?

просмотрел выдачу по примерно 15К скачиваемых запросов (топ 50-100) - не обнаружил ни одного урла с #! в выдаче

Здравствуйте. У меня имеется сайт aftamat4ik.ru . Он полностью выполнен на ajax. Для того, чтобы его можно было проиндексировать внедрены хеш ссылки. Вы сами можете просмотреть. Например ссылка к исполнителю выглядит так:

 http://aftamat4ik.ru/#/author/ГРОТ 

На главной странице, в соответствии с правилами добавлен meta тег

Но бот не проиндексировал ни  страници на сайте. Точнее проиндексировал, но только главную страницу, а все остальное отказывается.

По адресу http://aftamat4ik.ru/?_escaped_fragment_ у меня лежит версия сайта без ajax, предназначенная для ботов гугла и яндекса. я решил проверить видит ли ваш бот мета тег

И оказалось что ничего он не видит, и все что выше было написано - ложь. Яндекс как не умел так и не умеет индексировать ajax приложения, и это печально.

 

У яндекса недавно появился сервис Проверка ответа сервера

http://webmaster.yandex.ru/server-response.xml

С помоью этого инструмента я окончательно убедился что бот не видит ничего, из того, что требуется.

Или я то-то не так делаю? Писал на форум - надавали кучу ненужных советов, как обычно )) в своей работе я не сомневаюсь - зато сомневаюсь в работе вашего сканера. Если он пашет как надо - приведите мне примеры ajax сайтов, кроме вконтакте и твиттара, которые индексируются вашим ботом.

Да, к стати на твиттере никакого тега в исходном коде что то не видно - с чего бы это. В контакте то-же самое.

И что прикажете делать? Клоакингом заниматься? самому вашему боту требуемое подсовывать? Так вы же сами за это баните, сами не работаете как надо, по документации, сами же за исправление этого и баните. Где справедливость? Гугл хоть немного сканирует, пытается... Ваш бот как спал так и спит...

А в ответ тишина... :-)

Такими темпами проще самому парсер на php с выполнением ajax им написать, чем ждать, пока их яндекс будет индексировать такие сайты... И за что только зарплату получают... Тишина, ага))


Александр РозенбаумШабес-гой на Яндекс.Музыке

Вроде сдвинелось с метвой точки дело. /?_escaped_fragment_= сегодня влетело 39 страниц в поиск.

До этого суппорт отвечал, что были проблемы с обновлениями поисковых баз. Надеемся все разрешилось

Поздновато. Я уже переделал сайт. Сделал 2 версии - для юзерей без джабаскрипта и для юзерей с врубленным джабаскриптом. Надо было сначала так делать а не мучать себя с _escaped_fragment_= и прочим бредом, если честно. Вам к стати светую поступить так-же) Зайдите на указанный сайт, посмотрите на ссылки. отключите жабускрипт и потыкайте по кнопкам. Вот так должно быть, по идее.... Ссылки выше теперь не действительны. http://aftamat4ik.ru/author/Кипелов сюда заходите :-). Так сказать живой пример аякс  сайта, проиндексированного яндексом.(150+ страниц).http://yandex.ru/yandsearch?text=site:aftamat4ik.ru&clid=124988&lr=20716

Хотя еще есть косякив индексации. Правлю файл Роботс)

А Яндексу респект, за то что решили проблемму)

Подскажите, нигде не могу найти ответ.

Можно ли для яндекс бота "подсовывать" (?_escaped_fragment_=) страницы без дизайна, т.е. только контент.
т.к. разрабатывать и поддерживать ещё серверную версию страниц с дизайонм - накладно.

чем это чревато?, не забанит ли мой сайт яндекс?

Спасибо.

Нет, можно только для Яндекс бота.
Почему вы думаете, что поисковики видят ваш дизайн?

> Почему вы думаете, что поисковики видят ваш дизайн?

Из за того что может есть какая-то система от клоакинга, да и в поиске как "копия" отображается.


Ребята, у вас баг.

У меня есть сайт полность на js.

Вот пример оригинальной ссылки:

/index.html#!service=1&work=&experience=&limit=&offset=

Вот то, что попало в Яндекс.Вебмастер

index.html?_escaped_fragment_=service%3D0%26work%3D%26experience%3D%26limit%3D%26offset%3D

 

Почему вместо &= вы заэнкодили %3D0%26 ? После такого преобразования ни одна ссылка не работает. А вывод - парсинг хэша становиться совсем хардкорным. Действительно получается, что мастера должны сделать очень много работы за вас!

подскажите как сделать ссылку site.ru/?_escaped_fragment_=blog

конкретно каким образом вставить знак вопроса и знак равно, не принимает у меня

Здравствуйте, все сделал как и описано в помощи Яндекса выше и здесь http://help.yandex.ru/webmaster/?id=1125296. К сожалению, кроме главной, и то без дескрипшена ничего не проиндексировал Яндекс(((

Остался еще открытый вопрос по карте сайта (у меня вордпресс):

какие урлы включать в него?

у меня доступно 3 типа:

обычный без # , т. е. сайт/страница

#! - сайт/#!страница,

и с ?_escaped_fragment_=

Не нашел в сети ни одного генератора карты сайта для ajax

Подскажите, плиз выход

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вот и появились первые страницы с AJAX в поиске, и поэтому есть желание немного рассказать об опыте индексации AJAX'а Яндексом. При этом, с одной стороны, надеюсь, что Яндекс после полугода эксплуатации может быть исправит ошибки своих ботов, а с другой, возможно это поможет другим разработчикам сайтов на AJAX избежать борьбы с "ветряными мельницами".

Главная проблема ботов Яндекса состоит в том, что они совершенно некорректно обрабатывают линки на страницы содержащие параметры (query string), причем обработка также зависит и от того, откуда бот взял данную ссылку, например:

1. Ссылка из внешнего источника в виде site.ru/?param1=value1¶m2=value2#!hash парсится ботом "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" как /?_escaped_fragment_=hash¶m2=value2¶m1=value1 и соответственно в индекс яндекса она попадает в виде site.ru/#!hash¶m2=value2¶m1=value1, о результатах такого перехода я думаю догадаться можно.

2. Тот же самый линк новостным ботом Яндекса "Mozilla/5.0 (compatible; YandexNews/3.0; +http://yandex.com/bots)" будет преобразован в следующую строку /?param1=value1¶m2=value2?_escaped_fragment_=hash (обратите внимание на второй вопросительный знак), т.к. написано в документации (читай ТЗ) "#! заменяется на ?_escaped_fragment_" значит так и должно заменяться и наплевать на другие параметры.

3. Если внутрення ссылка в вашем html-коде имеет вид href="#!hash", а сама теукщая страница имеет параметры, то "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" так и пойдет индексировать site.ru/?_escaped_fragment_=hash и плевать он хотел на параметры открываемой при этом страницы.

И только если индексируется правильная (с точки зрения бота) внутрення ссылка вида href="?param1=value1¶m2=value2#!hash" (и только в этом случае) бот "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" проиндексирует ее правильно.

Спасибо всем. И успехов вам в индексации ваших сайтов.

 

Например, страницы навигации будут иметь такой вид:
magazin.com/cat123/#!p_1 - главная категорий, на которую будут вести внутр. ссылки
magazin.com/cat123/#!p_2

Можно ли, в html версиях magazin.com/cat123/?_escaped_fragment_=p_1 или magazin.com/cat123/?_escaped_fragment_=p_4 поставить редирект на страницу  magazin.com/cat123/, в которой будет выводиться весь товар без разбивки на страницы.
И считается ли это клоакингом?

Прошел год, аякс по-прежнему с костылем.

То есть тем у кого сайт на простом удобном cargocollective, и нет никакой возможности влезть в код, можно забыть о поиске.

Почему гугл то все индексирует легко?

Видимо потому что у нас собеседование проводят такие как Алексей Леонидович :)

5 августа 2012 года, 12:40

Н-да, не прошли бы вы у меня собеседование.

лексей Леонидови

У меня такой вопрос:

На странице 5 табов, контент которых под хеш-ссылками #tab1 #tab2 ... #tab5 (переключение на классах из JS). Если сделать все по вашей схеме, то ссылка в серпе будет вести на страницу с уже открытой необходимой вкладкой?

на какой странице робот будет икать HTMLконтент, если увидит ссылку вида  http://www.examplesite.ru/#!blog#!.html

робот заменит только певый #! или оба? или вообще затупит и никуда не пойдет?

А какая ситуация на январь 2015 года? 
Все еще необходимо делать хешбенги? 

Если ссылка такого вида - examplesite.ru/blog, то чтобы указать поисковику на HTML-версию страницы можно использовать как на главной странице, или только так - examplesite.ru/#!blog

Уже 2015 год.

И до каких пор такие финты ушами будут продолжаться, когда будет нормальная индексация? Измените вы хоть что-нибудь!

ничего не понятно. сайт поставили на индексацию андексом месяц назад - до сих пор ничего не проиндексированно. что сделать нужно? сайт сделан в редакторе wix

Продублируйте сообщение в поддержку Яндекс.Вебмастера, пожалуйста. Разберемся, в чем дело. Для того, чтобы написать туда, нужно подтвердить права на ваш сайт в Яндекс.Вебмастере, потом зайти на страницу информации о данном подтвержденном сайте и перейти по ссылке «Обратная связь», которая находится внизу данной страницы.

сайты на emberjs или angularjs с URL'лами где не используется '#' (прим. http://exmpl.com/blog/pos/111) индексируются нормально? или нужны HTML версии?

Простите за задержку с ответом. Да, потребуются копии по адресам вида http://exmpl.com/blog/pos/111?_escaped_fragment_= + на страницы нужно добавить мета-тег . Подробности, если нужно - https://yandex.ru/support/webmaster/robot-workings/ajax-indexing.xml .

 

бред какой-то написан........

Если страница генерится билдером по XML который меняется по параметрам запроса мне что роботу показывать - все результаты по всем параметрам???? ничерта непонятно ведь......

Пусть лучше учат своих роботов читать JS. Пусть поисковики подстраиваются под интернет индустрию, а то такое чувство, что механизмы ПС застряли в 90х годах прошлого века.
____________________________________________________________
Конечно, зачем переписывать поисковик, пускай все переписывают сайты - согласен))
______________________________________________________________

А что делать тем кто делает сайты в виде flash c XML?????????
Все сайты в будущем скорее всего будут так устроены.

А если появятся несколько качественных крупных проектов такого вида (flashXML), и без #статичеких копий# со всякими палочками и крестиками (типо #!) о каком тогда качестве поиска можно будет говорить? если всякие статические html сайты сделанные школьниками в 2000 будут выше в поиске чем новые сложные програмные сайты-приложения?


Я вам скажу больше даже sitemap и robots это пережитки прошлого, не говоря уже о метатегах и пр.


Короче пусть поисковики сами подстраиваются, а иначе это ерунда получается.........
яндекс монополизировал рунет и не хочет развиваться....... очень скоро его потеснят...
к слову AJAX - не технология будущего и не какойто космос космический,


firstlena.pershina
12 ноября 2015, 12:12

Эта статья 2012 года, а вот свежая, про JS: http://webmaster.ya.ru/replies.xml?item_no=21369

Подскажите пожалуйста, а как Яндекс относится к тому чтобы присваивоить блокам собственного URL при помощи JavaScript и метода PushState?
Яндекс, сделайте нормального бота, который сможет индексировать любые SPA. 
Гугл давно научился и все работает. Почему не пускаете ресурс в это направление ?