Google bot che esegue la scansione sul sito AngularJS con percorsi in modalità HTML5

Abbiamo un sito AngularJS che utilizza percorsi HTML5. Ho appena fatto un test “Fetch as Google”. I risultati sono un po ‘confusi:

  • Nella scheda di recupero, vedo il nostro sito come appare nell’origine della vista, con tutti i collegamenti front-end {{}} e non tutto il codice HTML visualizzato
  • Nella scheda di rendering, il nostro sito sembra perfettamente a posto, non ci sono {{}} variabili, sembra che Google bot abbia recuperato e reso il sito valido, che è forse in linea con questo, http://googlewebmastercentral.blogspot.ae/2014/ 05 / rendering-pages-with-fetch-as-google.html .

Tuttavia, siamo già pronti per Google a non essere in grado di eseguire la scansione del nostro sito, quindi abbiamo già aggiunto, quindi il bot di Google rivisita la nostra pagina con “? _Escaped_fragment_ =”. Abbiamo seguito questo, https://developers.google.com / webmasters / ajax-crawling / docs / getting-started (sezione “3. Gestire le pagine senza hash frammenti”) Nella nostra configurazione di Nginx abbiamo qualcosa del genere:

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

e in effetti funziona bene, se passiamo a _escaped_fragment_ = noi stessi. Tuttavia, il bot di Google non ha mai provato a eseguire la scansione del nostro sito con questo parametro, quindi non ha mai eseguito la scansione dell’istantanea. Ci manca qualcosa? Dovremmo anche aggiungere il rilevamento degli agenti per Google bot sul nostro Nginx conf? Qualcosa come questo?

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

Sarebbe bello se riuscissimo a capirlo meglio, grazie mille in anticipo!

AGGIORNARE:
Ho appena letto questo, http://scotch.io/tutorials/javascript/angularjsseo-with-prerender-io?_escaped_fragment_=tag#caveats . Quindi, sembra che quando si utilizzano gli strumenti manuali (Visualizza come Google), dovremmo passare entrambi #! o? _escaped_fragment_ = nel posto giusto. In effetti, se passo? _Escaped_fragment_ = nel nostro caso, vedo lo snapshot HTML che abbiamo creato.

È vero? È così che funziona davvero?

AGGIORNAMENTO 2 Nella parte inferiore di questa discussione, un dipendente di Google verifica che per Google Webmaster “Visualizza come Google”, è necessario passare manualmente la _escaped_fragment_ = param yourself, https://productforums.google.com/forum/#!msg/ webmasters / fZjdyjq0n98 / PZ-nlq_2RjcJ

Saluti,
Iraklis

Proverò a rispondere alle tue domande sulla base delle nostre esperienze nell’ultimo mese di sviluppo di una SPA con la modalità HTML5.

Come faccio a utilizzare Googlebot? _Escaped_fragment_ = invece dei link diretti.

Questo è in realtà abbastanza semplice ma facile da trascurare. In realtà, ci sono due modi diversi per far sì che Googlebot provi l’escaped_fragment. Il primo metodo consiste nell’eseguire il tuo sito in modalità non-html5. Ciò significa che i tuoi URL saranno nella forma:

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

Googlebot riconosce il #! e effettua una seconda chiamata al tuo server con un URL modificato:

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

Che puoi quindi gestire come desideri. Il secondo modo per far sì che Googlebot provi la modalità _escaped_fragment_ è quello di includere il seguente meta tag nella pagina dell’indice che fornisci al bot:

  

Questo farà sì che googlebot controlli l’altra versione della pagina web ogni volta che vede il tag. È interessante notare che puoi utilizzare entrambe queste tecniche insieme o puoi fare ciò che abbiamo fatto, che è in esecuzione in modalità HTML5 con il meta tag. Ciò significa che i tuoi URL saranno sfuggiti come segue:

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

È interessante notare che il bot non metterà nulla alla fine del frammento. Ma a seconda di quale server web si sta eseguendo, è ansible mapparlo facilmente con un modello che corrisponde al testo “_escaped_fragment_” alla pagina bot alternativa. Per maggiori informazioni sul frammento sfuggito vai qui .

