Come permettere o bloccare i bot IA nel robots.txt

Quasi tutti i siti decidono la cosa una volta, male, e non ci tornano più. O si blocca tutto in un attacco di panico per l'addestramento, portandosi via anche il traffico che porta clienti, oppure non si configura niente e vale quello che ogni crawler dà per scontato.

Ci sono tre posizioni sensate. Ecco il file di ciascuna e gli errori che le annullano.

Prima di tutto, la distinzione che decide ogni cosa

Le aziende di IA fanno girare due tipi di agente, e non sono intercambiabili.

I crawler raccolgono pagine in massa, con i loro tempi, di solito per addestrare o indicizzare: GPTBot, ClaudeBot, PerplexityBot, CCBot, Bytespider, Google-Extended, Applebot-Extended.

I recuperatori su richiesta vanno a prendere una pagina perché qualcuno ha appena fatto una domanda su quella pagina: ChatGPT-User, Claude-User, Perplexity-User. Con quella richiesta nessuno sta addestrando niente. C'è qualcuno che aspetta una risposta su di te.

Bloccare i primi è una decisione di business sui tuoi contenuti. Bloccare i secondi assomiglia di più a bloccare un visitatore che ha digitato il tuo indirizzo. Quasi tutti i consigli del tipo «blocca tutta l'IA» che leggerai non distinguono gli uni dagli altri.

Caso 1 — Farli entrare

L'impostazione giusta per qualsiasi cosa voglia essere trovata: documentazione, editori che vogliono essere citati, aziende che vogliono essere consigliate.

User-agent: *
Allow: /
Disallow: /admin/
Disallow: /carrello/
Disallow: /*?session=

Content-Signal: search=yes, ai-input=yes, ai-train=no

Sitemap: https://esempio.it/sitemap.xml

Guarda cosa dice: entra, indicizzami, usami per rispondere alle domande, non addestrarti su di me. Questa posizione il robots.txt da solo non sa esprimerla — da qui la sezione su Content-Signal più sotto.

Caso 2 — Risposte sì, addestramento no

Quella che vuole davvero la maggior parte delle aziende, e quella che quasi nessuno configura bene.

User-agent: GPTBot
Disallow: /

User-agent: ClaudeBot
Disallow: /

User-agent: CCBot
Disallow: /

User-agent: Bytespider
Disallow: /

User-agent: Google-Extended
Disallow: /

User-agent: Applebot-Extended
Disallow: /

User-agent: OAI-SearchBot
Allow: /

User-agent: Claude-SearchBot
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: ChatGPT-User
Allow: /

User-agent: Claude-User
Allow: /

User-agent: Perplexity-User
Allow: /

User-agent: *
Allow: /

Content-Signal: search=yes, ai-input=yes, ai-train=no

Sitemap: https://esempio.it/sitemap.xml

Due cose da sapere su quel file. Google-Extended governa l'addestramento di Gemini e non la ricerca di Google: bloccarlo non tocca il tuo posizionamento. E Applebot-Extended funziona allo stesso modo per Apple Intelligence, separatamente dall'Applebot che alimenta Siri e Spotlight.

Caso 3 — Bloccare del tutto l'IA

Ha senso per archivi a pagamento, materiale su licenza e tutto ciò di cui vendi l'accesso.

User-agent: GPTBot
User-agent: OAI-SearchBot
User-agent: ChatGPT-User
User-agent: ClaudeBot
User-agent: Claude-SearchBot
User-agent: Claude-User
User-agent: PerplexityBot
User-agent: Perplexity-User
User-agent: CCBot
User-agent: Bytespider
User-agent: Google-Extended
User-agent: Applebot-Extended
User-agent: Amazonbot
User-agent: meta-externalagent
Disallow: /

User-agent: *
Allow: /

Content-Signal: search=no, ai-input=no, ai-train=no

Sitemap: https://esempio.it/sitemap.xml

Le righe User-agent impilate condividono le regole che seguono. È valido e molto più semplice da mantenere di quattordici blocchi separati.

Mettiti in conto il prezzo prima di scegliere questa strada: sparisci dalle risposte dell'IA. Quando qualcuno chiede a un assistente del tuo settore, vengono fuori i nomi dei tuoi concorrenti e non il tuo.

Gli errori

Vale solo il gruppo più specifico. Un crawler che trova il proprio nome ignora del tutto User-agent: *. Quindi questo non fa quello che sembra:

User-agent: *
Disallow: /privato/

User-agent: GPTBot
Disallow: /

GPTBot è bloccato ovunque, ma ogni altro bot legge solo il gruppo * — e se domani metti un Allow sotto GPTBot, /privato/ smette di essere protetto da lui, perché quel gruppo non ha mai nominato /privato/.

Le righe vuote separano i gruppi. Una riga vuota in mezzo a un gruppo lo chiude. Quello che viene dopo non appartiene a nessuno fino al User-agent successivo.

Disallow: senza niente dietro vuol dire permettere tutto. Disallow: / blocca tutto. Un carattere fra una porta aperta e una chiusa.

Il robots.txt non è controllo degli accessi. È una richiesta che i crawler educati rispettano. Quelli che la ignorano continueranno a ignorarla. Se una cosa non deve essere letta, le serve autenticazione, non una direttiva.

Crawl-delay viene ignorato da quasi tutti i crawler IA. Se il problema è il carico, metti un limite di frequenza sul bordo.

Content-Signal: dire cosa, non solo se

Il robots.txt risponde a una domanda sola: puoi scaricare questo. Non ha modo di dire «indicizzami ma non addestrarti su di me», che è esattamente la posizione della maggior parte dei siti.

Content-Signal aggiunge quello strato con tre segnali indipendenti:

Content-Signal: search=yes, ai-input=yes, ai-train=no
  • search — se questo può comparire in un indice di ricerca
  • ai-input — se può essere usato come materiale per una risposta, con attribuzione
  • ai-train — se può essere usato per addestrare un modello

Va nel robots.txt come sopra e può anche viaggiare come intestazione HTTP su ogni risposta, che è quello che facciamo noi. È una convenzione giovane, non uno standard che qualcuno sia tenuto a rispettare — ma costa una riga, la legge una macchina ed esprime un'intenzione che un Disallow non può esprimere.

Verifica che il tuo arrivi

Scrivere il file non è la stessa cosa che servirlo:

curl -s https://esempio.it/robots.txt
curl -sI https://esempio.it/robots.txt | grep -i "server\|cf-cache-status"

Il secondo comando conta più di quanto sembri. Se stai dietro una CDN senza un robots.txt tuo, la CDN può rispondere al posto tuo con un file che non hai mai scritto: un 200 credibile, senza nessuna delle tue regole e senza la tua sitemap. Il nostro ha fatto esattamente così per mesi, mentre il nostro server di origine restituiva 404.

Genera il tuo robots.txt · Controlla quello che servi · I bot sono ammessi?