Google bot rastrea en el sitio de AngularJS con rutas en modo HTML5

Tenemos un sitio AngularJS usando rutas HTML5. Acabo de hacer una prueba “Fetch as Google”. Los resultados son un poco confusos:

  • En la pestaña de búsqueda, veo nuestro sitio como se ve en la fuente de vista, con todos los enlaces frontales {{}}, y no todo el HTML procesado
  • En la pestaña de renderizado, nuestro sitio se ve perfectamente bien, no hay {{}} variables, parece que el bot de Google ha recuperado y renderizado bien el sitio, lo que quizás esté en línea con esto, http://googlewebmastercentral.blogspot.ae/2014/ 05 / rendering-pages-with-fetch-as-google.html .

Sin embargo, ya estamos preparados para que Google no pueda rastrear nuestro sitio, por lo que ya hemos agregado, por lo que el bot de Google vuelve a visitar nuestra página con “? _Escaped_fragment_ =”. Seguimos esto, https://developers.google.com / webmasters / ajax-crawling / docs / getting-started (sección “3. Manejar páginas sin fragmentos hash”). En nuestra configuración de Nginx tenemos algo como esto:

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

, y de hecho funciona bien, si pasamos el _escaped_fragment_ = nosotros mismos. Sin embargo, el bot de Google nunca intentó rastrear nuestro sitio con este parámetro, por lo que nunca rastreó la instantánea. ¿Nos estamos perdiendo algo? ¿Deberíamos también agregar detección de agente para Google bot en nuestro Nginx conf? ¿Algo como esto?

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

Sería genial si podemos entender esto mejor, ¡muchas gracias de antemano!

ACTUALIZAR:
Acabo de leer esto, http://scotch.io/tutorials/javascript/angularjsseo-with-prerender-io?_escaped_fragment_=tag#caveats . Por lo tanto, parece que al usar las herramientas manuales (Buscar como Google), ¡deberíamos pasarnos a nosotros mismos ya sea #! o? _escaped_fragment_ = en el lugar correcto. De hecho, si paso? _Escaped_fragment_ = en nuestro caso, veo la instantánea HTML que hemos creado.

¿Es eso cierto? ¿Es así como funciona realmente?

ACTUALIZACIÓN 2 En la parte inferior de este hilo, un empleado de Google verifica que para Google Webmasters “Obtener como Google”, debe pasar manualmente el _escaped_fragment_ = param usted mismo, https://productforums.google.com/forum/#!msg/ webmasters / fZjdyjq0n98 / PZ-nlq_2RjcJ

Aclamaciones,
Iraklis

Intentaré responder a sus preguntas basándome en nuestras experiencias en el último mes de desarrollo de un SPA con modo HTML5.

¿Cómo puedo utilizar Googlebot? _Escaped_fragment_ = en lugar de los enlaces directos.

Esto es bastante simple pero fácil de pasar por alto. De hecho, hay dos maneras diferentes de hacer que Googlebot pruebe el escaped_fragment. El primer método es ejecutar su sitio en modo no html5. Esto significa que sus URL serán de la forma:

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

¡Googlebot reconoce el #! y realiza una segunda llamada a su servidor con una URL alterada:

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

Que puede manejar como lo desee. La segunda forma de hacer que Googlebot pruebe el modo _escaped_fragment_ es incluir la siguiente metaetiqueta en la página de índice que le proporciona al bot:

  

Esto hará que googlebot verifique la otra versión de la página web cada vez que vea la etiqueta. Curiosamente, puede utilizar ambas técnicas juntas o puede hacer lo que terminamos haciendo, que se ejecuta en modo html5 con la metaetiqueta. Esto significa que sus URL serán escapadas de la siguiente manera:

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

Curiosamente, el bot no pondrá nada al final del fragmento. Pero dependiendo de qué servidor web está ejecutando, puede asignarlo fácilmente con un patrón que coincida con el texto “_escaped_fragment_” en su página de bot alternativa. Para obtener más información sobre el fragmento escapado, vaya aquí .

