Робот 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 будут иметь вид:
Робот 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 здесь. Однако, как ясно показано в записи в блоге, это сопровождается множеством предостережений. Например:
- Робот Google не гарантирует выполнение всего кода JavaScript.
- Робот Google попытается найти ссылки в 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
Это случайная страница в моем домене. Отличный пример страницы, чтобы быть уверенным!
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?
Нет, просто не надо. По разным причинам:
- Вы просто не знаете, какие сервисы / боты в Интернете хотели бы проанализировать ваш контент, и вы не можете быть исчерпывающим (например, подумайте обо всех социальных сетях, существующих в Интернете, используя Bot для создания фрагмента вашего контента: вы можете не справляться с ними один за другим)
- Это можно рассматривать как уловку: предоставление другой версии в зависимости от типа пользователя на одном и том же URL-адресе, что в принципе неправильно для SEO.
Google ищет #! в нашем сайте URL-адреса, а затем принимает все после #! и добавляет его в параметр запроса _escaped_fragment_. Некоторые разработчики создают базовые HTML-страницы с реальными данными и обслуживают эти страницы со стороны сервера во время сканирования. Итак, почему бы нам не отобразить те же страницы с PhantomJS на стороне обслуживания, в которой есть _escaped_fragment_. Для более подробной информации, пожалуйста, прочитайте этот блог.
Может быть, немного устарел, но для полноты:
Согласно заявлению от 23 мая 2014 года, бот Google теперь может "видеть ваш контент как современные веб-браузеры".
Согласно их заявлению от 14 октября 2015 года, Google устарела схема сканирования AJAX.
Таким образом, использование API истории HTML5 (html5mode in angular) не должно быть проблемой для Google.