Aller au contenu

SEO et recherche

La recherche provient de Fumadocs. Onedocs ajoute des utilitaires pour le plan du site, les fichiers robots.txt et llms.txt, tous configurés comme routes de l’App Router Next.js. Pour les métadonnées de page et les images Open Graph, consultez onedocs/metadata et onedocs/og dans la référence API.

Onedocs utilise la recherche Orama intégrée de Fumadocs. Créez une route API :

TypeScript
import { source } from "@/lib/source";
import { createFromSource } from "fumadocs-core/search/server";

export const { GET } = createFromSource(source);

Par défaut, la fenêtre de recherche ajoutée par RootProvider interroge /api/search ; aucune autre configuration n’est donc nécessaire.

Plan du site

Générez un plan du site dans /sitemap.xml :

TypeScript
import { generateSitemap } from "onedocs/seo";
import meta from "../../content/docs/meta.json";

const baseUrl = "https://yourdomain.com";

export default function sitemap() {
  return generateSitemap({
    baseUrl,
    pages: meta.pages ?? [],
  });
}

generateSitemap répertorie la racine du site, puis une URL par entrée dans pages sous /docs. Les entrées commençant par --- (séparateurs de la barre latérale) sont ignorées, et index pointe vers /docs lui-même. Les entrées sont lues telles quelles ; les pages des sous-dossiers doivent donc avoir leur propre entrée, par exemple "guides/setup".

Robots.txt

Générez un robots.txt dans /robots.txt :

TypeScript
import { generateRobots } from "onedocs/seo";

const baseUrl = "https://yourdomain.com";

export default function robots() {
  return generateRobots({ baseUrl });
}

Cela crée :

Code
User-Agent: *
Allow: /

Host: https://yourdomain.com
Sitemap: https://yourdomain.com/sitemap.xml

LLMs.txt

LLMs.txt aide les assistants IA à comprendre votre documentation. Onedocs peut générer les versions résumée et intégrale.

Version résumée

Créez /llms.txt avec les titres et descriptions des pages :

TypeScript
import { createLLMsSource, generateLLMsText } from "onedocs/llms";
import { source } from "@/lib/source";
import config from "../../../onedocs.config";

export async function GET() {
  const llmsSource = createLLMsSource(source);
  const text = await generateLLMsText(llmsSource, {
    title: config.title,
    description: config.description,
  });

  return new Response(text, {
    headers: { "Content-Type": "text/plain; charset=utf-8" },
  });
}

Le fichier commence par le titre et la description, répertorie chaque page sous la forme - Title: URL avec sa description, puis se termine par un lien vers /llms-full.txt. Les deux fonctions prennent la source encapsulée de createLLMsSource, et non la source Fumadocs elle-même, et renvoient une promesse.

Version intégrale

Créez /llms-full.txt avec la documentation complète :

TypeScript
import { createLLMsSource, generateLLMsFullText } from "onedocs/llms";
import { source } from "@/lib/source";

export async function GET() {
  const llmsSource = createLLMsSource(source);
  const text = await generateLLMsFullText(llmsSource);

  return new Response(text, {
    headers: { "Content-Type": "text/plain; charset=utf-8" },
  });
}

Chaque page est écrite avec son titre, URL, sa description et son Markdown traité, avec --- entre les pages.

Le texte des pages provient du Markdown traité par Fumadocs MDX, désactivé par défaut. Sans cela, llms-full.txt ne contient que les titres, les URL et les descriptions (#3). Activez cette option dans source.config.ts :

TypeScript
import { defineDocs } from "fumadocs-mdx/config";

export const docs = defineDocs({
  dir: "content/docs",
  docs: {
    postprocess: {
      includeProcessedMarkdown: true,
    },
  },
});

Options de configuration

Options du plan du site

TypeScript
generateSitemap({
  baseUrl: "https://yourdomain.com",
  pages: ["index", "getting-started", "configuration"],
  docsPath: "/docs", // Default: "/docs"
});

Options des robots

TypeScript
generateRobots({
  baseUrl: "https://yourdomain.com",
  sitemapPath: "/sitemap.xml", // Default: "/sitemap.xml"
});

Ce que vous obtenez

Après avoir configuré ces routes :

URL Fonction
/api/search?query=... Point de terminaison de recherche API
/sitemap.xml Plan du site XML pour les moteurs de recherche
/robots.txt Fichier robots avec référence au plan du site
/llms.txt Résumé pour les assistants IA
/llms-full.txt Documentation complète pour les assistants IA