InfraFenceInfraFence

Live Security Operations

Inizia

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.

NomeOperatoreCosa fa
GPTBotOpenAIRaccoglie contenuti che possono servire ad addestrare i modelli di OpenAI. Lista di IP pubblicata.
OAI-SearchBot, ChatGPT-UserOpenAILa 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-UserAnthropicAddestramento, ricerca e pagine aperte per un utente. Anthropic dice che rispettano robots.txt. Lista di IP pubblicata.
Google-ExtendedGoogleSolo 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-ExtendedAppleSolo un token di robots.txt: decide se quello che Applebot raccoglie può servire ad addestrare i modelli di Apple.
CCBotCommon CrawlCostruisce il dataset Common Crawl, molto usato per addestrare modelli. Verificabile con il DNS inverso.
meta-externalagentMetaScansiona per usi come l'addestramento di modelli AI.
PerplexityBot, Perplexity-UserPerplexityLa 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:

nginx (formato di log combined)
sudo awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

Chiedere 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:

robots.txt
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.

Qualsiasi distribuzione
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;
}
EOF

Poi 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:

In ogni blocco server { }
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).

Qualsiasi distribuzione
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.

In ogni <VirtualHost> o .htaccess
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (GPTBot|ClaudeBot|CCBot|meta-externalagent|PerplexityBot) [NC]
RewriteRule ^ - [F]
Debian / Ubuntu
sudo a2enmod rewrite
sudo apachectl configtest && sudo systemctl reload apache2
RHEL, Rocky Linux, AlmaLinux, Oracle Linux, Fedora
sudo apachectl configtest && sudo systemctl reload httpd

Nota: 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.

Debian / Ubuntu
sudo apt install -y bind9-host
RHEL, Rocky Linux, AlmaLinux, Oracle Linux, Fedora
sudo dnf install -y bind-utils
Qualsiasi distribuzione
ip=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.com o google.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:

Qualsiasi distribuzione con Python 3
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")
EOF

Le 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.

Qualsiasi distribuzione
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;
EOF

Poi, nei blocchi server o location delle pagine dinamiche, e ricarica come sopra:

In un blocco server { } o location { }
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):

Debian / Ubuntu con ufw
sudo ufw insert 1 deny from 198.51.100.0/24
Famiglia RHEL con firewalld
sudo firewall-cmd --permanent --zone=drop --add-source=198.51.100.0/24
sudo firewall-cmd --reload

Come 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-Extended in robots.txt non influisce sulla Ricerca. Bloccare Googlebot, 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.