“Visualizza come Googlebot” restituisce due diverse versioni della mia pagina, la fonte con {{}} e la pagina visualizzata che sembra corretta. Cosa significa?

Google Bot può effettivamente interpretare JavaScript in misura limitata dall’inizio del 2014. Per ulteriori informazioni, leggi l’articolo del blog ufficiale su google webmaster qui . Tuttavia, come è chiarito nel post di blog, questo viene fornito con molti avvertimenti. Per esempio:

  1. Googlebot non garantisce l’esecuzione di tutti i codici javascript.
  2. Googlebot tenterà di trovare i collegamenti in javascript per seguirli e utilizzarli per trovare più pagine.
  3. Googlebot renderà l’anteprima negli strumenti dei webmaster eseguendo il maggior numero ansible di javascript (quindi la mancanza di {{}} nella versione renderizzata).
  4. Googlebot non utilizzerà necessariamente la versione renderizzata per creare le meta informazioni sul tuo sito per il suo indice.

A partire dal 18/12/2014 , non siamo ancora sicuri se Googlebot sia in grado di estrarre qualsiasi informazione da una SPA in modalità renderizzata per il suo indice oltre a trovare i link da seguire nel javascript. Nella nostra esperienza, Googlebot includerà {{}} nel suo elenco di indici in modo che quando cerchi di utilizzare {{}} per riempire le meta informazioni (descrizione, parole chiave, titolo, ecc.) Il tuo sito appare così nella Ricerca Google i risultati:

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

piuttosto di quello che ti aspetti potrebbe apparire come questo:

Dominio
http://my.domain.com/base/some/path/on/website
Questa è una pagina a caso sul mio dominio. Una pagina di esempio eccellente per essere sicuro!

GoogleBot per Search Engine utilizza _escaped_fragment_ ma non possiamo essere sicuri per altri servizi

Google consiglia di pubblicare un’istantanea HTML del sito Web AJAX utilizzando hashbang (#!) E _escaped_fragment_ param.

Ma come spesso per la nuova funzionalità di Google, tutti i servizi Google non la supportano dall’accattonaggio.

Per ora, per esperienza, siamo sicuri che GoogleBot per l’indicizzazione della pagina Web utilizza l’istantanea HTML e _escaped_fragment_. Puoi controllare i tuoi registri di accesso al server per assicurarti che Google l’abbia fatto sulla tua applicazione.

(Per ora e per esperienza, niente di ufficiale da Google) altri servizi come PageSpeed ​​Insight, parser di Strumenti per i Webmaster, strumenti di test di Richsnippet, ecc .: hasbang (#!) Non è supportato. Devi usare _escaped_fragment_.

Dovresti utilizzare il rilevamento di User Agent per pubblicare uno snapshot HTML?

No. Non farlo. Per vari motivi :

  1. Semplicemente non sai quali servizi / bot sul Web vorremmo analizzare i tuoi contenuti e non puoi essere esaustivo (per esempio, pensa a tutti i social network esistenti sul web usando Bot per creare uno snippet dei tuoi contenuti: puoi non gestirli uno per uno)
  2. Questo può essere considerato come cloacking: serve una versione diversa a seconda del tipo di utente sullo stesso URL, che è fondamentalmente sbagliato per SEO.

Google cerca #! nel nostro sito urls e poi prende tutto dopo il #! e lo aggiunge nel parametro query _escaped_fragment_ . Alcuni sviluppatori creano pagine html di base con dati reali e servono queste pagine dal lato server al momento della scansione. Quindi, perché non eseguiamo il rendering delle stesse pagine con PhantomJS sul lato di servizio che ha _escaped_fragment_ . Per maggiori dettagli leggi questo blog .

Forse un po ‘obsoleto, ma per la completezza:

Secondo la dichiarazione del 23 maggio 2014, Google Bot è ora in grado di “vedere i tuoi contenuti più come i moderni browser Web”.

Secondo la loro dichiarazione del 14 ottobre 2015, Google ha deprecato lo schema di scansione AJAX.

Pertanto, l’utilizzo dell’API della cronologia HTML5 (html5mode in angular) non dovrebbe costituire un problema per Google.