Aller au contenu
Sylvain Joffraud l4w
Retour

llms.txt : donner un plan de site aux LLM

J’ai ajouté un /llms.txt sur mes trois sous-domaines. C’est un standard (llmstxt.org) encore jeune, mais l’idée est saine : donner aux LLM un résumé propre de ce que contient le site, plutôt que les laisser deviner depuis du HTML noyé dans du markup.

L’analogie : robots.txt dit au crawler où il a le droit d’aller ; llms.txt dit au modèle ce que le site raconte et quelles pages comptent.

Le format (5 minutes à comprendre)

Du Markdown, à la racine (/llms.txt) :

# Nom du site / de la personne

> Un blockquote de résumé : qui, quoi, où, dispo. La seule partie vraiment lue si le modèle est pressé.

## Section
- [Titre de page](https://exemple.fr/page): description courte et factuelle.

## Optional
- Ce qui peut être ignoré si le contexte est limité.

Le # H1 est la seule section obligatoire. Le > blockquote fait le gros du travail : c’est lui qui doit contenir l’essentiel en clair.

Le piège : un fichier statique qui pourrit

La tentation, c’est d’écrire un llms.txt à la main. Trois semaines plus tard il ment : un article publié n’y est pas, une page a changé d’URL. Un llms.txt périmé est pire que pas de llms.txt.

Ma solution : le générer à partir des mêmes sources que le site. Avec Astro, c’est un simple endpoint :

// src/pages/llms.txt.ts
import type { APIRoute } from "astro";
import { getCollection } from "astro:content";

export const GET: APIRoute = async () => {
  const posts = (await getCollection("posts"))
    .sort((a, b) => +b.data.pubDatetime - +a.data.pubDatetime)
    .slice(0, 20);

  const md = `# Mon blog technique

> Retours d'expérience DevOps, self-hosting et IA locale.

## Articles récents
${posts.map(p => `- [${p.data.title}](/posts/${p.id}/): ${p.data.description}`).join("\n")}
`;
  return new Response(md, { headers: { "Content-Type": "text/plain; charset=utf-8" } });
};

Au build, ça sort un /llms.txt toujours synchro avec le contenu. Zéro maintenance.

Est-ce que ça « marche » ?

Honnêtement : aucun des grands moteurs ne garantit le lire aujourd’hui. Mais le coût est ridicule (un endpoint), le standard prend de l’ampleur, et au pire ça force à écrire un résumé clair de son propre site — exercice étonnamment utile.

Un bon llms.txt, ce n’est pas un hack de référencement. C’est juste ton site, expliqué en une page, à jour parce qu’il se génère seul.


Partager cet article :

Article précédent
robots.txt et bots IA : autoriser les moteurs de réponse
Article suivant
Mocker `navigator.wakeLock` readonly : defineProperty