
# 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

```bash
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:

```bash
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.

[Genera il tuo Content-Signal](/it/tools/content-signal-generator) · [Genera il tuo robots.txt](/it/tools/robots-txt-generator)
