Робот 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 (раздел "3. Обработка страниц без хеш-фрагментов"). В нашей конфигурации Nginx мы имеем что-то вроде этого:

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

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

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

server from snapshots

}

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

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

Это правда? Так ли это на самом деле?

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

Ура,
Ираклис

4 ответа

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

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

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

http://my.domain.com/base/

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

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

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

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

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

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

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

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

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

  1. Робот Google не гарантирует выполнение всего кода JavaScript.
  2. Робот Google попытается найти ссылки в javascript для последующего использования и использовать их для поиска других страниц.
  3. Робот Googlebot отобразит предварительный просмотр в инструментах веб-мастеров, выполнив столько JavaScript, сколько сможет (таким образом, отсутствие {{}} в отображаемой версии).
  4. Робот 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
Это случайная страница в моем домене. Отличный пример страницы, чтобы быть уверенным!

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

Google рекомендует предоставить снимок HTML-кода веб-сайта AJAX с помощью параметра hashbang (#!) И _escaped_fragment_.

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

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

(На данный момент и по опыту, ничего официального от Google) другие сервисы, такие как PageSpeed ​​Insight, анализатор Инструментов для веб-мастеров, инструменты тестирования Richsnippet и т. Д. Hasbang (#!) Не поддерживаются. Вы должны использовать _escaped_fragment_.

Следует ли использовать обнаружение User Agent для предоставления снимка HTML?

Нет, просто не надо. По разным причинам:

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

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

Может быть, немного устарел, но для полноты:

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

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

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

Другие вопросы по тегам