Content-Signal: cosa può fare l'IA con i tuoi contenuti
Il robots.txt risponde a una sola domanda e non ne ha mai affrontata un'altra: puoi scaricare questo. Sì o no, percorso per percorso, bot per bot. Non ha parole per la posizione che quasi tutti i siti hanno davvero, cioè «indicizzami, citami, mandami lettori, ma non addestrare un modello su quello che scrivo».
Così si tira l'unica leva disponibile. Si blocca tutto con un Disallow e insieme all'addestramento se ne va anche il traffico.
Permesso di scaricare non è permesso di usare
Sono due domande distinte e solo una riguarda la tua banda. Un crawler che legge la tua pagina dei prezzi e la cita quando qualcuno chiede cosa comprare ti sta facendo un favore. Gli stessi byte versati in un set di addestramento sono una transazione completamente diversa, e in quella tu non ci sei.
Bloccare tutto schiaccia le due cose in un unico «no». Per un archivio a pagamento può essere la scelta giusta. Per un'azienda che vuole essere trovata e consigliata è l'impostazione sbagliata: tu sparisci dalle risposte, i tuoi concorrenti no.
Content-Signal è lo strato che ti permette di separarle.
I tre segnali
Content-Signal: search=yes, ai-input=yes, ai-train=no
search: costruire un indice di ricerca e restituire risultati, cioè link ed estratti brevi. Non i riassunti generati dall'IA, che sono il segnale successivo.ai-input: passare la tua pagina a un modello nel momento in cui risponde. RAG, grounding, le fonti elencate sotto una risposta generata.ai-train: addestrare o mettere a punto un modello sui tuoi contenuti.
Sono indipendenti. Qualsiasi combinazione è valida, e diverse di esse sono posizioni ragionate, non sviste.
I valori sono yes e no. Non esiste maybe, non c'è sintassi per percorso, non c'è scadenza.
Omettere un segnale non equivale a no. Secondo la convenzione, un uso su cui non dici niente non è né concesso né vietato: semplicemente non hai risposto. Il nostro generatore scrive sempre tutti e tre, ed è l'abitudine giusta, perché il silenzio è l'unica risposta con cui nessuno può fare niente.
Dove si mette
In due posti, ed entrambi costano poco.
Nel robots.txt, dentro un gruppo user-agent:
User-agent: *
Allow: /
Content-Signal: search=yes, ai-input=yes, ai-train=no
Sitemap: https://esempio.com/sitemap.xml
E come intestazione HTTP di risposta:
Content-Signal: search=yes, ai-input=yes, ai-train=no
agentready.md serve entrambe. Quell'intestazione esatta esce su ogni risposta: ogni pagina, ogni versione .md, ogni chiamata all'API.
Per nginx:
add_header Content-Signal "search=yes, ai-input=yes, ai-train=no" always;
Per Apache:
<IfModule mod_headers.c>
Header set Content-Signal "search=yes, ai-input=yes, ai-train=no"
</IfModule>
L'intestazione si guadagna il posto. Il robots.txt si chiede alla radice, ogni tanto, e un agente che atterra su un URL profondo perché qualcuno ha incollato il link può non leggerlo mai. L'intestazione viaggia attaccata a ciò che viene portato via.
Esiste anche la forma con meta tag, <meta name="content-signal" content="search=yes, ai-input=yes, ai-train=no">. Usala quando la configurazione del server non è nelle tue mani. L'intestazione resta migliore, perché copre anche le risposte che non sono HTML.
Tre casi reali
Un editore che vuole l'attribuzione.
Content-Signal: search=yes, ai-input=yes, ai-train=no
Comparire dentro una risposta con un link è distribuzione, l'equivalente odierno dell'essere citati. L'addestramento è la parte che nessuno ti paga e che per giunta non ti rimanda nessuno.
Un SaaS che vuole essere consigliato.
Content-Signal: search=yes, ai-input=yes, ai-train=yes
Documentazione, prezzi, changelog. Quando qualcuno chiede a un assistente cosa usare per un lavoro, tu vuoi essere la risposta, e stare nei dati di addestramento è il modo di venire nominato anche quando il modello non scarica niente. Qui non c'è nulla da proteggere. Quel materiale è marketing.
Un archivio a pagamento.
Content-Signal: search=yes, ai-input=no, ai-train=no
Vuoi essere trovabile, perché il risultato di ricerca è l'argomento di vendita. Quello che non vuoi è che la sostanza dell'articolo arrivi gratis dentro la risposta di qualcun altro. È il caso in cui il segnale fa un lavoro che un Disallow non sa fare: bloccare la scansione si porterebbe via anche la tua scheda nel motore.
Se un singolo bot merita condizioni diverse, riceve il suo gruppo:
User-agent: *
Allow: /
Content-Signal: search=yes, ai-input=yes, ai-train=no
User-agent: GPTBot
Allow: /
Content-Signal: search=yes, ai-input=yes, ai-train=yes
Vale la solita precedenza del robots.txt: un bot che trova il proprio nome legge quel gruppo e ignora del tutto il *.
Cos'è davvero
Una convenzione giovane. Non è un RFC, non è uno standard W3C, non è qualcosa che un crawler sia tenuto a rispettare. Nessuno ha promesso di aderirvi in una forma che tu possa far valere. Se leggi che Content-Signal protegge i tuoi contenuti, stai leggendo pubblicità.
Allora perché scrivere quella riga.
Perché la legge una macchina e costa quasi niente: una riga in un file che già servi, un'intestazione in un blocco di configurazione che già hai. Il preambolo che accompagna la convenzione presenta un no come riserva espressa di diritti ai sensi dell'articolo 4 della direttiva UE 2019/790, l'opt-out dall'estrazione di testo e dati. Se questo regga nella tua giurisdizione è domanda da avvocato. Una preferenza che non hai espresso non regge da nessuna parte.
E perché dice una cosa per cui un Disallow non ha parole. «Non addestrarti su di me» e «vattene» sono frasi diverse, e finora potevi mandare solo la seconda.
Verifica che il tuo arrivi
curl -sI https://esempio.com/ | grep -i content-signal
curl -s https://esempio.com/robots.txt | grep -i content-signal
Ripeti il primo su una pagina che non sia la home. Se l'intestazione è messa dentro un blocco location, può coprire meno sito di quanto credi.
Un altro, se stai dietro una CDN:
curl -sI https://esempio.com/robots.txt | grep -i "server\|cf-cache-status"
Controlla che il robots.txt che torna sia il tuo. Il nostro ha restituito 404 dall'origine per mesi mentre Cloudflare rispondeva al bordo con un file di policy gestita che non avevamo mai scritto, e ogni verifica riceveva un 200 del tutto credibile.