Подтвердить что ты не робот

Google бот просматривает сайт AngularJS с помощью маршрутов режима HTML5

У нас есть сайт AngularJS, использующий маршруты HTML5. Я только что проверил тест "Fetch as Google". Результаты немного запутываются:

  • На вкладке выбора я вижу наш сайт так, как он выглядит в источнике просмотра, со всеми привязками переднего конца {{}}, а не со всеми отображаемыми HTML
  • На вкладке рендеринга наш сайт выглядит отлично, нет {{}} переменных, кажется, что бот Google получил и сделал сайт прекрасным, что, возможно, соответствует этому, http://googlewebmastercentral.blogspot.ae/2014/05/rendering-pages-with-fetch-as-google.html.

Однако мы уже готовы к тому, что Google не сможет сканировать наш сайт, поэтому мы уже добавили, поэтому бот Google пересматривает нашу страницу с помощью "? _escaped_fragment_ =". Мы следовали этому, https://developers.google.com/webmasters/ajax-crawling/docs/getting-started (раздел "Обработка страниц без хэш-фрагментов" ). В нашей конфигурации Nginx есть что-то вроде этого:

if ($args ~ "_escaped_fragment_=") {
    serve the static HTML snapshots
}

и действительно, он отлично работает, если мы передадим _escaped_fragment_ = сами. Тем не менее, бот Google никогда не пытался обходить наш сайт с помощью этого параметра, поэтому он никогда не сканировал моментальный снимок. Мы что-то упускаем? Должны ли мы также добавлять обнаружение агента для робота Google в нашем Nginx conf? Что-то вроде этого?

if ($http_user_agent ~* "googlebot|yahoo|bingbot|baiduspider|yandex|yeti|yodaobot|gigabot|ia_archiver|facebookexternalhit|twitterbot|developers\.google\.com") {            

server from snapshots

}

Было бы здорово, если мы сможем понять это лучше, спасибо вам заранее!

UPDATE:
Я просто прочитал это, http://scotch.io/tutorials/javascript/angularjs-seo-with-prerender-io?_escaped_fragment_=tag#caveats. Таким образом, кажется, что при использовании ручных инструментов (Fetch as Google) мы должны пройти либо #! или? _escaped_fragment_ = в нужном месте. Действительно, если я пройду? _escaped_fragment_ = в нашем случае, я вижу созданный снимок HTML.

Это правда? Действительно ли это работает?

ОБНОВЛЕНИЕ 2 В нижней части этой статьи сотрудник Google проверяет, что для Google Webmasters "Получить как Google" вам необходимо вручную передать _escaped_fragment_ = param самостоятельно, https://productforums.google.com/forum/#!msg/webmasters/fZjdyjq0n98/PZ-nlq_2RjcJ

Cheers,
Ираклис

4b9b3361

Ответ 1

Я постараюсь ответить на ваши вопросы, основываясь на нашем опыте за последний месяц разработки SPA с режимом HTML5.

Как я могу использовать Googlebot? _escaped_fragment_ = вместо прямых ссылок.

Это на самом деле довольно просто, но легко пропустить. Фактически, есть два разных способа заставить робота Googlebot попробовать escaped_fragment. Первый способ - запустить ваш сайт в режиме, отличном от html5. Это означает, что ваши URL-адреса будут иметь форму:

http://my.domain.com/base/#!some/path/on/website

Googlebot распознает #! и делает второй звонок на ваш сервер с измененным URL-адресом:

http://my.domain.com/base/?_escaped_fragment_=some/path/on/website

Что вы можете обрабатывать по своему усмотрению. Второй способ заставить Googlebot попробовать режим _escaped_fragment_ - включить следующий метатег на индексную страницу, которую вы передаете боту:

<meta name="fragment" content="!">

Это заставит googlebot проверять другую версию веб-страницы каждый раз, когда она увидит тег. Интересно, что вы можете использовать обе эти методы вместе, или вы можете делать то, что мы закончили, работая в режиме html5 с помощью метатега. Это означает, что ваши URL-адреса будут экранированы следующим образом:

http://my.domain.com/base/some/path/on/website?_escaped_fragment_=

