
# SEO en zoeken

Zoeken komt van Fumadocs. Onedocs voegt helpers toe voor de sitemap, bestanden robots.txt en llms.txt, allemaal ingesteld als routes van de Next.js App Router. Zie voor paginametadata en Open Graph-afbeeldingen `onedocs/metadata` en `onedocs/og` in de [API-referentie](https://onedocs.inline0.dev/nl/docs/api-reference#metadata).

## Zoeken

Onedocs gebruikt de ingebouwde Orama-zoekfunctie van Fumadocs. Maak een route API aan:

```ts title="src/app/api/search/route.ts"
import { source } from "@/lib/source";
import { createFromSource } from "fumadocs-core/search/server";

export const { GET } = createFromSource(source);
```

Het zoekvenster dat `RootProvider` toevoegt, doorzoekt standaard `/api/search`; verdere configuratie is niet nodig.

## Sitemap

Genereer een sitemap op `/sitemap.xml`:

```ts title="src/app/sitemap.ts"
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` vermeldt de hoofdmap van de site en vervolgens één URL per item in `pages` onder `/docs`. Items die beginnen met `---` (scheidingstekens in de zijbalk) worden overgeslagen, en `index` verwijst naar `/docs` zelf. De items worden overgenomen zoals opgegeven; pagina's in submappen hebben dus een eigen item nodig, bijvoorbeeld `"guides/setup"`.

## Robots.txt

Genereer een robots.txt op `/robots.txt`:

```ts title="src/app/robots.ts"
import { generateRobots } from "onedocs/seo";

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

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

Dit maakt het volgende aan:

```
User-Agent: *
Allow: /

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

## LLMs.txt

[LLMs.txt](https://llmstxt.org/) helpt AI-assistenten uw documentatie te begrijpen. Onedocs kan zowel samenvattingen als versies met de volledige inhoud genereren.

### Samenvattingsversie

Maak `/llms.txt` met paginatitels en beschrijvingen:

```ts title="src/app/llms.txt/route.ts"
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" },
  });
}
```

Het bestand begint met de titel en beschrijving, vermeldt elke pagina als `- Title: URL` met de beschrijving ervan en eindigt met een verwijzing naar `/llms-full.txt`. Beide functies nemen de omhulde bron uit `createLLMsSource`, niet de bron Fumadocs zelf, en retourneren een promise.

### Versie met volledige inhoud

Maak `/llms-full.txt` met de volledige documentatie:

```ts title="src/app/llms-full.txt/route.ts"
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" },
  });
}
```

Elke pagina wordt weergegeven met de titel, URL, beschrijving en verwerkte Markdown, met `---` tussen de pagina's.

De paginatekst komt uit de verwerkte Markdown van Fumadocs MDX, die standaard uitgeschakeld is. Zonder deze optie bevat `llms-full.txt` alleen titels, URL's en beschrijvingen ([#3](https://github.com/inline0/onedocs/issues/3)). Schakel de optie in `source.config.ts` in:

```ts title="source.config.ts"
import { defineDocs } from "fumadocs-mdx/config";

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

## Configuratieopties

### Sitemapopties

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

### Robots-opties

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

## Wat u krijgt

Na het instellen van deze routes:

| URL | Wat het doet |
|-----|--------------|
| `/api/search?query=...` | Zoekendpoint API |
| `/sitemap.xml` | XML-sitemap voor zoekmachines |
| `/robots.txt` | Robotsbestand met verwijzing naar sitemap |
| `/llms.txt` | Samenvatting voor AI-assistenten |
| `/llms-full.txt` | Volledige documentatie voor AI-assistenten |
