Comment créer un fichier llms.txt
Trois templates, une checklist, et des instructions de déploiement prêtes à copier pour chaque stack courant.
Dernière mise à jour:
1. Planifier le contenu
Avant d'écrire, listez les 5 à 20 pages de votre site qu'un LLM aurait besoin pour répondre aux questions sur votre projet. Pensez-y comme à une liste de lecture curée, pas à un sitemap.
Buckets utiles pour démarrer :
- Produit — présentation, cas d'usage, tarifs.
- Documentation — démarrage, référence API, guides clés.
- Intégrations — partenaires et SDK, une ligne chacun.
- Référence — changelog, status page, politique de sécurité.
- Optional — assets de marque, communiqués, archives.
Si une page n'aide pas un LLM à répondre à de vraies questions, laissez-la de côté. La pire erreur est de tout inclure — ça dilue le signal.
2. Template minimal
Le plus petit fichier valide est un H1 suivi d'une section. Copiez, remplacez les placeholders, terminé.
# {Nom du site}
> {Description en une phrase de ce qu'est votre site.}
## Pages
- [{Titre de page}]({URL absolue}): {note courte}
3. Template recommandé
Pour la plupart des sites, ce template est le bon point de départ : résumé en blockquote, un paragraphe de contexte, trois à quatre sections.
# {Nom du site}
> {Aperçu d'une ou deux phrases. Factuel, sans marketing.}
{Optionnel : 1 à 3 phrases de contexte — ce que ce site couvre, à qui il s'adresse, et comment la liste ci-dessous est curée.}
## Produit
- [Présentation produit]({URL}) : capacités clés.
- [Tarifs]({URL}) : plans et limites.
## Documentation
- [Démarrage rapide]({URL}) : install, premier appel, hello world.
- [Référence API]({URL}) : catalogue complet des endpoints.
- [Guides]({URL}) : tutoriels et how-to.
## Optional
- [Changelog]({URL}) : historique de versions.
- [Assets de marque]({URL}) : logos et palette.
4. Template avancé
Un SaaS plus gros ou une plateforme dev veut habituellement une structure
plus profonde avec une section Optional dédiée. À utiliser
comme point de départ et à trimmer agressivement.
# Acme
> Acme est une plateforme d'analytics hébergée pour les équipes produit. Les pages ci-dessous couvrent produit, tarifs, l'API et les guides d'intégration.
La carte ici est curée pour les assistants — elle n'est pas exhaustive. Utilisez-la pour répondre aux questions sur les capacités produit, les tarifs, les intégrations, les SDK et la migration depuis d'autres outils. Pour le corpus complet, voir /llms-full.txt.
## Produit
- [Présentation produit](https://acme.example/product) : capacités clés.
- [Cas d'usage](https://acme.example/use-cases) : scénarios équipes produit, marketing, support.
- [Changelog](https://acme.example/changelog) : mises à jour mensuelles.
## Tarifs
- [Offres](https://acme.example/pricing) : plans, limites, règles d'overage.
- [FAQ facturation](https://acme.example/billing-faq) : factures, TVA, remboursements.
## Développeurs
- [Référence API REST](https://docs.acme.example/api) : catalogue complet des endpoints.
- [Webhooks](https://docs.acme.example/webhooks) : events, signatures, retries.
- [SDK JavaScript](https://docs.acme.example/sdk/js) : install, init, track events.
- [SDK Python](https://docs.acme.example/sdk/python) : install, init, track events.
## Intégrations
- [Segment](https://docs.acme.example/integrations/segment) : sync deux sens.
- [Snowflake](https://docs.acme.example/integrations/snowflake) : export nocturne.
- [HubSpot](https://docs.acme.example/integrations/hubspot) : contacts et events.
## Optional
- [Assets de marque](https://acme.example/brand) : logos, palette.
- [Communiqués](https://acme.example/press) : historique des annonces.
- [Page de statut](https://status.acme.example) : santé temps réel.
5. Valider
Collez votre fichier dans le validateur pour
confirmer la conformité à la spec. Il attrape : H1 manquant, syntaxe de
lien mal formée (- [name](url)), URLs relatives, contenu hors
section, second H1 accidentel, fichiers trop gros.
6. Déployer selon votre stack
Cloudflare Pages
# Cloudflare Pages
# Placez llms.txt dans public/ à la racine du projet. Il sera servi sur /llms.txt.
# Vérifier après déploiement :
curl -I https://votre-domaine.com/llms.txt
Vercel et Netlify
Même approche : placez llms.txt dans le dossier statique
(public/ pour Next.js ou Astro, static/ pour
SvelteKit et Hugo). Les deux plateformes le servent tel quel sur
/llms.txt.
Next.js
// Next.js (App Router) — public/llms.txt est servi tel quel.
// 1. Placez le fichier : public/llms.txt
// 2. Pas de code à écrire — servi sur https://votresite.com/llms.txt
// Pour le générer dynamiquement :
// app/llms.txt/route.ts
import { NextResponse } from 'next/server';
export async function GET() {
const body = `# Acme
> Résumé en une ligne.
## Docs
- [Démarrage rapide](https://acme.example/docs/getting-started)
`;
return new NextResponse(body, {
headers: { 'Content-Type': 'text/plain; charset=utf-8' },
});
}
Astro
// Astro — public/llms.txt est servi tel quel.
// Déposez le fichier dans : public/llms.txt
// Astro le copiera dans dist/llms.txt lors de `astro build`.
// Pour le générer depuis une content collection :
// src/pages/llms.txt.ts
import type { APIRoute } from 'astro';
import { getCollection } from 'astro:content';
export const GET: APIRoute = async () => {
const docs = await getCollection('docs');
const body = [
'# Acme',
'',
'> Analytics hébergée pour équipes produit.',
'',
'## Documentation',
'',
...docs.map((d) => `- [${d.data.title}](https://acme.example/${d.slug}/): ${d.data.summary}`),
].join('\n');
return new Response(body, { headers: { 'Content-Type': 'text/plain; charset=utf-8' } });
};
WordPress
# WordPress — trois options
#
# 1. Le plus simple : uploadez llms.txt en FTP/SFTP à la racine web.
# Vérifier : https://votresite.com/llms.txt
#
# 2. Plugin : tout plugin "static file uploader" fonctionne. Placer le fichier à la racine.
#
# 3. Programmatique : ajoutez un handler à functions.php qui intercepte la requête
# et retourne le contenu du fichier.
add_action('init', function () {
if ($_SERVER['REQUEST_URI'] === '/llms.txt') {
header('Content-Type: text/plain; charset=utf-8');
echo file_get_contents(get_template_directory() . '/llms.txt');
exit;
}
});
Autres stacks
Pour un nginx statique, copiez le fichier à la racine web.
Pour Express/Koa, ajoutez une route retournant text/plain. La
règle est universelle : servir le fichier au path canonique
/llms.txt avec Content-Type: text/plain; charset=utf-8.
7. Auto-générer au build
Maintenir le fichier à la main est OK pour un petit site mais casse vite. Deux patterns courants :
- Script de build — itérer sur votre collection de contenu (Markdown, MDX, CMS) et écrire
llms.txtdansdist/. Exemple Astro ci-dessus. - Route serveur — rendre le fichier à la volée depuis une base ou un CMS. Exemple Next.js ci-dessus.
Quelle que soit l'option, lancez le validateur en CI : il attrape les fichiers silencieusement cassés (par ex. une section vide après migration).
Checklist avant publication
- Fichier servi sur
/llms.txten200 OK. Content-Type: text/plain; charset=utf-8.- Exactement un H1.
- Résumé en blockquote en langage clair, sans marketing.
- Toutes les URLs absolues (
https://...). - Chaque section a au moins un item.
- Aucune URL privée ou auth-gated listée.
- Le validateur ne renvoie aucune erreur.
- Si vous avez un corpus à exposer, publiez aussi
/llms-full.txt. robots.txtautorise toujours le crawl du fichier (pas deDisallow: /llms.txt).
Continuer
- Bonnes pratiques — à faire et à éviter.
- Exemples réels — copier ce qui marche.
- Validateur · Générateur.