Un'AI che visita un sito web vede qualcosa di molto diverso da quello che vede un essere umano. Vede tag <nav>, <header>, cookie banner, script di analytics, menu ripetuti su ogni pagina, footer con link legali, e — da qualche parte in mezzo — il contenuto che interessava davvero.
Un essere umano filtra tutto questo automaticamente. Un'AI deve processarlo, pesarlo, capire cosa è segnale e cosa è struttura della pagina. Per un agente AI che deve rispondere a "cosa fa questa azienda?", leggere la homepage di un sito ottimizzato per la conversione richiede lo stesso lavoro di leggere un documento con il 90% di testo ridondante.
Il problema non è teorico. È il motivo per cui le AI descrivono spesso le aziende in modo generico, confondono servizi simili, o non riescono a rispondere a domande specifiche su un prodotto anche quando le risposte sono pubblicamente disponibili sul sito.
llms.txt è la soluzione.
Cos'è llms.txt
llms.txt è un file di testo in formato Markdown posizionato nella root di un sito web — raggiungibile all'URL /llms.txt. Contiene una descrizione strutturata del sito pensata specificamente per essere consumata da sistemi AI.
È stato proposto da Jeremy Howard (fast.ai) nel 2024, e il principio è semplice: invece di chiedere alle AI di estrarre il segnale dal rumore di un sito ottimizzato per umani, dai loro direttamente il segnale.
Il formato è volutamente minimalista:
# Nome dell'organizzazione
> Descrizione densa: cosa fa, per chi, quale valore specifico.
## Servizi
- [Servizio A](URL): Cosa è, per chi, output concreto.
## Blog
- [Titolo articolo](URL): L'insight principale in una riga.
## Contatti
- [Demo](URL): Come iniziare.Niente HTML. Niente CSS. Niente struttura di navigazione. Solo contenuto.
I tre file dell'ecosistema
llms.txt non è un file singolo — è il nome di un sistema composto da tre livelli, ognuno pensato per un caso d'uso diverso.
llms.txt — l'indice navigabile
Il file principale. Contiene link con descrizioni, organizzati in sezioni tematiche. Un'AI che legge solo llms.txt deve poter rispondere a: cosa fa questa organizzazione, a chi si rivolge, quali servizi offre, come contattarla. Se non riesce senza visitare altri URL, il file è incompleto. Dimensione tipica: 5–50 KB.
llms-full.txt — il contenuto completo
Dove llms.txt dice "questo articolo parla di X (vedi URL)", llms-full.txt include direttamente il testo dell'articolo. È la versione per sistemi che vogliono consumare tutto il sito in una singola richiesta senza fare crawling pagina per pagina.
Il caso d'uso principale è nei sistemi RAG aziendali: invece di configurare un crawler per indicizzare 50 pagine, carichi llms-full.txt come documento unico e il tuo knowledge base ha subito il contenuto di tutto il sito. Dimensione tipica: 100 KB–5 MB.
Versioni per lingua
Un sito multilingua può avere versioni localizzate — /it/llms.txt, /de/llms.txt — che reindirizzano solo ai contenuti nella lingua corretta. Un agente AI interrogato in italiano viene così guidato verso i contenuti italiani, non verso la versione inglese di default.
Chi legge questi file — e quando
Questa è la parte più importante, e quella che viene capita meno.
ClaudeBot — il crawler di training di Anthropic
Anthropic ha un web crawler che si identifica con lo User-Agent ClaudeBot/1.0. Crawla il web per raccogliere dati di training. Rispetta robots.txt, quindi puoi controllarlo:
# robots.txt
User-agent: ClaudeBot
Allow: /
# Per escludere sezioni specifiche:
User-agent: ClaudeBot
Disallow: /admin/ClaudeBot legge il sito come qualsiasi altra pagina web. llms.txt contribuisce al training come qualsiasi documento di qualità sul sito. Il suo valore principale qui è la chiarezza del contenuto, non il formato.
Agenti AI con browsing runtime
Quando un utente chiede a Claude o ChatGPT di "andare su un sito e spiegare cosa fa", l'AI visita il sito in tempo reale con un tool di browsing. Qui llms.txt ha valore diretto: un agente ben configurato legge /llms.txt come primo passo, ottiene subito una mappa strutturata, e può rispondere con molto più contesto.
Crawler semantici — Perplexity, You.com, Bing AI
I motori di ricerca basati su AI leggono llms.txt attivamente come punto di partenza del crawling. Lo usano come mappa per decidere quali pagine indicizzare con priorità. Essere listati in directory come llmstxt.site amplifica questa visibilità.
Pipeline RAG aziendali
Un'organizzazione che costruisce un assistente AI interno può configurarlo per leggere llms-full.txt come fonte di conoscenza. Il file viene caricato nel vector store del sistema RAG al posto di fare crawling dell'intero sito.
| Sistema | Legge llms.txt? | Legge llms-full.txt? |
|---|---|---|
| AI in chat (senza browsing) | No | No |
| AI con browsing | Raramente | No |
| ClaudeBot (training) | Come qualsiasi pagina | Come qualsiasi pagina |
| Crawler semantici | Sì, come priorità | No |
| Agenti custom | Sì | Se configurato |
| Pipeline RAG | Solo se incluso | Sì, è fatto per questo |
Come implementarlo: quattro approcci
Approccio 1: file statico
Il modo più semplice. Crei un file llms.txt nella root del sito e lo aggiorni manualmente. Limite: si desincronizza dal blog a ogni nuovo articolo.
Approccio 2: Next.js App Router
In Next.js, crei una route handler in app/llms.txt/route.ts. Next.js la serve come risposta HTTP a /llms.txt.
// app/llms.txt/route.ts
import { getAllPosts } from '@/lib/posts';
export const dynamic = 'force-static';
export async function GET() {
const posts = await getAllPosts('en');
const lines = [
'# Nome Organizzazione\n',
'> Descrizione.\n',
'## Blog\n',
...posts.map(p => `- [${p.title}](${p.url}): ${p.excerpt}`)
];
return new Response(lines.join('\n'), {
headers: { 'Content-Type': 'text/plain; charset=utf-8' },
});
}Con force-static, il file viene generato a build time — aggiornato a ogni deploy senza overhead runtime.
Approccio 3: build-time script — Vite, React, PHP/MySQL
Per stack senza server Node.js in produzione, il file si genera prima del deploy con uno script Node.js che chiama l'API e scrive il file nel filesystem:
// scripts/generate-llms.js
import { writeFileSync } from 'fs';
async function fetchAllPosts(lang) {
const res = await fetch(
`${API_BASE}/blog/get-posts.php?status=published&lang=${lang}&limit=50`
);
const data = await res.json();
return data.posts ?? [];
}
// genera il contenuto e scrive llms.txt
writeFileSync('llms.txt', content, 'utf8');
writeFileSync('dist/llms.txt', content, 'utf8');// package.json
{
"scripts": {
"generate-llms": "node scripts/generate-llms.js",
"build:full": "node scripts/generate-llms.js && vite build"
}
}Approccio 4: PHP dinamico
Per siti PHP puri, si crea un file che genera il contenuto e si usa .htaccess per servire /llms.txt attraverso quel file:
# .htaccess
RewriteRule ^llms\.txt$ /llms-dynamic.php [L]<?php
header('Content-Type: text/plain; charset=utf-8');
header('Cache-Control: public, max-age=3600');
$posts = $pdo->query("
SELECT slug, title_en, excerpt_en
FROM blog_posts WHERE status = 'published'
ORDER BY published_at DESC
")->fetchAll();
echo "# Nome Organizzazione\n\n";
foreach ($posts as $p) {
echo "- [{$p['title_en']}](https://example.com/en/blog/{$p['slug']}): {$p['excerpt_en']}\n";
}La struttura che un'AI si aspetta
Il contenuto conta quanto il formato. Sezioni obbligatorie:
- H1 + Blockquote — identità primaria e descrizione densa
- Servizi/Prodotti — con descrizioni reali, non copy di marketing
- Blog/Risorse — ogni articolo con l'insight principale in una riga
- Contatti — come iniziare
Sezioni che aumentano il valore:
- Target & Differenziatori — per chi, cosa distingue dalla concorrenza
- Key Facts — 5-6 domande frequenti con risposta diretta nel file
- Stack/Integrazioni — tecnologie e piattaforme supportate
Dove registrare il file
Una volta pubblicato:
- llmstxt.site — la directory principale, consultata da developer e crawler AI
- robots.txt — aggiungi
# llms.txt: /llms.txtcome commento informativo - Sitemap XML — alcune implementazioni includono
llms.txtper assicurarne l'indicizzazione
Il momento giusto per iniziare
llms.txt è in una fase di adozione precoce. I siti che lo implementano adesso hanno un vantaggio competitivo reale: vengono rappresentati meglio dalle AI rispetto ai competitor che non l'hanno ancora fatto.
Il costo di implementazione è basso — un file statico si crea in un'ora, una route dinamica in mezza giornata. Il vantaggio è diretto: chiunque usi un agente AI per fare ricerca sui propri fornitori troverà la tua organizzazione descritta con precisione, e i competitor descritti con approssimazione.
I sistemi AI sono diventati parte del percorso di ricerca enterprise. llms.txt è il modo per assicurarsi che quando un CTO chiede a un agente AI "quali aziende fanno AI automation governance?", la risposta includa la tua.