AJAX: Domande frequenti

Questa sezione Domande frequenti risponde alle domande più comuni sulla scansione AJAX.
Quando devo utilizzare _escaped_fragment_ e quando #! nei miei URL AJAX?

Devi utilizzare la sintassi #! in tutti gli URL del tuo sito che hanno adottato lo schema di scansione AJAX. Googlebot non seguirà i link ipertestuali nel formato _escaped_fragment_.

Dove posso trovare questo schema applicato?

Guarda l'applicazione AJAX di esempio disponibile all'indirizzo http://gwt.google.com/samples/Showcase/Showcase.html. Se fai clic sui link a sinistra potrai notare che l'URL contiene un frammento hash #! e che l'applicazione passa allo stato corrispondente al frammento hash. Se sostituisci #! (ad esempio http://gwt.google.com/samples/Showcase/Showcase.html#!CwRadioButton) con ?_escaped_fragment_= (ad esempio, http://gwt.google.com/samples/Showcase/Showcase.html?_escaped_fragment_=CwRadioButton), il sito restituirà un'istantanea HTML.

Che cosa succede se decido di non implementare #! nel mio sito AJAX?

In questo momento le tue pagine potrebbero non essere visualizzate correttamente nelle pagine dei risultati di ricerca di Google. Tuttavia, stiamo lavorando per far funzionare Googlebot sempre più come un browser. Quando vengono implementate le funzioni richieste dal tuo sito, Googlebot può iniziare a indicizzare correttamente le tue pagine senza aiuto. Tuttavia, questo schema di scansione AJAX offre una soluzione per i siti che utilizzano già AJAX e che richiedono una corretta indicizzazione dei propri contenuti. Ci aspettiamo che sia una valida soluzione per tutti coloro che hanno già istantanee HTML delle loro pagine o che decidono di utilizzare un browser headless per recuperarle.

Con quale frequenza devo aggiornare i miei contenuti?

La risposta a questa domanda dipende completamente dalla frequenza con cui cambiano i contenuti della tua applicazione. Se cambiano spesso, devi creare sempre una nuova istantanea HTML in risposta a una richiesta del crawler. D'altro canto, considera l'archivio di una biblioteca il cui inventario non cambia regolarmente. Per evitare che il server debba generare continuamente le stesse istantanee HTML, potresti creare tutte le istantanee HTML pertinenti una volta sola, possibilmente offline, quindi salvarle per farvi riferimento in futuro. Potresti rispondere a Googlebot anche con un codice di stato HTTP 304 (Non modificato).

Che cosa succede se la mia applicazione non utilizza frammenti hash?

Forse dovrebbe! Utilizzando i frammenti hash puoi velocizzare notevolmente la tua applicazione, poiché tali frammenti vengono gestiti dal browser sul lato client e non comportano l'aggiornamento dell'intera pagina. Tali frammenti consentono inoltre di far funzionare la cronologia nella tua applicazione (il "pulsante Indietro del browser"). I frammenti hash sono supportati da diversi framework AJAX. Ad esempio, scopri Really Simple History, il plug-in per la cronologia di jQuery, il meccanismo per la cronologia di Google Web Toolkit o il supporto della gestione della cronologia di ASP.NET AJAX.

Tuttavia, nel caso in cui non sia possibile strutturare l'applicazione in modo che utilizzi frammenti hash, puoi procedere usando un token speciale nei frammenti hash (cioè tutto ciò che si trova dopo il simbolo # in un URL). I frammenti hash che rappresentano stati di pagina univoci devono iniziare con un punto esclamativo. Ad esempio, se la tua applicazione AJAX contiene un URL come questo:

www.example.com/ajax.html#miostato

ora dovrebbe diventare come questo:

www.example.com/ajax.html#!miostato

Quando il tuo sito adotta lo schema, viene considerato "disponibile per la scansione AJAX". Ciò significa che il crawler vedrà i contenuti della tua applicazione se il tuo sito fornisce le istantanee HTML.

Questo approccio causerà una proliferazione degli URL "brutti" con sintassi _escaped_fragment_?

La sintassi _escaped_fragment_ per gli URL viene utilizzata per gli URL temporanei che l'utente finale non dovrebbe mai vedere. In tutti i contesti visibili all'utente deve essere utilizzato l'URL bello (con #! anziché _escaped_fragment_): nella normale interazione con l'applicazione, nelle Sitemap, nei link ipertestuali, nei reindirizzamenti e in ogni altro caso in cui l'utente potrebbe vedere l'URL. Per lo stesso motivo, gli URL dei risultati di ricerca sono "belli", non "brutti".

Questo schema apre la porta al cloaking?

Il cloaking consiste nell'offerta agli utenti di contenuti diversi rispetto a quelli indicati ai motori di ricerca. Generalmente lo scopo del cloaking è migliorare il posizionamento di un elemento nei risultati di ricerca. Il cloaking è sempre stato (e sempre sarà) un grosso problema per i motori di ricerca ed è importante tenere presente che rendere le applicazioni AJAX disponibili per la scansione non è in alcun modo un invito a rendere più semplice il cloaking. Per questo motivo, l'istantanea HTML deve avere gli stessi contenuti visibili all'utente finale in un browser. In caso contrario, verrai ritenuto responsabile di cloaking. Per ulteriori informazioni, leggi questa risposta.

