
# SEO & Αναζήτηση

Η αναζήτηση προέρχεται από το Fumadocs. Το Onedocs προσθέτει βοηθητικές συναρτήσεις για τον χάρτη ιστοτόπου, τα αρχεία robots.txt και llms.txt, όλα ρυθμισμένα ως διαδρομές App Router του Next.js. Για μεταδεδομένα σελίδων και εικόνες Open Graph, δείτε τα `onedocs/metadata` και `onedocs/og` στην [Αναφορά API](https://onedocs.inline0.dev/el/docs/api-reference#metadata).

## Αναζήτηση

Το Onedocs χρησιμοποιεί την ενσωματωμένη αναζήτηση Orama από το Fumadocs. Δημιουργήστε μια διαδρομή 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);
```

Το παράθυρο αναζήτησης που προσθέτει το `RootProvider` αναζητά στο `/api/search` από προεπιλογή, επομένως δεν χρειάζεται άλλη ρύθμιση.

## Χάρτης ιστοτόπου

Δημιουργήστε χάρτη ιστοτόπου στο `/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` καταγράφει τη ρίζα του ιστοτόπου και έπειτα ένα URL για κάθε καταχώριση στο `pages` κάτω από το `/docs`. Οι καταχωρίσεις που αρχίζουν με `---` (διαχωριστικά πλευρικής γραμμής) παραλείπονται, ενώ το `index` αντιστοιχεί στο ίδιο το `/docs`. Διαβάζει τις καταχωρίσεις όπως δίνονται, επομένως οι σελίδες σε υποφακέλους χρειάζονται δικές τους καταχωρίσεις, για παράδειγμα `"guides/setup"`.

## Robots.txt

Δημιουργήστε ένα robots.txt στο `/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 });
}
```

Αυτό δημιουργεί:

```
User-Agent: *
Allow: /

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

## LLMs.txt

Το [LLMs.txt](https://llmstxt.org/) βοηθά τους βοηθούς τεχνητής νοημοσύνης να κατανοήσουν την τεκμηρίωσή σας. Το Onedocs μπορεί να δημιουργήσει τόσο συνοπτικές όσο και πλήρεις εκδόσεις περιεχομένου.

### Συνοπτική έκδοση

Δημιουργήστε `/llms.txt` με τίτλους και περιγραφές σελίδων:

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

Το αρχείο ξεκινά με τον τίτλο και την περιγραφή, παραθέτει κάθε σελίδα ως `- Title: URL` με την περιγραφή της και τελειώνει με παραπομπή στο `/llms-full.txt`. Και οι δύο συναρτήσεις λαμβάνουν την τυλιγμένη πηγή από το `createLLMsSource`, όχι την ίδια την πηγή Fumadocs, και επιστρέφουν ένα promise.

### Έκδοση πλήρους περιεχομένου

Δημιουργήστε `/llms-full.txt` με πλήρη τεκμηρίωση:

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

Κάθε σελίδα γράφεται ως τίτλος, URL, περιγραφή και επεξεργασμένο Markdown, με `---` ανάμεσα στις σελίδες.

Το κείμενο της σελίδας προέρχεται από το επεξεργασμένο Markdown του Fumadocs MDX, το οποίο είναι απενεργοποιημένο από προεπιλογή. Χωρίς αυτό, το `llms-full.txt` περιέχει μόνο τίτλους, URL και περιγραφές ([#3](https://github.com/inline0/onedocs/issues/3)). Ενεργοποιήστε το στο `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,
    },
  },
});
```

## Επιλογές διαμόρφωσης

### Επιλογές sitemap

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

### Επιλογές robots

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

## Τι προσφέρει

Αφού ρυθμίσετε αυτές τις διαδρομές:

| URL | Τι κάνει |
|-----|--------------|
| `/api/search?query=...` | Τελικό σημείο αναζήτησης API |
| `/sitemap.xml` | XML sitemap για τις μηχανές αναζήτησης |
| `/robots.txt` | Αρχείο robots με αναφορά στο sitemap |
| `/llms.txt` | Σύνοψη για βοηθούς τεχνητής νοημοσύνης |
| `/llms-full.txt` | Πλήρης τεκμηρίωση για βοηθούς τεχνητής νοημοσύνης |
