Utilizzare PushState e Precomposizione
L'attuale (2015) modo per farlo è usare il metodo pushState JavaScript.
PushState modifica l'URL nella barra del browser in alto senza ricaricare la pagina. Supponi di avere una pagina contenente schede. Le schede nascondono e mostrano il contenuto e il contenuto viene inserito in modo dinamico, utilizzando AJAX o semplicemente impostando display: none e display: block per nascondere e mostrare il contenuto corretto della scheda.
Quando si fa clic sulle schede, utilizzare pushState per aggiornare l'URL nella barra degli indirizzi. Quando viene visualizzata la pagina, utilizzare il valore nella barra degli indirizzi per determinare quale scheda mostrare. Il routing angolare lo farà automaticamente per te.
precomposizione
Esistono due modi per accedere a un'app PushState Single Page (SPA)
- Tramite PushState, in cui l'utente fa clic su un collegamento PushState e il contenuto viene inserito in AJAX.
- Colpendo direttamente l'URL.
L'hit iniziale sul sito comporta la possibilità di colpire direttamente l'URL. I successi successivi saranno semplicemente AJAX nei contenuti mentre PushState aggiorna l'URL.
I crawler raccolgono i collegamenti da una pagina, quindi li aggiungono a una coda per l'elaborazione successiva. Ciò significa che per un crawler, ogni hit sul server è un hit diretto, non navigano tramite Pushstate.
La precomposizione raggruppa il payload iniziale nella prima risposta dal server, possibilmente come oggetto JSON. Ciò consente al motore di ricerca di eseguire il rendering della pagina senza eseguire la chiamata AJAX.
Esistono alcune prove che suggeriscono che Google potrebbe non eseguire le richieste AJAX. Maggiori informazioni qui:
https://web.archive.org/web/20160318211223/http://www.analog-ni.co/precomposing-a-spa-may-become-the-holy-grail-to-seo
I motori di ricerca possono leggere ed eseguire JavaScript
Google è in grado di analizzare JavaScript da qualche tempo, è per questo che ha originariamente sviluppato Chrome, per fungere da browser senza testa completo per lo spider di Google. Se un collegamento ha un attributo href valido, il nuovo URL può essere indicizzato. Non c'è altro da fare.
Se, inoltre, facendo clic su un collegamento viene attivata una chiamata pushState, l'utente può navigare nel sito tramite PushState.
Supporto per i motori di ricerca per URL PushState
PushState è attualmente supportato da Google e Bing.
Google
Ecco Matt Cutts che risponde alla domanda di Paul Irish su PushState per SEO:
http://youtu.be/yiAF9VdvRPw
Ecco Google che annuncia il pieno supporto JavaScript per lo spider:
http://googlewebmastercentral.blogspot.de/2014/05/understanding-web-pages-better.html
Il risultato è che Google supporta PushState e indicizzerà gli URL PushState.
Guarda anche gli strumenti per i webmaster di Google come Googlebot. Vedrai che il tuo JavaScript (incluso Angular) viene eseguito.
Bing
Ecco l'annuncio di supporto di Bing per gli URL PushState belli datati marzo 2013:
http://blogs.bing.com/webmaster/2013/03/21/search-engine-optimization-best-practices-for-ajax-urls/
Non usare HashBangs #!
Gli URL di Hashbang erano un brutto stopgap che richiedeva allo sviluppatore di fornire una versione pre-renderizzata del sito in una posizione speciale. Funzionano ancora, ma non è necessario usarli.
Gli URL di Hashbang si presentano così:
domain.com/#!path/to/resource
Questo sarebbe abbinato a un metatag come questo:
<meta name="fragment" content="!">
Google non li indicizzerà in questo modulo, ma estrarrà invece una versione statica del sito dall'URL _escaped_fragments_ e indicizzerà quello.
Gli URL pushstate sembrano qualsiasi URL normale:
domain.com/path/to/resource
La differenza è che Angular li gestisce per te intercettando la modifica in document.location trattandola in JavaScript.
Se vuoi usare gli URL PushState (e probabilmente lo fai) elimina tutti i vecchi URL e metatag stile hash e abilita semplicemente la modalità HTML5 nel tuo blocco di configurazione.
Test del tuo sito
Gli strumenti per i Webmaster di Google ora contengono uno strumento che ti consentirà di recuperare un URL come Google e di visualizzare JavaScript con il rendering di Google.
https://www.google.com/webmasters/tools/googlebot-fetch
Generazione di URL PushState in angolare
Per generare URL reali in angolari, anziché # prefissati, imposta la modalità HTML5 sull'oggetto $ locationProvider.
$locationProvider.html5Mode(true);
Lato server
Poiché stai utilizzando URL reali, dovrai assicurarti che lo stesso modello (oltre ad alcuni contenuti precomposti) venga spedito dal tuo server per tutti gli URL validi. Il modo in cui lo fai varierà a seconda dell'architettura del tuo server.
Mappa del sito
La tua app può utilizzare forme di navigazione insolite, ad esempio hover o scroll. Per essere sicuro che Google sia in grado di guidare la tua app, probabilmente suggerirei di creare una sitemap, un semplice elenco di tutti gli URL a cui risponde la tua app. Puoi posizionarlo nella posizione predefinita (/ sitemap o /sitemap.xml) o parlarne a Google utilizzando gli strumenti per i webmaster.
È una buona idea avere comunque una sitemap.
Supporto per il browser
Pushstate funziona in IE10. Nei browser meno recenti, Angular tornerà automaticamente agli URL in stile hash
Una pagina dimostrativa
Il seguente contenuto viene reso utilizzando un URL pushstate con precomposizione:
http://html5.gingerhost.com/london
Come si può verificare, a questo link , il contenuto è indicizzato e appare in Google.
Per i codici di stato dell'intestazione 404 e 301
Poiché il motore di ricerca colpirà sempre il tuo server per ogni richiesta, puoi pubblicare i codici di stato dell'intestazione dal tuo server e aspettarti che Google li veda.