Crawler AI e JavaScript: perché ChatGPT può vedere una pagina vuota
Risposta breve: Quando si parla di crawler AI e JavaScript, la regola è semplice: un bot che non esegue gli script vede solo l'HTML inviato dal tuo server. Se la tua pagina costruisce il testo solo nel browser, quell'HTML può essere un guscio vuoto. In una misurazione di Vercel e MERJ di dicembre 2024 nessuno dei principali crawler AI eseguiva JavaScript, mentre il crawler di Google e AppleBot sì. È un'istantanea del 2024, quindi verifica le tue pagine e fai in modo che il testo principale sia già nell'HTML: generato sul server oppure prodotto in anticipo.
Come arriva un crawler alla tua pagina?
Ogni accesso comincia allo stesso modo: una richiesta al tuo server, che risponde con HTML. Quello che succede dopo decide quanta parte della pagina arriva a destinazione.
Un browser carica gli script a cui l'HTML rimanda, li esegue e mostra il risultato. Un crawler può fermarsi al primo HTML. Oppure fa il rendering: esegue gli script, aspetta e solo dopo legge.
Se il server invia già il testo, i due percorsi portano allo stesso contenuto. Se la pagina viene assemblata nel browser, il primo HTML ne contiene ben poco. La documentazione di Google lo chiama modello «app shell». Un bot senza JavaScript riceve più o meno questo:
<body>
<div id="root"></div>
<script src="/app.js"></script>
</body>
Titolo, testo, elenco prodotti e link compaiono solo dopo l'esecuzione di /app.js. Non tutti i crawler lo eseguono, e il problema sta tutto qui.
Che cosa fa Google con JavaScript
Google è il caso facile. La sua documentazione sulle basi della SEO per JavaScript dice che:
- Google Search esegue JavaScript con una versione «evergreen» di Chromium, cioè mantenuta aggiornata.
- Una pagina attraversa tre fasi: scansione (crawling), rendering e indicizzazione.
- Una pagina con stato 200 viene messa in coda per il rendering, e può volerci qualche secondo o più. Per una pagina con stato diverso da 200, come un 404, il rendering può essere saltato.
- Title, meta description e canonical possono essere impostati con JavaScript.
La stessa pagina dà anche il motivo di questo articolo. Google scrive che il rendering lato server o il pre-rendering resta una buona idea, perché rende la pagina più veloce per utenti e crawler e perché non tutti i bot possono eseguire JavaScript. «Google indicizza la mia pagina» non significa quindi che ogni bot riesca a leggerla.
Crawler AI e JavaScript: che cosa è documentato
La misurazione più nota è di Vercel e MERJ, pubblicata a dicembre 2024 con il titolo The rise of the AI crawler. Il risultato: nessuno dei principali crawler AI eseguiva JavaScript. Lo studio cita tra questi GPTBot, OAI-SearchBot, ChatGPT-User e ClaudeBot. Googlebot (indicato nello studio per Gemini) e AppleBot invece eseguivano il rendering di JavaScript.
Accanto a questo risultato vanno due cautele. Primo, è un'istantanea del 2024 e non abbiamo misurazioni più recenti da citare. I crawler cambiano, quindi prendilo come un avvertimento e non come una legge. Secondo, dice che cosa legge un bot, non se una pagina venga citata in una risposta. Una citazione non può prometterla nessuno, con o senza JavaScript.
I bot hanno compiti diversi. Ecco come li descrivono i gestori:
| Gestore | Bot | Scopo secondo il gestore |
|---|---|---|
| OpenAI | GPTBot | Addestramento di modelli generativi di base |
| OpenAI | OAI-SearchBot | Ricerca in ChatGPT |
| OpenAI | ChatGPT-User | Richieste su iniziativa di un utente, per esempio una domanda in ChatGPT |
| Anthropic | ClaudeBot | Raccoglie contenuti web che possono contribuire all'addestramento |
| Anthropic | Claude-SearchBot | Migliora la qualità dei risultati di ricerca |
| Anthropic | Claude-User | Richieste quando un utente fa una domanda a Claude |
| Perplexity | PerplexityBot | Mostra e collega i siti nei risultati di ricerca di Perplexity |
Le fonti sono OpenAI, Anthropic e Perplexity. Perplexity ha inoltre un bot a parte per le richieste su iniziativa dell'utente. Se i bot che stanno dietro alle risposte di ricerca delle AI leggono solo HTML, una pagina con un guscio vuoto non offre loro nulla da citare. Quali di essi eseguano gli script è esattamente ciò che lo studio del 2024 ha misurato, e ciò che dovresti verificare sulle tue pagine.
Chi è coinvolto?
Sei coinvolto se il testo o i link delle tue pagine non esistono nell'HTML inviato dal tuo server:
- Pagine assemblate interamente nel browser. Il server risponde con un guscio e un pacchetto di script, e lo script scrive titolo, testo e navigazione.
- Contenuti caricati in seguito dagli script. Elenchi di prodotti, prezzi, recensioni, schede (tab) o sezioni «carica altro» che arrivano da una chiamata API dopo il caricamento della pagina.
- Link che esistono solo dopo l'esecuzione degli script. Un crawler senza JavaScript può seguire solo i link presenti nell'HTML. Ci inciampa anche la scansione del sito di SEOgrinder: segnala che i link che nascono solo nel browser non si possono seguire.
- Title, description, canonical e tag Open Graph impostati da uno script. Google lo accetta. Un bot che salta gli script non li vede mai.
Non sei coinvolto se il server invia già il testo. Extra interattivi come un menu, un grafico o un calcolatore possono comunque nascere nel browser. SEOgrinder segnala le pagine che esistono solo nel browser con il rilievo «La pagina viene costruita solo nel browser», perché molti crawler AI non eseguono JavaScript e lì vedono una pagina quasi vuota.
Tre test in un minuto
Per scoprirlo non serve nessuno strumento. Tutti e tre i test rispondono alla stessa domanda: il mio testo è nell'HTML che invia il server?
- Visualizza il sorgente della pagina. Apri la tua pagina e scegli «Visualizza sorgente pagina» (Ctrl+U, oppure Cmd+Option+U su Mac). Non usare «Ispeziona»: l'ispettore mostra la pagina dopo l'esecuzione degli script. Cerca nel sorgente una frase che leggi sulla pagina.
- Richiama la pagina con curl. Nel terminale esegui
curl -sL https://example.com/tua-pagina | grep -io "una breve frase della tua pagina", usando una breve frase tratta dalla tua pagina. Se la frase viene stampata, è nell'HTML, a meno che compaia solo dentro un elementoscript, che non conta. Se non viene stampato nulla, controlla prima l'ortografia e i caratteri speciali; altrimenti non è nell'HTML. - Disattiva JavaScript. Apri gli strumenti per sviluppatori, apri il menu dei comandi (Ctrl+Shift+P, oppure Cmd+Shift+P su Mac), digita «JavaScript», scegli la voce per disattivarlo (nell'interfaccia inglese: «Disable JavaScript») e ricarica la pagina. Se il contenuto principale sparisce, un bot senza JavaScript vede la stessa cosa.
Come leggere il risultato:
| Che cosa vedi | Che cosa significa |
|---|---|
| La frase è nel sorgente e nell'output di curl | Il testo è nell'HTML consegnato. Questa parte è a posto. |
| La frase manca nel sorgente, ma si vede nel browser | La pagina viene costruita nel browser. I bot che saltano gli script non vedono testo. |
Due limiti: curl mostra ciò che il tuo server invia a curl, non ciò che invia a un bot in particolare, per esempio quando un firewall tratta i bot in modo diverso. E per vedere che cosa ha renderizzato Google usa il controllo URL di Google Search Console.
Come correggere: portare i contenuti nell'HTML
L'obiettivo è che titoli, testo e link interni siano visibili nel sorgente. Le strade più comuni sono due:
- Rendering lato server (SSR). Il server costruisce l'HTML finito a ogni richiesta.
- Pre-rendering, detto anche generazione statica (SSG). Le pagine vengono generate in anticipo, per esempio durante la build, e il server consegna semplicemente i file.
Entrambe portano il contenuto nella prima risposta. Inoltre:
- Parti dalle pagine che contano. Raramente serve una riscrittura completa. Comincia dalle pagine che devono posizionarsi o essere citate.
- Metti l'essenziale nel primo HTML. Cioè title, meta description, canonical, tag Open Graph, il testo principale e i link di navigazione scritti come veri elementi
<a href>. - Dai a crawler e visitatori lo stesso contenuto. Google cita il «dynamic rendering», in cui i bot ricevono una versione precostruita, solo come ripiego. Mostrare ai crawler qualcosa di diverso da ciò che vedono i visitatori è cloaking.
- Verifica il risultato nel sorgente. Dopo la modifica ripeti i tre test.
Niente di tutto questo garantisce il ranking. Rimuove un ostacolo tecnico, nient'altro.
Come SEOgrinder riconosce le pagine costruite nel browser
SEOgrinder guarda l'HTML che il tuo server consegna, non quello che ne fa un browser. Inserisci un indirizzo, avvia l'analisi e le attività compaiono nella scheda Attività, ordinate per impatto. Tre rilievi riguardano questo tema:
- La pagina viene costruita solo nel browser. Il rilievo indica quante parole, titoli e link interni contiene l'HTML consegnato, e ricorda che Google renderizza queste pagine con ritardo e che molti crawler AI vedono una pagina quasi vuota.
- «N pagine vengono costruite solo nel browser». La scansione del sito indica quante delle pagine esaminate consegnano un guscio HTML quasi vuoto. Le pagine con noindex e quelle di accesso o registrazione non vengono contate.
- «N pagine di accesso o registrazione nascono nel browser». Di solito va bene, perché queste pagine funzionano per i visitatori anche senza rendering lato server. Se una deve posizionarsi, renderizzala sul server.
Dopo una correzione premi Ricontrolla: i report restano nella cache fino a 24 ore e questo pulsante forza una nuova esecuzione (alcune volte all'ora). Passa all’IA trasforma il report in un ordine di lavoro in Markdown per un agente di coding come Claude Code, Cursor o GitHub Copilot, con una condizione obiettivo verificabile per ogni rilievo.
Quello che SEOgrinder non fa: non misura se ChatGPT, Gemini o Perplexity citino davvero il tuo marchio. Controlla la base tecnica, cioè se il contenuto sia leggibile.
Errori frequenti
- Testare con «Ispeziona» invece che con «Visualizza sorgente pagina». L'ispettore mostra il risultato dopo l'esecuzione degli script, e proprio questo un bot senza JavaScript non lo riceve.
- Concludere «Google lo indicizza, quindi ogni bot lo legge». Google esegue JavaScript, e la sua stessa documentazione dice che non tutti i bot lo fanno.
- Impostare title e meta tag solo con uno script. Google lo permette, ma un bot che non esegue gli script non li vede mai. Mettili nel primo HTML.
- Link che sono solo gestori di clic. Usa veri link
<a href>, così un crawler può seguirli senza eseguire script. - Fare del dynamic rendering il piano definitivo. Google lo definisce un ripiego.
- Rispondere a ogni indirizzo sconosciuto con il guscio e stato 200. Le app renderizzate sul client lo fanno spesso, e tali pagine possono essere trattate come soft 404. Per questo ogni indirizzo inesistente dovrebbe rispondere con un vero 404.
- Consentire i bot nel robots.txt e respingerli al firewall. Il testo c'è, ma il bot riceve un errore. Per questo caso SEOgrinder ha un rilievo apposito: «Crawler IA consentiti ma respinti dal server — da verificare». Leggi anche robots.txt per crawler AI.
Domande frequenti
Google vede la mia pagina JavaScript?
Di solito sì, ma più tardi. Google esegue JavaScript con un Chromium evergreen e le pagine con stato 200 aspettano in coda per il rendering. L'indicizzazione non è mai garantita. Il controllo URL di Google Search Console mostra che cosa vede Googlebot.
Basta una sitemap?
No. Una sitemap dice ai crawler quali indirizzi esistono. Non mette testo nell'HTML di quelle pagine.
ChatGPT e Claude eseguono JavaScript?
Nella misurazione di Vercel e MERJ del 2024 i crawler di OpenAI e Anthropic citati non lo facevano. Non abbiamo una misurazione più recente da citare, quindi verifica le tue pagine invece di fidarti dell'una o dell'altra risposta.
Devo riscrivere tutto il sito?
Non necessariamente. Il rendering lato server o il pre-rendering per le pagine che devono posizionarsi o essere citate è di solito il primo passo. Le parti interattive possono restare nel browser.
Se faccio il rendering sul server, gli assistenti AI mi citeranno?
Nessuno può prometterlo. Così ti assicuri che il testo possa essere letto, ed è il presupposto di tutto il resto. Anche un llms.txt ben fatto non salva una pagina vuota senza JavaScript.
Il prossimo passo
Scegli una pagina importante e fai i tre test. Se il testo manca nel sorgente, avvia la scansione gratuita in SEOgrinder e apri la scheda Attività. Correggi per prime le pagine più importanti, renderizzandole sul server o generandole in anticipo, poi premi Ricontrolla.