Rastreamento de bot do Google no site AngularJS com rotas no modo HTML5

Temos um site AngularJS usando rotas HTML5. Acabei de fazer alguns testes “Fetch as Google”. Os resultados são um pouco confusos:

  • Na guia de busca, vejo nosso site como parece na fonte de exibição, com todas as ligações front-end {{}}, e nem todo o HTML processado
  • Na guia de renderização, nosso site parece estar perfeitamente bem, sem {{}} variables, parece que o Google bot buscou e tornou o site muito bem, o que talvez esteja de acordo com isso, http://googlewebmastercentral.blogspot.ae/2014/ 05 / rendering-pages-with-fetch-as-google.html

No entanto, já estamos preparados para que o Google não consiga indexar nosso site, por isso, já adicionamos, então o bot do Google revisita nossa página com “? _Escaped_fragment_ =”. Seguimos isso, https://developers.google.com / webmasters / ajax-crawling / docs / getting-started (seção “3. Lidar com páginas sem fragments de hash”). Em nossa configuração do Nginx, temos algo assim:

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

, e de fato funciona bem, se passarmos pelo _escaped_fragment_ = nós mesmos. No entanto, o bot do Google nunca tentou rastrear nosso site com esse parâmetro, de modo que ele nunca rastreou o instantâneo. Estamos faltando alguma coisa? Devemos também adicionar detecção de agente para o bot do Google em nosso conf Nginx? Algo assim?

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

Seria ótimo se pudéssemos entender isso melhor, muito obrigado antecipadamente!

ATUALIZAR:
Acabei de ler isto, http://scotch.io/tutorials/javascript/angularjsseo-with-prerender-io?_escaped_fragment_=tag#caveats . Então, parece que ao usar as ferramentas manuais (Fetch as Google), devemos nos passar #! ou? _escaped_fragment_ = no lugar certo. De fato, se eu passar? _Escaped_fragment_ = no nosso caso, eu vejo o instantâneo HTML que criamos.

Isso é verdade? É assim que funciona de fato?

ATUALIZAÇÃO 2 Na parte inferior deste tópico, um funcionário do Google confirma que, para o Google Webmasters “Buscar como o Google”, você precisa passar manualmente o _escaped_fragment_ = param por si mesmo, https://productforums.google.com/forum/#!msg/ webmasters / fZjdyjq0n98 / PZ-nlq_2RjcJ

Felicidades,
Iraklis

Tentarei responder suas perguntas com base em nossas experiências no último mês de desenvolvimento de um SPA com o modo HTML5.

Como faço para o Googlebot usar? _Escaped_fragment_ = em vez dos links diretos.

Isso é realmente muito simples, mas fácil de ignorar. Na verdade, existem duas maneiras diferentes de fazer o Googlebot testar o escaped_fragment. O primeiro método é executar seu site no modo não-html5. Isso significa que seus URLs estarão no formato:

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

O Googlebot reconhece o #! e faz uma segunda chamada para o seu servidor com um URL alterado:

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

Qual você pode então segurar como você deseja. A segunda maneira de fazer com que o Googlebot tente o modo _escaped_fragment_ é include a seguinte meta tag na página de índice que você fornece ao bot:

  

Isso fará com que o googlebot verifique a outra versão da página toda vez que vir a tag. Curiosamente, você pode usar essas duas técnicas juntas ou fazer o que acabamos fazendo, que está sendo executado no modo html5 com a metatag. Isso significa que seus URLs terão o seguinte escape:

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

Curiosamente, o bot não colocará nada no final do fragment. Mas, dependendo de qual servidor você está executando, você pode mapear isso facilmente com um padrão correspondente ao texto “_escaped_fragment_” para sua página de bot alternativa. Para mais informações sobre o fragment de escape, clique aqui .

“Buscar como o Googlebot” retorna duas versões diferentes da minha página, a fonte com {{}} e a página renderizada parecem corretas. O que isso significa?

