Come bloccare i crawler AI sul server
Ultimo aggiornamento:
Le aziende di intelligenza artificiale scansionano il web per addestrare i modelli, per far funzionare la ricerca AI e per aprire le pagine quando un utente chiede di loro. Su un server piccolo può essere un problema già il carico, e molti titolari di siti non vogliono che i loro contenuti finiscano nell'addestramento.
Gli strumenti sono quattro e funzionano meglio insieme: robots.txt per i crawler che lo rispettano, regole sullo user agent nel web server per quelli che si presentano, DNS inverso o liste di IP pubblicate per distinguere un crawler vero da uno falso, e rate limit per tutto il resto. I comandi sono per nginx e Apache su Debian, Ubuntu e famiglia RHEL.
Sapere con quali crawler hai a che fare
I principali, a ottobre 2026, dalla documentazione di ciascun operatore. Alcuni sono crawler; altri sono solo token di robots.txt che decidono come vengono usati i dati di un altro crawler.
| Nome | Operatore | Cosa fa |
|---|---|---|
GPTBot | OpenAI | Raccoglie contenuti che possono servire ad addestrare i modelli di OpenAI. Lista di IP pubblicata. |
OAI-SearchBot, ChatGPT-User | OpenAI | La ricerca di ChatGPT, e le pagine aperte quando un utente lo chiede. Secondo OpenAI robots.txt può non valere per ChatGPT-User. |
ClaudeBot, Claude-SearchBot, Claude-User | Anthropic | Addestramento, ricerca e pagine aperte per un utente. Anthropic dice che rispettano robots.txt. Lista di IP pubblicata. |
Google-Extended | Solo un token di robots.txt, senza uno user agent proprio: decide l'uso per l'addestramento e il grounding di Gemini. Non influisce sulla Ricerca Google. | |
Applebot-Extended | Apple | Solo un token di robots.txt: decide se quello che Applebot raccoglie può servire ad addestrare i modelli di Apple. |
CCBot | Common Crawl | Costruisce il dataset Common Crawl, molto usato per addestrare modelli. Verificabile con il DNS inverso. |
meta-externalagent | Meta | Scansiona per usi come l'addestramento di modelli AI. |
PerplexityBot, Perplexity-User | Perplexity | La ricerca di Perplexity, e le pagine aperte per un utente. Secondo Perplexity Perplexity-User in genere ignora robots.txt. |
Decidi in base allo scopo. Bloccare i crawler di addestramento tiene i tuoi contenuti fuori dai futuri dataset; bloccare la ricerca AI e chi apre pagine per gli utenti tiene il sito fuori anche da quelle risposte, e dalle visite che portano. Per vedere quali arrivano sul tuo server, conta gli user agent nel log degli accessi:
sudo awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20Chiedere di stare alla larga con robots.txt
Metti un robots.txt nella radice di ogni host da coprire (ogni sottodominio ha il suo). Più righe User-agent possono condividere la stessa regola:
User-agent: GPTBot
User-agent: ClaudeBot
User-agent: CCBot
User-agent: Google-Extended
User-agent: Applebot-Extended
User-agent: meta-externalagent
Disallow: /Questa lista blocca l'addestramento e lascia stare la ricerca. Aggiungi OAI-SearchBot, Claude-SearchBot e PerplexityBot per restare fuori anche dalla ricerca AI. Tieni sotto le regole che hai già per gli altri crawler, e non scrivere mai User-agent: * con Disallow: / se non vuoi uscire anche da Google e Bing.
Cosa robots.txt non può fare
- È una richiesta. I crawler che la rispettano si fermano; gli altri no, e niente ti dice quali sono.
- Chi apre pagine su richiesta di un utente può non applicarlo, per ammissione degli stessi operatori.
- Le modifiche richiedono tempo: gli operatori tengono il file in cache, spesso fino a un giorno.
- Uno scraper che nasconde il suo nome o si spaccia per un browser non è coperto affatto.
Bloccare per user agent in nginx o Apache
Il web server può rifiutare i crawler che si presentano. Così si fermano anche se ignorano robots.txt, finché tengono il loro nome.
nginx
La map va nel contesto http: i file in /etc/nginx/conf.d/ sono inclusi lì dai pacchetti di Debian, Ubuntu e famiglia RHEL.
sudo tee /etc/nginx/conf.d/ai-crawlers.conf > /dev/null <<'EOF'
map $http_user_agent $ai_crawler {
default 0;
~*(GPTBot|ClaudeBot|CCBot|meta-externalagent|PerplexityBot) 1;
}
EOFPoi aggiungi questo in ogni blocco server che deve rifiutarli, in /etc/nginx/sites-available/ su Debian e Ubuntu o in /etc/nginx/conf.d/ sulla famiglia RHEL:
if ($ai_crawler) {
return 403;
}Prova la configurazione, ricarica e verifica: il primo curl deve stampare 403, il secondo 200 (sostituisci example.com con il tuo sito).
sudo nginx -t && sudo systemctl reload nginx
curl -s -o /dev/null -w "%{http_code}\n" -A "GPTBot/1.2" https://example.com/
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/Attenzione: Tieni gli schemi esatti. Uno schema come bot o Google blocca anche Googlebot e Bingbot, e il sito esce dai motori di ricerca. Google-Extended e Applebot-Extended non sono user agent: vanno solo in robots.txt.
Apache
Con mod_rewrite, dentro ogni <VirtualHost> (sia quello sulla porta 80 sia quello sulla 443) o nel .htaccess del sito. Le regole di rewrite nella configurazione principale non valgono per i virtual host.
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (GPTBot|ClaudeBot|CCBot|meta-externalagent|PerplexityBot) [NC]
RewriteRule ^ - [F]sudo a2enmod rewrite
sudo apachectl configtest && sudo systemctl reload apache2sudo apachectl configtest && sudo systemctl reload httpdNota: In .htaccess le regole richiedono AllowOverride FileInfo (o All) per quella directory. Sugli hosting condivisi di solito è già così.
Verificare i bot veri con il DNS inverso
Chiunque può mandare User-Agent: Googlebot. Gli scraper lo fanno per superare le regole che lasciano passare i motori di ricerca. Un crawler vero si conferma con il DNS inverso confermato: l'indirizzo risolve in un nome nel dominio dell'operatore, e quel nome risolve di nuovo nello stesso indirizzo.
sudo apt install -y bind9-hostsudo dnf install -y bind-utilsip=66.249.66.1
name=$(host "$ip" | awk '/pointer/ {print $NF; exit}' | sed 's/\.$//')
echo "$name"
host "$name" | awk '{print $NF}' | grep -qxF "$ip" && echo "confirmed" || echo "NOT confirmed"- Googlebot:
googlebot.comogoogle.com. Bingbot:search.msn.com. Applebot:applebot.apple.com. CCBot:crawl.commoncrawl.org. - Un nome in un altro dominio, o che non risolve di nuovo nell'indirizzo, è un falso.
OpenAI, Anthropic, Perplexity e Common Crawl pubblicano invece gli intervalli di indirizzi dei loro crawler in JSON (i link sono nella documentazione di ciascuno). Questo controlla un indirizzo su una di queste liste:
python3 - 20.171.207.10 https://openai.com/gptbot.json <<'EOF'
import ipaddress, json, sys, urllib.request
ip = ipaddress.ip_address(sys.argv[1])
req = urllib.request.Request(sys.argv[2], headers={"User-Agent": "Mozilla/5.0"})
prefixes = json.load(urllib.request.urlopen(req))["prefixes"]
nets = [ipaddress.ip_network(p.get("ipv4Prefix") or p.get("ipv6Prefix")) for p in prefixes]
print("in the list" if any(ip in n for n in nets) else "NOT in the list")
EOFLe stesse liste JSON si possono caricare in un blocco geo di nginx o nel firewall, se vuoi lasciar passare solo i crawler veri che usano un certo nome.
Limitare la frequenza dei crawler
Un rate limit funziona qualunque nome si dia un crawler, e protegge il server da quelli che scansionano troppo in fretta. In nginx questo limita a 30 richieste al minuto, con un breve picco, ogni indirizzo il cui user agent sembra un bot; gli altri visitatori non vengono contati, perché una chiave vuota non è limitata.
sudo tee /etc/nginx/conf.d/bot-limit.conf > /dev/null <<'EOF'
map $http_user_agent $bot_key {
default "";
~*(bot|crawler|spider|scraper) $binary_remote_addr;
}
limit_req_zone $bot_key zone=bots:10m rate=30r/m;
limit_req_status 429;
EOFPoi, nei blocchi server o location delle pagine dinamiche, e ricarica come sopra:
limit_req zone=bots burst=10 nodelay;Attenzione: Dietro una CDN o un proxy ogni richiesta arriva dall'indirizzo del proxy: imposta prima set_real_ip_from e real_ip_header, altrimenti il limite vale per tutti i visitatori insieme. I motori di ricerca rallentano quando ricevono 429, quindi tieni un limite largo.
Apache non ha un limite di richieste per indirizzo suo (mod_ratelimit limita la banda). Le opzioni abituali sono mod_evasive, una jail di fail2ban sul log degli accessi, oppure nginx o una CDN davanti.
Quando un crawler ignora tutto
Se un crawler ignora robots.txt e cambia user agent, blocca sul firewall gli indirizzi che usa (sostituisci l'intervallo d'esempio):
sudo ufw insert 1 deny from 198.51.100.0/24sudo firewall-cmd --permanent --zone=drop --add-source=198.51.100.0/24
sudo firewall-cmd --reloadCome InfraFence gestisce i crawler AI
La gestione dei bot di InfraFence legge i log degli accessi del web server e riconosce circa 1.500 bot da liste pubbliche aggiornate ogni giorno. I crawler AI sono una categoria a sé.
- Per ogni categoria, o per un singolo bot, scegli tu: consenti, solo registra o blocca. Le modifiche arrivano ai server in pochi secondi.
- Ogni bot ha una spiegazione in parole semplici: chi lo gestisce, a cosa serve (addestramento, ricerca, assistente, agente) e se dichiara di rispettare robots.txt.
- Quando un bot impostato su blocca compare nel log, il suo indirizzo viene bannato sul firewall. Il ban parte dal log, quindi la richiesta che l'ha rivelato ha già avuto risposta.
- I bot che si dichiarano un motore di ricerca o un altro crawler noto, come Googlebot, Bingbot o Applebot, vengono verificati con il DNS inverso confermato, e i falsi vengono segnalati come contraffatti.
- Le richieste che sembrano di un bot ma non corrispondono a nessuno noto vengono segnalate come bot sconosciuti.
I crawler AI sono riconosciuti dallo user agent. Uno scraper che nasconde il suo nome resta al web firewall, che dà un punteggio a ogni visitatore in base a quello che fa. InfraFence non modifica il tuo robots.txt: i passi qui sopra restano utili accanto.
Domande
- Bloccare i crawler AI danneggia il posizionamento su Google?
- Non se blocchi i nomi giusti. Secondo Google,
Google-Extendedin robots.txt non influisce sulla Ricerca. BloccareGooglebot, o uno schema che lo comprende, sì. - Basta robots.txt?
- Per i crawler che lo rispettano, sì. Non fa niente contro quelli che lo ignorano o nascondono il nome, ed è per questo che esistono le regole sullo user agent e i rate limit.
- Devo bloccare anche i crawler della ricerca AI?
- Dipende se vuoi comparire nelle risposte AI. Bloccarli tiene i tuoi contenuti fuori da quelle risposte e fa perdere le visite che portano. Molti siti bloccano i crawler di addestramento e lasciano passare la ricerca.
Provalo gratis su 1 server
Starter è gratuito per un server, con protezione completa e blocco automatico. Senza carta di credito.
Installa l'agent come root, con il tuo token al posto di <TOKEN>:
curl -fsSL https://github.com/infrafence/infrafence-agent/releases/latest/download/install.sh | sudo bash -s -- --token <TOKEN>Il token si crea nella dashboard, in Server › Aggiungi server.
