Crawler IA: visite di GPTBot e ClaudeBot misurate e blocco con robots.txt e nginx

Un crawler IA è un bot che le aziende di IA usano per raccogliere pagine web per l'addestramento dei modelli, la ricerca con IA e le risposte alle domande degli utenti. Per vedere quanto spesso questi bot visitano un server con Nginx + Apache, abbiamo confrontato gli UA di 14 giorni di log di accesso del server di origine con gli intervalli IP pubblicati da ogni azienda: le richieste dagli intervalli ufficiali sono state in tutto 18.605, e abbiamo riassunto le impostazioni per bloccarli o consentirli in robots.txt e in nginx secondo la documentazione ufficiale.
Il periodo va dal 4 al 17 ottobre 2026; le richieste a cui ha risposto la cache davanti, senza mai arrivare al server di origine, e quelle di cui non è stato registrato l'IP reale non sono incluse nei numeri.
1️⃣ Riconoscere i crawler IA: UA nel log di accesso e intervalli IP pubblicati
Non tutte le richieste registrate come GPTBot vengono da OpenAI. L'UA è un testo che chi fa la richiesta scrive e invia da sé, quindi chiunque può fare richieste con il nome GPTBot o ClaudeBot.
Per questo prima contiamo le richieste per nome del bot in base all'UA e poi le confrontiamo con gli intervalli IP pubblicati da ogni azienda. Qui sotto ci sono i nomi dei bot IA contati in un giorno di log.
grep -oiE '(GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|Claude-SearchBot|PerplexityBot|Perplexity-User|Bytespider|CCBot|Amazonbot|meta-externalagent)/' access.log-20261018 | sort | uniq -c | sort -rn 2968 GPTBot/
2084 ClaudeBot/
622 meta-externalagent/
535 Amazonbot/
167 PerplexityBot/
99 OAI-SearchBot/
30 ChatGPT-User/
21 Claude-User/
17 Claude-SearchBot/
12 Meta-ExternalAgent/
10 Perplexity-User/
7 CCBot/Contare con [/] dopo il nome esclude il testo che non è un nome, come l'indirizzo di contatto claudebot@ nell'UA di Claude-SearchBot, e i nomi registrati con maiuscole e minuscole diverse vengono contati a parte. Poi controlliamo dalla prima colonna da quali IP sono arrivate le richieste di GPTBot.
grep 'GPTBot/' access.log-20261018 | awk '{print $1}' | sort | uniq -c | sort -rn | head -5 2524 74.7.x.x
428 185.152.x.x
12 34.53.x.x
1 74.7.x.x
1 172.182.x.xPer le richieste passate da una CDN o da un proxy, la prima colonna registra l'indirizzo del server intermedio, quindi confronta quelle righe con l'indirizzo nella colonna X-Forwarded-For alla fine della riga di log. OpenAI pubblica gli intervalli IP di GPTBot come file JSON.
curl -s https://openai.com/gptbot.json -o gptbot.jsonSe un IP è nel file degli intervalli scaricato si può controllare con ipaddress, un modulo standard di Python.
# inrange.py — controlla se un IP è in un file di intervalli JSON
import json, sys, ipaddress
nets = [ipaddress.ip_network(p.get('ipv4Prefix') or p.get('ipv6Prefix')) for p in json.load(open(sys.argv[1]))['prefixes']]
for a in sys.argv[2:]:
ip = ipaddress.ip_address(a)
print(a, 'IN' if any(ip in n for n in nets) else 'OUT')Metti gli IP da controllare dopo il nome del file degli intervalli.
python3 inrange.py gptbot.json 74.7.x.x 34.53.x.x74.7.x.x IN
34.53.x.x OUTL'IP che ha inviato 2.524 richieste era dentro gli intervalli pubblicati, quello che ne ha inviate 12 era fuori. Anthropic, Perplexity, Apple, Common Crawl, Google e Bing pubblicano file di intervalli nello stesso formato, e per Amazonbot abbiamo controllato se il DNS inverso termina con crawl.amazonbot.amazon. È come il controllo passaporti in aeroporto, che verifica il passaporto e non il nome sulla carta d'imbarco.
Confrontando così 14 giorni, è risultato che 70 IP si alternavano su 23 nomi di bot, tra cui GPTBot, ClaudeBot e Googlebot, per inviare 48.041 richieste, il 57% delle quali verso URL che cercavano vulnerabilità come .php o .env. Anche tutte le 809 richieste con il nome Google-Extended venivano da questo gruppo; secondo la documentazione di Google, Google-Extended è un token solo per robots.txt, senza un UA usato nelle richieste HTTP.
2️⃣ Visite per UA: 14 giorni di misure e andamento settimanale
La tabella qui sotto mostra le richieste nei 14 giorni dal 4 al 17 ottobre. Per i bot con intervalli pubblicati abbiamo contato solo le richieste dall'interno degli intervalli; per i bot che non abbiamo confrontato con gli intervalli abbiamo contato per UA, escludendo il gruppo di imitatori.
| Bot | Azienda | Richieste (14 giorni) | Come è verificato | Gruppo di imitatori |
|---|---|---|---|---|
| ClaudeBot | Anthropic | 10,305 | Intervalli IP pubblicati | 2,387 |
| PerplexityBot | Perplexity | 3,406 | Intervalli IP pubblicati | 2,262 |
| GPTBot | OpenAI | 2,546 | Intervalli IP pubblicati | 2,328 |
| OAI-SearchBot | OpenAI | 1,399 | Intervalli IP pubblicati | 2,347 |
| ChatGPT-User | OpenAI | 334 | Intervalli IP pubblicati | 2,409 |
| Applebot | Apple | 330 | Intervalli IP pubblicati | 2,372 |
| CCBot | Common Crawl | 275 | Intervalli IP pubblicati | 2,275 |
| Claude-User | Anthropic | 10 | Intervalli IP pubblicati | 2,192 |
| Claude-SearchBot | Anthropic | 0 | Intervalli IP pubblicati | 2,297 |
| Perplexity-User | Perplexity | 0 | Intervalli IP pubblicati | 2,235 |
| Meta-ExternalAgent | Meta | 14,384 | UA | 2,339 |
| Bytespider | ByteDance | 6,569 | UA | 2,336 |
| Amazonbot | Amazon | 3,493 | UA · DNS inverso | 2,379 |
| Googlebot (per confronto) | 10,545 | Intervalli IP pubblicati | 3,951 | |
| bingbot (per confronto) | Microsoft | 13,477 | Intervalli IP pubblicati | 1,551 |
Tra i crawler IA verificati dagli intervalli pubblicati, ClaudeBot ha avuto più richieste, 10.305, seguito da PerplexityBot con 3.406 e GPTBot con 2.546. Claude-SearchBot e Perplexity-User hanno avuto zero richieste dagli intervalli pubblicati; tutte le richieste con quei nomi venivano dal gruppo di imitatori.
Anche dopo aver filtrato gli imitatori, restano un problema i bot non confrontati con gli intervalli. Meta-ExternalAgent ha avuto più richieste per UA, 14.384, ma la documentazione dei crawler di Meta che abbiamo consultato non ha un elenco di intervalli IP, quindi l'abbiamo contato solo per UA.
Settimana per settimana, GPTBot è oscillato tra 12 e 3.383 richieste, mentre ClaudeBot è rimasto tra 6.930 e 10.217 in tutte e cinque le settimane.
3️⃣ Quali URL prendono: tipi di URL e codici di risposta
I crawler IA non prendono solo il testo degli articoli. Nei 14 giorni il 21% delle richieste di Meta-ExternalAgent riguardava immagini, mentre GPTBot dagli intervalli pubblicati ha richiesto il feed RSS 476 volte e ClaudeBot la sitemap 314 volte.
Raccolgono anche gli URL delle versioni in altre lingue: dagli intervalli pubblicati, 1.111 richieste di ClaudeBot e 436 di GPTBot erano per articoli in altre lingue. I codici di risposta si possono contare direttamente da un giorno di log.
grep 'ClaudeBot/' access.log-20261018 | awk '{print $9}' | sort | uniq -c | sort -rn | head -4 1357 200
665 301
31 304
21 404Anche in un solo giorno quasi un terzo sono 301, e nei 14 giorni 5.915 (57%) delle 10.305 richieste di ClaudeBot dagli intervalli pubblicati erano 301. Di queste, 4.736 erano richieste senza la [/] finale, quindi WordPress ha risposto con un 301 verso l'URL con [/] e lo stesso articolo è stato richiesto un'altra volta.
4️⃣ Impostazioni di robots.txt: token per l'addestramento e per la ricerca
robots.txt è adatto ai bot di addestramento e di ricerca che raccolgono in automatico, ma non ai bot che prendono una pagina quando un utente fa una domanda. La documentazione di OpenAI e di Perplexity avverte che le regole di robots.txt potrebbero non valere per le richieste di ChatGPT-User e Perplexity-User.
Ogni azienda divide i token per scopo e, secondo la documentazione di OpenAI, bloccarne uno non influisce sulle impostazioni degli altri. Qui sotto ci sono i token confermati nella documentazione ufficiale di ciascuna azienda.
| Token di robots.txt | Azienda | Uso | Se lo blocchi (documentazione ufficiale) |
|---|---|---|---|
| GPTBot | OpenAI | Raccolta per l'addestramento | Segnale di non usarlo per l'addestramento |
| OAI-SearchBot | OpenAI | Ricerca di ChatGPT | Esclusa dalle risposte della ricerca di ChatGPT (può comparire ancora come link di navigazione) |
| ChatGPT-User | OpenAI | Richiesta dell'utente | Le regole di robots.txt potrebbero non valere |
| ClaudeBot | Anthropic | Raccolta per l'addestramento | Il materiale successivo è escluso dai dati di addestramento |
| Claude-SearchBot | Anthropic | Migliorare la qualità della ricerca | La visibilità nei risultati di ricerca può diminuire |
| Claude-User | Anthropic | Richiesta dell'utente | Non prende pagine per le domande degli utenti |
| PerplexityBot | Perplexity | Ricerca (non addestramento) | Escluso dai risultati di ricerca |
| Perplexity-User | Perplexity | Richiesta dell'utente | In genere non segue robots.txt |
| Google-Extended | Addestramento · grounding di Gemini | Nessun effetto su visibilità o ranking nella Ricerca Google | |
| Applebot-Extended | Apple | Addestramento dei modelli di base | Nessun effetto sulla visibilità nella ricerca di Apple |
| meta-externalagent | Meta | Addestramento di modelli IA ecc. | Bloccato con Disallow (esempio nella documentazione) |
Google-Extended e Applebot-Extended non sono bot di raccolta separati ma token usati solo in robots.txt. La raccolta la fanno i crawler già esistenti di Google e Apple, e questi token decidono solo se i contenuti raccolti possono essere usati per addestrare modelli IA.
Un robots.txt che rifiuta solo la raccolta per l'addestramento e mantiene la visibilità nella ricerca con IA è così; la documentazione di OpenAI, Perplexity e Meta dice che le modifiche possono richiedere fino a 24 ore per avere effetto.
# rifiuta la raccolta per l'addestramento
User-agent: GPTBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: Google-Extended
Disallow: /
User-agent: Applebot-Extended
Disallow: /
User-agent: meta-externalagent
Disallow: /
# consente i bot di ricerca IA
User-agent: OAI-SearchBot
Allow: /
User-agent: Claude-SearchBot
Allow: /
User-agent: PerplexityBot
Allow: /L'attuale robots.txt del server Nginx + Apache non ha righe che nominano bot IA.
curl -s https://example.com/robots.txt# vale per tutti i bot dei motori di ricerca
User-agent: *
# blocca le pagine di amministrazione (sicurezza)
Disallow: /wp-admin/
# consente le chiamate ajax tra le funzioni di amministrazione (necessarie per il funzionamento normale)
Allow: /wp-admin/admin-ajax.php
# aggiunto: blocca i risultati di ricerca spam (protezione SEO)
Disallow: /search/
Disallow: /?s=
# indica la sitemap (indicizzazione più rapida)
Sitemap: https://example.com/sitemap_index.xmlSenza righe per i bot IA, le 2.546 richieste di GPTBot dagli intervalli pubblicati nei 14 giorni non hanno ricevuto nessun 403: 2.090 hanno avuto risposta 200 e 432 risposta 301. Nello stesso periodo, le richieste di robots.txt dagli intervalli pubblicati nei log di origine sono state 36 di Googlebot, 8 di ClaudeBot e 6 di OAI-SearchBot, e nessuna di GPTBot o PerplexityBot. Anche le richieste di robots.txt a cui risponde la cache davanti non compaiono nei log di origine.
5️⃣ Bloccare i crawler IA in nginx e i suoi limiti
Anche se li blocchi in robots.txt, le richieste che non leggono le regole arrivano dritte al server. In nginx, [map] mette 1 in una variabile quando l'UA contiene il nome di un bot.
# dentro il blocco http — 1 se il nome di un bot di addestramento è nell'UA
map $http_user_agent $ai_train_bot {
default 0;
~*GPTBot/ 1;
~*ClaudeBot/ 1;
~*Bytespider 1;
~*CCBot/ 1;
}Nel blocco server restituisci 403 quando quella variabile vale 1.
# dentro il blocco server
location / {
if ($fake_searchbot) {
return 403;
}
if ($ai_train_bot) {
return 403;
}
# impostazioni esistenti qui sotto
}Il blocco per UA controlla solo il nome, quindi le richieste false vengono bloccate insieme al bot vero quando usano lo stesso nome e passano appena lo cambiano. Le richieste che prendono in prestito il nome di un bot di ricerca che consenti si possono filtrare solo confrontandole con gli intervalli IP pubblicati.
Per consentire OAI-SearchBot e respingere solo le richieste con lo stesso nome che arrivano da fuori dei suoi intervalli, trasforma gli intervalli pubblicati in una variabile con [geo] e confrontala insieme all'UA.
# dentro il blocco http — intervalli pubblicati di OAI-SearchBot (inserisci tutto searchbot.json; qui sotto solo due righe)
geo $oai_search_net {
default 0;
104.210.140.128/28 1;
135.234.64.0/24 1;
}
map $http_user_agent:$oai_search_net $fake_searchbot {
default 0;
~*OAI-SearchBot/.*:0$ 1;
}Se davanti c'è una CDN o un proxy, l'indirizzo che vede [geo] è quello del server intermedio, quindi ripristina l'IP reale con real_ip prima del confronto. La documentazione di Anthropic avverte che bloccare per indirizzo IP impedisce al bot anche di leggere robots.txt, quindi il segnale di rifiuto potrebbe non arrivare bene.
Non abbiamo messo questa configurazione sul server in produzione; abbiamo solo controllato la sintassi con un file di configurazione di prova.
nginx -t -p ./ -c nginx-test/nginx.confnginx: the configuration file ./nginx-test/nginx.conf syntax is ok
nginx: configuration file ./nginx-test/nginx.conf test is successfulPoiché dell'esempio è stata controllata solo la sintassi, non abbiamo verificato le risposte 403; nei 14 giorni di log, 2.347 delle 3.937 richieste con il nome OAI-SearchBot venivano dal gruppo di imitatori fuori dagli intervalli pubblicati.
6️⃣ Farsi pagare dai crawler IA: Pay per crawl e Web Bot Auth
Pay per crawl è una funzione di Cloudflare AI Crawl Control che permette ai proprietari dei siti di fissare un prezzo per zona e far pagare ogni richiesta di un crawler IA. Secondo la documentazione ufficiale consultata il 18 ottobre 2026 è in beta privata, e Cloudflare gestisce il pagamento come Merchant of Record.
I crawler che inviano l'intenzione di pagare in un'intestazione della richiesta ricevono una risposta 200, gli altri una risposta [402 Payment Required] con il prezzo. Se lo stesso crawler è bloccato con WAF o Bot Management, la regola di blocco ha la precedenza sull'addebito.
I crawler che vogliono pagare devono dimostrare chi sono con Web Bot Auth. Con Web Bot Auth il bot firma le richieste con una chiave Ed25519 e pubblica la chiave pubblica in [/.well-known/http-message-signatures-directory], così chi riceve può verificare la firma.
La firma viaggia in tre intestazioni, [Signature-Agent], [Signature-Input] e [Signature], e identifica il bot con una firma crittografica invece che con gli intervalli IP. Il formato predefinito del log di accesso del server di origine non registra le intestazioni delle richieste, quindi non abbiamo controllato se le richieste dei crawler IA nei 14 giorni avevano firme.
Le 18.605 richieste di crawler IA verificate dagli intervalli IP pubblicati nei 14 giorni equivalevano al 77% delle 24.022 richieste inviate da Googlebot e bingbot dai loro intervalli pubblicati nello stesso periodo. Se aggiungere token di addestramento a robots.txt si decide sui numeri senza imitatori, e aggiungere il confronto con gli intervalli a un conteggio settimanale dei log ti permette di seguire l'andamento.
🔢 FAQ & contenuti consigliati




ℹ️ Informativa sull'affiliazione
I contenuti di questo sito includono link di affiliazione. Se un visitatore acquista un prodotto o un servizio tramite uno di questi link, il sito riceve una commissione dal venditore. In questo processo l'importo pagato dall'acquirente (durante le promozioni l'importo scende↓) non aumenta. Prezzi, sconti e disponibilità indicati si riferiscono al momento della stesura e possono differire da quelli reali: prima di acquistare verifica sempre presso il venditore. I prodotti vengono scelti e valutati secondo criteri propri, e le commissioni non influiscono sull'ordine di presentazione né sul contenuto delle valutazioni.