Os bots do Google podem, na verdade, interpretar JavaScript de forma limitada desde o início de 2014. Para obter mais informações, leia a input oficial do blog sobre os webmasters do Google aqui . No entanto, como fica claro na input do blog, isso vem com muitas ressalvas. Por exemplo:

  1. O Googlebot não garante a execução de todo o código javascript.
  2. O Googlebot tentará encontrar links no javascript para segui-los e usá-los para ajudar a encontrar mais páginas.
  3. O Googlebot processará a visualização em ferramentas de webmasters, executando o máximo possível de javascript (assim, a falta de {{}} na versão renderizada).
  4. O Googlebot não usará necessariamente a versão renderizada para criar as meta-informações sobre seu site para seu índice.

A partir de 18/12/2014 , ainda não temos certeza se o Googlebot pode realmente extrair qualquer informação de um SPA no modo renderizado para seu índice, além de encontrar links para seguir no javascript. Em nossa experiência, o Googlebot includeá {{}} em sua listview de índice para que, quando você tentar usar {{}}, preencha meta informações (descrição, palavras-chave, título, etc …) seu site se parece com isso na Pesquisa do Google resultados:

{{meta.siteTitle}}
http://my.domain.com/pt/base/some/path/on/website
{{Meta Descrição}}

em vez do que você espera, que pode ser assim:

Domínio
http://my.domain.com/pt/base/some/path/on/website
Esta é uma página aleatória no meu domínio. Uma excelente página de exemplo para ter certeza!

O GoogleBot para mecanismo de pesquisa usa _escaped_fragment_, mas não podemos ter certeza sobre outros serviços

O Google recomenda veicular um instantâneo HTML do site AJAX usando hashbang (#!) E _escaped_fragment_ param.

Mas, como frequentemente para o novo recurso do Google, todos os serviços do Google não oferecem suporte desde o início.

Por enquanto, por experiência, temos certeza de que o GoogleBot para indexação da página da Web usa instantâneo HTML e _escaped_fragment_. Você pode verificar seus Registros de Acesso ao Servidor para ter certeza de que o Google fez isso em seu aplicativo.

(Por enquanto e por experiência, nada oficial do Google) outros serviços como o PageSpeed ​​Insight, o analisador das Ferramentas do Google para webmasters, as ferramentas de teste Richsnippet, etc .: hasbang (#!) Não são suportados. Você tem que usar _escaped_fragment_.

Você deve usar a detecção do agente do usuário para exibir um instantâneo HTML?

Não. Apenas não faça. Por diferentes razões :

  1. Você simplesmente não sabe quais serviços / bots na web gostariam de analisar seu conteúdo e não pode ser exaustivo (por exemplo, pense em todas as redes sociais existentes na Web usando Bot para criar um trecho de seu conteúdo: você pode não lidar com eles um por um)
  2. Isso pode ser considerado como cloacking: servir uma versão diferente dependendo do tipo de usuário na mesma URL, o que é basicamente errado para SEO.

O Google procura #! no nosso site urls e depois leva tudo depois do #! e adiciona-o no parâmetro de consulta _escaped_fragment_ . Alguns desenvolvedores criam páginas html básicas com dados reais e veiculam essas páginas do lado do servidor no momento do rastreamento. Então, por que não renderizamos as mesmas páginas com o PhantomJS no lado do servidor que tem _escaped_fragment_ . Para mais detalhes, leia este blog .

Talvez um pouco desatualizado, mas pela completude:

De acordo com a declaração de 23 de maio de 2014, o Google bot agora pode “ver seu conteúdo mais como os navegadores da Web modernos”.

De acordo com a declaração de 14 de outubro de 2015, o Google preteriu o esquema de rastreamento do AJAX.

Portanto, usar a API de histórico do HTML5 (html5mode in angular) não deve ser problema para o Google.