Интересно, что бот ничего не поместит в конце фрагмента. Но в зависимости от того, какой веб-сервер вы используете, вы можете легко сопоставить это с шаблоном, соответствующим тексту "_caped_fragment_", на вашу альтернативную ботовую страницу. Для получения дополнительной информации об экранированном фрагменте перейдите здесь.

"Fetch as Googlebot" возвращает две разные версии моей страницы, источник с {{}} и визуализированная страница выглядят правильно. Что это значит?

Google Bots может фактически интерпретировать JavaScript в ограниченной степени с начала 2014 года. Для получения дополнительной информации прочитайте официальную запись в блоге на веб-мастерах Google здесь. Однако, как ясно видно в блоге, это связано с большим количеством оговорок. Например:

  • Googlebot не гарантирует выполнение всех javascript-кода.
  • Googlebot попытается найти ссылки в javascript для последующего использования и использовать их для поиска других страниц.
  • Googlebot отобразит предварительный просмотр в инструментах веб-мастеров, выполнив как можно больше javascript (таким образом, отсутствие {{}} в рендеринговой версии).
  • Googlebot не обязательно будет использовать предоставленную версию, чтобы создать метаинформацию о вашем сайте для своего индекса.

По состоянию на 18/12/2014, мы по-прежнему не уверены, что Googlebot может фактически извлечь любую информацию из SPA в режиме рендеринга для своего индекса за пределами поиска ссылок, чтобы следовать в javascript. По нашему опыту, Googlebot будет включать {{}} в свой индексный список, чтобы при использовании {{}} для заполнения метаинформации (описание, ключевые слова, название и т.д.) Ваш сайт выглядит так в Google Поиске результаты:

{{meta.siteTitle}}
http://my.domain.com/base/some/path/on/website
{{Meta.description}}

а не то, что вы ожидаете, что может выглядеть так:

Домен
http://my.domain.com/base/some/path/on/website
Это случайная страница в моем домене. Отличная страница примера, чтобы быть уверенным!

Ответ 2

GoogleBot для поисковой системы использует _escaped_fragment_, но мы не можем быть уверены в других сервисах

Google рекомендует использовать снимок HTML на веб-сайте AJAX, используя параметры hashbang (#!) и _escaped_fragment_.

Но так же часто для новой функции Google все сервисы Google не поддерживают ее от попрошайничества.

Теперь, по опыту, мы уверены, что GoogleBot для индексирования веб-страницы использует моментальный снимок HTML и _escaped_fragment_. Вы можете проверить свои журналы доступа к серверу, чтобы убедиться, что Google сделал это в своем приложении.

(В настоящее время и по опыту, ничего официального с Google) другие службы, такие как PageSpeed ​​Insight, парсер инструментов для веб-мастеров, инструменты тестирования Richsnippet и т.д.: hasbang (#!) не поддерживается. Вы должны использовать _escaped_fragment _.

Должны ли вы использовать обнаружение агента пользователя для обслуживания моментального снимка HTML?

Нет. Только не надо. По разным причинам:

  • Вы просто не знаете, какие службы/боты в Интернете хотели бы проанализировать ваш контент, и вы не можете быть исчерпывающим (например, подумайте обо всех социальных сетях, существующих в Интернете, используя Bot, чтобы создать фрагмент вашего контента: вы не можете обрабатывать их один за другим)
  • Это можно рассматривать как cloacking: обслуживание другой версии в зависимости от типа пользователя по одному URL-адресу, что в основном неверно для SEO.

Ответ 3

Google ищет #! в наших URL-адресах, а затем берет все после #! и добавляет его в параметр запроса _escaped_fragment _. Некоторые разработчики создают базовые html-страницы с реальными данными и обслуживают эти страницы со стороны сервера во время обхода. Итак, почему бы нам не сделать те же страницы с PhantomJS на стороне сервиса, которая имеет _escaped_fragment _. Для более подробной информации, пожалуйста, прочтите blog.

Ответ 4

Возможно, немного устарел, но для полноты:

В соответствии с инструкцией от 23 мая 2014 года бот Google теперь может "видеть ваш контент больше похожим на современные веб-браузеры".

В соответствии с их с 14 октября 2015 г. Google не рекомендовал схему обхода AJAX.

Поэтому использование API истории HTML5 (html5mode в angular) не должно быть проблемой для Google.