/ llmtxt.info

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é.

llms.txt — minimal
# {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.

llms.txt — recommandé
# {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.

llms.txt — avancé
# 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
# 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
// 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
// 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
# 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.txt dans dist/. 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.txt en 200 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.txt autorise toujours le crawl du fichier (pas de Disallow: /llms.txt).

Continuer

Sources