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

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

Пост в архиве.

Все большей популярностью у разработчиков сайтов пользуется технология 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_=.

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

 

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

59 комментариев

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

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

Алексей Траньков
19 января 2016, 11:20

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

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

Алексей Траньков
19 января 2016, 11:20

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

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

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

Алексей Траньков,
Так, как это сделано у google...
Алексей Траньков,
Как это Google реализовал ? Вот так и реализуйте
Алексей Траньков,
разработчики Google тоже не прошли бы :) Есть подвижки в автоматизации этого процесса?

(+1)

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

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

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

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

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

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

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

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

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

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

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

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

 

Нужно просто понять, что 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.

 

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

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

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

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

 

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

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

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

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

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

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

Согласен полностью. Себя нужно обезапасить.
Евгений Т.
19 января 2016, 11:20

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

просмотрел выдачу по примерно 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). Если сделать все по вашей схеме, то ссылка в серпе будет вести на страницу с уже открытой необходимой вкладкой?

Сима Симаков
19 января 2016, 11:20

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

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

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

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

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

Елена Першина
19 января 2016, 11:20

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

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

Елена Першина
19 января 2016, 11:20

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

 

Станислав Хвастовский
19 января 2016, 11:20
бред какой-то написан........

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

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

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

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


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


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


Елена Першина
19 января 2016, 11:20

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

Подскажите пожалуйста, а как Яндекс относится к тому чтобы присваивоить блокам собственного URL при помощи JavaScript и метода PushState?
Яндекс, сделайте нормального бота, который сможет индексировать любые SPA. 
Гугл давно научился и все работает. Почему не пускаете ресурс в это направление ?
Алексей Винокуров
17 ноября 2017, 08:30
Добрый день. Подскажите скорость загрузки какой версии страницы (ajax или html) учитывается при ранжировании?
Елена Першина
Сотрудник Яндекса17 ноября 2017, 12:11
Алексей Винокуров,
Добрый день! Вопросы ранжирования в таком формате не комментируем. 
Алексей Винокуров
22 ноября 2017, 09:21
Елена Першина,
Добрый день а в каком формате комментируете?


Вот по вопросу транслитерации урл http://www.translityandex.ru/ конкретно написано, что сайт де соблюдается правильная транслитерация Яндекс, получит преимущество перед конкурентами.



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


Я могу сделать сайт с разным  скрытым контентом(display:none), который отрывается (display:block) в завимости от действий посетителя, потом закэшировать эти страницы для скорости загрузки.

Или могу сделать ajax сайт с подгрузкой контента, тоже закэшировать, его страницы и выполнить рекомендации яндекса по ?_escaped_fragment_= и <meta name="fragment" content="!">
При этом ajax страницы сайта загрузятся естественно быстрее чем страницы сайта со скрытым контентом, а вот страницы  html версии ajax сайта загрузятся с такой же скоростью как и страницы сайта со скрытым контентом.

В данном случае нагрузка для сервера от аjax сайта в разы, если не десятки раз больше, чем нагрузка от сайта со скрытым контентом, т.к. ajax сайту приходится регулярно обращаться к серверу, а к кэшированным страницам сайта со скрытым содержимым сервер обращется всего один раз и загружает заранее подготовленный кэш.


Какой же смысл может быть создании сайта ajax  и раскрытие ajax содержимого для индексации яндекса (когда яндекс и так проиндесирует скрытый контент), а такой, что если яндекс учитывает при ранжировании скорость загрузки ajax версии на не html, то при ранжировании сайт получит преимущество из за более высокой скорости загрузки страниц.
Если яндекс при ранжировании учитывает скорость загрузки html страниц, то нет смысла перегружать сервер запросами с ajax страниц и вообще заморачиваться с ?_escaped_fragment_= и <meta name="fragment" content="!">, а спокойно делать сайт со скрытым содержимым.
(Это все для скрытого подгружаемого контента с разумными размерами, для очень больших размеров естественно подход другой)








Елена Першина
Сотрудник Яндекса24 ноября 2017, 21:12
Алексей Винокуров,
Про транслитерацию - это где такое написано? 
Елена Першина
Сотрудник Яндекса24 ноября 2017, 21:13
Алексей Винокуров,
делаете быстрый сайт для пользователей - отлично, о поиске то тут что переживать?
Добрый день.
Скоро 2018, так ничего и не изменилось? или уже можно не задумываться на этот счёт?
Обновлено 23 ноября 2017, 15:55