• User Newbie •

    Ho letto robots.txt e la risposta al GPTBot su 40 siti italiani: i numeri e 2 cose che non quadrano

    Oggi ho fatto un controllo semplice su 40 siti italiani noti: testate, e-commerce, banche, telco, viaggi e retail. Niente pannelli e niente JavaScript: solo curl, il 10 novembre 2026.

    Per ciascuno ho scaricato /robots.txt con un user-agent da browser e ho guardato se questi crawler sono disallowed sulla root: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, PerplexityBot, Google-Extended, CCBot, Bytespider, Applebot-Extended. Poi ho chiamato l’homepage con l’user-agent documentato di GPTBot e ho provato anche /llms.txt. Timeout 10 secondi. Lo dico subito: le richieste partono da un IP da datacenter, non dagli intervalli ufficiali pubblicati da OpenAI e dagli altri. Quindi il robots.txt racconta la policy dichiarata; un 403 sull’homepage dice solo che quella richiesta è stata rifiutata, non che il crawler ufficiale sia per forza bloccato.

    Su 40 siti, 36 avevano un robots.txt davvero leggibile. Negli altri quattro il file non c’era in forma utilizzabile: in un caso al posto del robots.txt arrivava l’HTML del sito, in altri un 403 o una challenge già su /robots.txt. Su un sito retail la homepage rispondeva 200 e la /robots.txt no, bloccata dal WAF.

    Tra i 36 file validi, i blocchi sulla root stanno quasi tutti nelle testate di news. I numeri:

    • GPTBot (training OpenAI): 8 su 36, il 22%.
    • OAI-SearchBot (è questo che alimenta la ricerca e le citazioni in ChatGPT, non il training): 3 su 36, l’8%.
    • PerplexityBot (anche questo è un crawler di ricerca, non di solo training): 8 su 36, di nuovo il 22%.
    • Claude-SearchBot: 2 su 36. ClaudeBot, quello di training: 6 su 36.
    • Google-Extended: 7 su 36. CCBot: 9 su 36.

    Il punto pratico è la differenza tra i due tipi di bot. GPTBot, ClaudeBot, Google-Extended, CCBot servono soprattutto ad addestrare o arricchire i modelli. OAI-SearchBot, Claude-SearchBot, PerplexityBot e, in parte, ChatGPT-User servono a recuperare pagine da citare quando qualcuno fa una domanda. Se chiudi la porta ai secondi, non stai solo “uscendo dal training”: stai chiedendo a ChatGPT o a Perplexity di non usarti come fonte. Cinque siti del campione fanno la scelta coerente: bloccano GPTBot e lasciano passare OAI-SearchBot. Tre invece bloccano tutti e due, ricerca compresa. E c’è anche il caso inverso, in una testata: PerplexityBot è bloccato e GPTBot no. Se l’obiettivo era essere citati e non dare contenuto per l’addestramento, lì la regola è al contrario.

    La seconda cosa che non quadra è il WAF. Con l’user-agent di GPTBot l’homepage ha risposto 200 in 24 casi su 40, 403 in 12, una challenge 202 di un WAF AWS in un caso, e in due siti di viaggi la connessione è andata in timeout, mentre con un user-agent Chrome normale la stessa homepage rispondeva 200. Dei 12 status 403, solo tre avevano già un Disallow su GPTBot nel robots.txt. Negli altri il file diceva di lasciarlo passare, o non era leggibile, e il CDN lo fermava lo stesso. In un e-commerce c’è addirittura un Allow: / esplicito per GPTBot e un llms.txt fatto sul serio, ma l’homepage risponde 403 con challenge Cloudflare. Un llms.txt vero, tra l’altro, ce l’avevano solo 5 siti su 40, per lo più in ambito bancario o istituzionale. Non sostituisce il robots.txt e non serve a nulla se poi il WAF chiude la porta.

    Tre cose concrete che farei sul proprio sito, in quest’ordine:

    1. Nel robots.txt distinguere training e ricerca, invece di copiare un blocco unico su tutti gli user-agent. Esempio, se si vuole restare fuori dal training ma restare citabili:
    User-agent: GPTBot
    Disallow: /
    
    User-agent: OAI-SearchBot
    Allow: /
    
    User-agent: ChatGPT-User
    Allow: /
    
    User-agent: Claude-SearchBot
    Allow: /
    
    User-agent: PerplexityBot
    Allow: /
    

    Poi si verifica che la regola che vince sia davvero quella, perché un User-agent: * con Disallow: / più sopra o un gruppo scritto male possono coprire anche i bot che si volevano lasciare aperti.

    1. Sul WAF e sul CDN, allowlist degli intervalli IP pubblicati e verificati da OpenAI, Anthropic, Perplexity e compagnia, non del solo user-agent (quello si falsifica in un attimo). Vale la pena ritestare con quegli IP, non solo con curl dal proprio ufficio.

    2. Il contenuto che si vuole far citare deve essere nell’HTML iniziale, reso lato server. Se il testo dell’articolo arriva solo dopo un bundle JavaScript, un crawler che non esegue JS vede una pagina vuota anche con robots.txt aperto e WAF in ordine.

    Per ripetere il controllo su un URL vostro senza scrivere script, sul sito di QuanticData c'è un AI visibility audit gratuito (senza registrazione) che fa più o meno questi stessi test, robots.txt su 24 crawler, fetch come GPTBot e contenuto senza JS, e restituisce i fix da fare.

    Trasparenza: lavoro in QuanticData, per questo cito quel tool e non metto link. Se qualcuno ha già fatto un giro simile su un campione italiano più largo, o ha confrontato questi 403 con i log dei crawler ufficiali, mi interessa molto.