/ 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

Déposez llms.txt dans le dossier statique de votre framework (voir commentaires ci-dessous). Cloudflare Pages le sert automatiquement sans configuration supplémentaire.

Cloudflare Pages
# Cloudflare Pages, dossier statique selon votre framework
#
# Framework       → Dossier à utiliser
# Astro            public/
# SvelteKit        static/
# Hugo             static/
# Next.js          public/
# Eleventy         configurer passthrough pour llms.txt
#
# Exemple Astro / Next.js :
# Déposez le fichier ici : public/llms.txt
# Cloudflare Pages le détectera et le servira sur /llms.txt automatiquement.

# Vérifier après déploiement :
curl -I https://votre-domaine.com/llms.txt
# Attendu : HTTP/2 200  content-type: text/plain

Guide complet Cloudflare Pages → (inclut Cloudflare Functions pour la génération dynamique et la gestion du cache)

Vercel

Même logique : placez llms.txt dans public/ (Next.js, Astro, Nuxt) ou static/ (SvelteKit, Hugo). Vercel le sert sur /llms.txt tel quel. Pour une génération dynamique, utilisez une Edge Function.

Vercel
// Vercel, même logique que Cloudflare Pages.
// Placez public/llms.txt (Next.js, Astro, Nuxt, Remix)
// ou static/llms.txt (SvelteKit, Hugo).
// Vercel le sert automatiquement sur /llms.txt.

// Pour générer via Edge Function :
// api/llms.ts
import type { NextRequest } from 'next/server';

export const config = { runtime: 'edge' };

export default function handler(_req: NextRequest) {
  const body = `# Acme\n\n> Résumé.\n\n## Docs\n\n- [Guide](https://acme.example/docs)`;
  return new Response(body, {
    headers: { 'Content-Type': 'text/plain; charset=utf-8' },
  });
}

Guide complet Vercel → (static file, Next.js Route Handler, Edge Function avec cache)

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 const dynamic = 'force-static';

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' },
  });
}

Guide complet Next.js → (App Router statique, Pages Router, génération depuis un CMS)

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' } });
};

Guide complet Astro → (static, content collections, llms-full.txt, SSR)

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;
  }
});

Guide complet WordPress → (FTP, plugin, WP-CLI, génération depuis WP_Query)

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