Posso utilizzare questo schema per semplificare la scansione dei miei file Flash o di altri file multimediali?

Google indicizza molti tipi di file multimediali ed è sempre impegnata a migliorare l'indicizzazione e la scansione. Tuttavia, Googlebot potrebbe non riuscire a vedere tutti i contenuti di un'applicazione Flash o di altre applicazioni multimediali (così come non può eseguire la scansione di tutti i contenuti dinamici del tuo sito), pertanto potrebbe essere utile utilizzare questo schema per fornire a Googlebot maggiori contenuti. Anche in questo caso, l'istantanea HTML deve avere gli stessi contenuti visibili all'utente finale in un browser. Google si riserva il diritto di escludere dal suo indice i siti in cui ritiene venga utilizzato il cloaking.

Che cosa succede se il mio sito ha alcuni URL con frammenti hash che non devono essere sottoposti a scansione?

Quando il sito adotta lo schema di scansione AJAX, il crawler di Google esegue la scansione di ogni URL con frammenti hash che incontra. Se hai alcuni URL con frammenti hash che non devono essere sottoposti a scansione, ti suggeriamo di aggiungere nel file robots.txt un'istruzione con espressione regolare. Ad esempio, puoi utilizzare nei frammenti hash una convenzione che indichi che non devono essere sottoposti a scansione, quindi escludere nel file robots.txt tutti gli URL che la soddisfano. Supponi che tutti i tuoi stati non indicizzabili siano nel formato #DONOTCRAWLmyfragment. Potresti impedire a Googlebot di eseguire la scansione di tali pagine aggiungendo quanto segue nel file robots.txt:

Disallow: /*_escaped_fragment_=DONOTCRAWL
Per quanto riguarda gli utilizzi esistenti di #! nei frammenti hash?

#! è un token non frequente nei frammenti hash esistenti, ma non è vietato dalla specifica degli URL. Che cosa succede se la tua applicazione utilizza #! ma non desidera adottare il nuovo schema di scansione AJAX? Un approccio che è possibile adottare consiste nell'aggiungere nel file robots.txt un'istruzione che lo comunichi al crawler.

Disallow: /*_escaped_fragment_

Questo significa che se l'applicazione contiene soltanto l'URL www.example.com/index.html#!miostato, tale URL non verrà sottoposto a scansione. Se l'applicazione contiene anche l'URL semplice www.example.com/ajax.html, questo URL verrà sottoposto a scansione.

Per quanto riguarda l'accessibilità?

Un effetto secondario della prassi attuale che consiste nel fornire contenuti statici ai motori di ricerca è che i webmaster hanno reso le loro applicazioni più accessibili a utenti con disabilità. Questo nuovo accordo porta l'accessibilità a un nuovo livello: senza interventi manuali, i webmaster possono utilizzare un browser headless per creare istantanee HTML che includono tutti i contenuti pertinenti e che possono essere utilizzate dalle applicazioni per la lettura dello schermo. Questo significa che ora è più semplice tenere aggiornati i contenuti statici perché occorre meno lavoro manuale. In altre parole, i webmaster sono più incentivati a rendere accessibili le loro applicazioni a utenti con disabilità.

Come devo utilizzare rel="canonical"?

Utilizza <link rel="canonical" href="http://example.com/ajax.html#!foo=123" /> (non utilizzare <link rel="canonical" href="http://example.com/ajax.html?_escaped_fragment_=foo=123" />).

Quale URL devo inserire nella mia Sitemap?

La Sitemap deve contenere la versione che preferisci venga visualizzata nei risultati di ricerca, che dovrebbe essere http://example.com/ajax.html#!foo=123.

In che modo gli URL con #! incidono sui feed dei prodotti?

È frequente che i siti desiderino gli stessi URL per Shopping e Ricerca Google. In genere, la versione #! dell'URL deve essere considerata la versione "canonica" da utilizzare in tutti i contesti. L'URL con _escaped_fragment_ viene considerato un URL temporaneo che gli utenti finali non dovrebbero mai vedere.

Utilizzo il browser headless HtmlUnit ma non funziona. Perché?

Se "non funziona" significa che HtmlUnit non restituisce l'istantanea prevista; la probabile causa del problema è che non hai lasciato tempo sufficiente per l'esecuzione di JavaScript e/o delle richieste XHR. Per risolvere il problema, prova una delle soluzioni che seguono, oppure tutte.

  • Utilizza NicelyResynchronizingAjaxController. HtmlUnit attenderà tutte le chiamate XHR in sospeso.
  • Aumenta il tempo di attesa per waitForBackgroundJavaScript e/o waitForBackgroundJavaScriptStartingBefore.
È molto probabile che questa soluzione risolva il problema. In caso contrario puoi anche consultare le Domande frequenti relative a HtmlUnit disponibili qui: http://htmlunit.sourceforge.net/faq.html. È disponibile anche un forum per gli utenti di HtmlUnit.

 

Hai trovato utile questo articolo?
Come possiamo migliorare l'articolo?