
# SEO și căutare

Căutarea este oferită de Fumadocs. Onedocs adaugă utilitare pentru sitemap, fișierele robots.txt și llms.txt, toate configurate ca rute App Router Next.js. Pentru metadatele paginii și imaginile Open Graph, consultați `onedocs/metadata` și `onedocs/og` din [API referință](https://onedocs.inline0.dev/ro/docs/api-reference#metadata).

## Căutare

Onedocs folosește căutarea Orama încorporată din Fumadocs. Creați o rută API:

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

Dialogul de căutare adăugat de `RootProvider` interoghează implicit `/api/search`, deci nu este necesară nicio altă configurare.

## Sitemap

Generați un sitemap la `/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` listează rădăcina site-ului, apoi câte un URL pentru fiecare intrare din `pages` din `/docs`. Intrările care încep cu `---` (separatorii barei laterale) sunt omise, iar `index` se mapează la `/docs` însuși. Intrările sunt preluate așa cum sunt furnizate, așadar paginile din subdosare trebuie să aibă propriile intrări, de exemplu `"guides/setup"`.

## Robots.txt

Generați un robots.txt la `/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 });
}
```

Aceasta creează:

```
User-Agent: *
Allow: /

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

## LLMs.txt

[LLMs.txt](https://llmstxt.org/) ajută asistenții AI să înțeleagă documentația. Onedocs poate genera atât versiuni rezumative, cât și versiuni cu conținut complet.

### Versiunea rezumativă

Creați `/llms.txt` cu titlurile și descrierile paginilor:

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

Fișierul începe cu titlul și descrierea, listează fiecare pagină ca `- Title: URL` împreună cu descrierea sa și se încheie cu o trimitere la `/llms-full.txt`. Ambele funcții preiau sursa încapsulată din `createLLMsSource`, nu sursa Fumadocs însăși, și returnează o promisiune.

### Versiunea cu conținut complet

Creați `/llms-full.txt` cu documentația completă:

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

Fiecare pagină este scrisă cu titlul, URL, descrierea și Markdown procesat, cu `---` între pagini.

Textul paginii provine din Fumadocs MDX, din Markdown procesat, care este dezactivat implicit. Fără acesta, `llms-full.txt` conține doar titluri, URL-uri și descrieri ([#3](https://github.com/inline0/onedocs/issues/3)). Activați-l în `source.config.ts`:

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

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

## Opțiuni de configurare

### Opțiuni pentru sitemap

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

### Opțiuni pentru robots

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

## Ce primiți

După configurarea acestor rute:

| URL | Ce face |
|-----|--------------|
| `/api/search?query=...` | Punct final API de căutare |
| `/sitemap.xml` | Sitemap XML pentru motoarele de căutare |
| `/robots.txt` | Fișier Robots cu referință la sitemap |
| `/llms.txt` | Rezumat pentru asistenții AI |
| `/llms-full.txt` | Documentație completă pentru asistenții AI |