“Obtener como Googlebot” devuelve dos versiones diferentes de mi página, la fuente con {{}} y la página renderizada parece correcta. Qué significa eso?

Los Bots de Google realmente pueden interpretar JavaScript de forma limitada desde principios de 2014. Para obtener más información, lea la entrada oficial del blog en los webmasters de google aquí . Sin embargo, como se deja en claro en la entrada del blog, esto viene con muchas advertencias. Por ejemplo:

  1. Googlebot no garantiza ejecutar todos los códigos de JavaScript.
  2. Googlebot intentará encontrar enlaces en el Javascript para seguir y usarlos para ayudar a encontrar más páginas.
  3. Googlebot mostrará la vista previa en las herramientas de webmasters ejecutando la mayor cantidad de JavaScript posible (por lo tanto, la falta de {{}} en la versión representada).
  4. Googlebot no necesariamente usará la versión representada para construir la metainformación sobre su sitio para su índice.

A partir del 18/12/2014 , aún no estamos seguros de si Googlebot puede extraer cualquier información de un SPA en modo renderizado para su índice, más allá de encontrar enlaces para seguir en el javascript. Según nuestra experiencia, Googlebot incluirá {{}} en su listado de índices, de modo que cuando intente utilizar {{}} para completar la metainformación (descripción, palabras clave, título, etc.) su sitio se verá así en la Búsqueda de Google. resultados:

{{meta.siteTitle}}
http://my.domain.com/base/some/path/on/website
{{Metadescripción}}

en lugar de lo que espera que se vea así:

Dominio
http://my.domain.com/base/some/path/on/website
Esta es una página aleatoria en mi dominio. ¡Una página de ejemplo excelente para estar seguro!

GoogleBot for Search Engine usa _escaped_fragment_ pero no podemos estar seguros de otros servicios

Google recomienda publicar una instantánea HTML del sitio web AJAX utilizando hashbang (#!) Y _escaped_fragment_ param.

Pero, como suele suceder con la nueva función de Google, todos los servicios de Google no la admiten desde el principio.

Por ahora, por experiencia, estamos seguros de que GoogleBot para indexar páginas web usa una instantánea HTML y _escaped_fragment_. Puede consultar los Registros de acceso del servidor para asegurarse de que Google lo hizo en su aplicación.

(Por ahora y por experiencia, nada oficial por Google) otros servicios como PageSpeed ​​Insight, analizador de Herramientas para webmasters, herramientas de prueba de Richsnippet, etc .: hasbang (#!) No son compatibles. Tienes que usar _escaped_fragment_.

¿Debería usar la detección del agente de usuario para servir una instantánea HTML?

No. Simplemente no lo hagas. Por diferentes razones :

  1. Simplemente no sabe qué servicios / bots en la web le gustaría analizar su contenido y no puede ser exhaustivo (por ejemplo, piense en todas las redes sociales existentes en la web usando Bot para crear un fragmento de su contenido: puede no los maneje uno por uno)
  2. Esto se puede considerar como ocultamiento: servir una versión diferente según el tipo de usuario en la misma URL, lo cual es básicamente incorrecto para SEO.

Google busca #! en las URL de nuestro sitio y luego toma todo después del #! y lo agrega en el parámetro de consulta _escaped_fragment_ . Algunos desarrolladores crean páginas html básicas con datos reales y sirven estas páginas desde el lado del servidor en el momento de rastrear. Entonces, ¿por qué no renderizamos las mismas páginas con PhantomJS en el lado del servidor que tiene _escaped_fragment_ ? Para más detalles, lee este blog .

Tal vez un poco anticuado, pero para la integridad:

Según la statement del 23 de mayo de 2014, Googlebot ahora puede “ver su contenido más como navegadores web modernos”.

Según su statement del 14 de octubre de 2015, Google desaprobó el esquema de rastreo AJAX.

Por lo tanto, el uso de la API de historial de HTML5 (html5mode en angular) no debería ser un problema para Google.