Похоже, вы неправильно поняли руководство по сканированию AJAX.Обозначение #!
должно использоваться для ссылок на страницу , в которой находится ваше AJAX-приложение, а не на URL-адрес службы, к которой обращается ваше приложение.Например, если я получу доступ к вашему приложению, перейдя на example.com/app/
, то вы сделаете сканирование страницы, вместо ссылки на example.com/app/#!page=1
.
Теперь, когда робот Googlebot видит этот URL-адрес в ссылке, а не наexample.com/app/#!page=1
- что означает выдачу запроса на example.com/app/
(напомним, что хеш никогда не отправляется на сервер) - он запросит example.com/app/?_escaped_fragment_=page=1
.Если в запросе присутствует _escaped_fragment_
, вы знаете, что хотите вернуть статическую HTML-версию вашего контента.
Почему все это необходимо?Робот Googlebot не выполняет сценарий (и при этом он не знает, как индексировать ваши объекты JSON), поэтому у него нет возможности узнать, что будет перед вашими пользователями после запуска ваших сценариев и загрузки контента.Итак, ваш сервер должен сделать тяжелую работу по созданию HTML-версии того, что ваши пользователи в конечном итоге увидят в версии AJAXy.
Итак, каковы ваши дальнейшие шаги?
Первый , либо измените ссылки, указывающие на ваше приложение, чтобы включить #!page=1
(или что-то еще), либо добавьте <meta name="fragment" content="!">
в HTML вашего приложения.(См. Пункт 3 Руководства по сканированию AJAX .)
Когда пользователь меняет страницы (если это применимо), вам также следует обновить хеш, чтобы отобразить текущую страницу.Вы можете просто установить location.hash='#!page=<em>n</em>';
, но я бы порекомендовал использовать отличный плагин jQuery BBQ , чтобы помочь вам управлять хэшем страницы.(Таким образом, вы можете прослушивать изменения хеша, если пользователь вручную изменяет их в адресной строке.) Предупреждение: текущая выпущенная версия BBQ (1.2.1) не поддерживает URL-адреса для обхода AJAX, но самая последняя версия вмастер Git (1.3pre) делает, так что вам нужно взять его здесь .Затем просто установите параметр сканирования AJAX:
$.param.fragment.ajaxCrawlable(true);
Секунда , вам нужно будет добавить некоторую логику на стороне сервера в example.com/app/
, чтобы обнаружить присутствие _escaped_fragment_
встрока запроса и возвращает статическую HTML-версию страницы, если она есть.Вот где руководство Google по созданию снимков HTML может оказаться полезным.Звучит так, как будто вы захотите использовать вариант 3. Вы также можете изменить свой сервис для вывода HTML в дополнение к JSON.