---
title: "SEO et recherche IA · Documentation Leiho"
description: "Données structurées, llms.txt et Markdown tirés de vos champs."
url: https://leiho.dev/fr/docs/seo-and-ai-search
lang: fr
updated: 2026-11-05
---
Guides

# SEO et recherche IA

Données structurées, llms.txt et Markdown tirés de vos champs.

Les moteurs de recherche et les assistants IA (ChatGPT, Claude, Perplexity, les réponses IA de Google) lisent mieux une page qui dit ce qu’elle est. Leiho le construit à partir des champs que vous avez déjà : pas d’onglet SEO pour les rédacteurs, rien de stocké deux fois.

## Décrire une collection

Dans **Collections → une collection → Recherche et IA**, ou dans `leiho.schema.json` :

```json
{
  "id": "doc",
  "path": "/docs/{slug}",
  "seo": { "type": "TechArticle", "description": "summary", "image": "cover", "faq": "faq" },
  "fields": [ … ]
}
```

- **type** : le type schema.org. Pages : `WebPage` (par défaut), `AboutPage`, `ContactPage`, `CollectionPage`, `FAQPage`, `ProfilePage`. Articles : `Article`, `BlogPosting` (par défaut pour les articles), `NewsArticle`, `TechArticle`. Sujets : `Product`, `Service`, `Event`, `Course`, `SoftwareApplication`, `Person`, `Organization`, `LocalBusiness`, `Place`, `Recipe`, `CreativeWork`.
- **title**, **description**, **image** : les champs qui les portent. Sans champ de description, Leiho prend un champ texte nommé `description`, `summary`, `intro`, `excerpt`, `lead`, `subtitle` ou `tagline`, puis le premier texte assez long, puis la méta-description de Yoast, Rank Math, SEOPress ou All in One SEO, puis l’extrait.
- **faq** : une liste avec des champs `question` et `answer`, publiée comme une FAQ.
- **llms: false** retire la collection de `llms.txt`.

## Ce que sert l’API de contenu

Chaque contenu reçoit un bloc `seo`, dans la langue de la requête :

```json
"seo": {
  "type": "TechArticle",
  "title": "Install",
  "description": "Install the plugin, connect your site, annotate your markup.",
  "image": { "url": "…", "alt": "…" },
  "faq": [ { "question": "…", "answer": "…" } ],
  "llms": true,
  "jsonld": [ { "@type": "WebPage", … }, { "@type": "TechArticle", … }, { "@type": "FAQPage", … } ]
}
```

Le filtre `leiho_seo` ajoute ce que vous seul savez, comme le prix d’un produit ou le lieu d’un événement.

## L’écrire dans la page

```ts
import { leihoGraph, jsonLd, seoMeta } from 'leiho/seo';

const graph = leihoGraph({
  url: 'https://example.com/docs/install',
  item,
  site: { url: 'https://example.com', name: 'Example', locales: ['en', 'fr'] },
  organization: { name: 'Example Inc.', logo: '/logo.png' },
  breadcrumbs: [{ name: 'Docs', url: '/docs' }, { name: item.title }],
});
const { title, description, meta } = seoMeta(item, { url, siteName: 'Example' });
// <script type="application/ld+json">{jsonLd(graph)}</script>
```

`leihoGraph()` place les nœuds du contenu sur l’adresse canonique de la page et les relie à votre site, votre organisation et au fil d’Ariane. `seoMeta()` renvoie la description et les balises Open Graph à écrire avec votre framework.

## llms.txt et Markdown

Un site statique les tire de ses propres pages après le build : un `page.md` à côté de chaque page, `llms.txt` et `llms-full.txt` par langue, et un `sitemap.xml` avec les autres langues de chaque page et sa date.

```js
// astro.config.mjs
import { aiReady } from 'leiho/ai-ready';

export default defineConfig({
  site: 'https://example.com',
  integrations: [aiReady()],
});
```

```bash
# Tout autre build statique
npx leiho ai-ready --site https://example.com --dir out
```

Le Markdown vient du `<main>` de chaque page. Navigation, boutons, `svg`, `canvas` et tout ce qui porte `aria-hidden="true"` ou `data-md-skip` sont laissés de côté.

Un front rendu à la demande peut les demander à WordPress :

| Endpoint | Renvoie |
| --- | --- |
| `GET /wp-json/leiho/v1/llms.txt` | Le llms.txt du site. `?full=1` ajoute le texte de chaque entrée, `?md=1` lie les `page.md`, `?locale=fr` dans une langue. |
| `GET /wp-json/leiho/v1/markdown?path=/docs/install` | Une entrée en Markdown, avec un en-tête `Link` canonique. |

## Répondre à Accept: text/markdown

Pour servir le Markdown à l’adresse même de la page, réécrivez côté serveur quand le client le demande. Avec nginx :

```nginx
map $http_accept $wants_markdown {
  default 0;
  "~*text/markdown" 1;
}

location / {
  if ($wants_markdown) {
    rewrite ^/$ /index.md last;
    rewrite "^((?:/[^./]+)+)$" $1.md last;
  }
  add_header Vary Accept;
  try_files $uri $uri/index.html =404;
}
```

## Laisser entrer les robots IA

Être cité commence par être lu. Un `robots.txt` qui nomme les assistants bienvenus (GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot, PerplexityBot, Google-Extended…) et indique votre sitemap suffit.

Mis à jour le 5 novembre 2026[Un point pas clair sur cette page ? Dites-le-nous →](https://github.com/pixelersagency/leiho/issues/new?title=Docs%3A%20SEO%20et%20recherche%20IA)
