SEO & Pencarian
Pencarian berasal dari Fumadocs. Onedocs menambahkan helper untuk sitemap, file robots.txt dan llms.txt, yang semuanya disiapkan sebagai rute App Router Next.js. Untuk metadata halaman dan gambar Open Graph, lihat onedocs/metadata dan onedocs/og di API Referensi.
Pencarian
Onedocs menggunakan pencarian Orama bawaan dari Fumadocs. Buat rute API:
import { source } from "@/lib/source";
import { createFromSource } from "fumadocs-core/search/server";
export const { GET } = createFromSource(source);
Dialog pencarian yang ditambahkan RootProvider secara default meminta /api/search, jadi tidak diperlukan penyiapan lain.
Sitemap
Buat sitemap di /sitemap.xml:
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 mencantumkan root situs, lalu satu URL untuk setiap entri di pages dalam /docs. Entri yang diawali --- (pemisah sidebar) dilewati, dan index dipetakan ke /docs itu sendiri. Entri dibaca sesuai urutan yang diberikan, jadi halaman di dalam subfolder perlu memiliki entri sendiri, misalnya "guides/setup".
Robots.txt
Buat robots.txt di /robots.txt:
import { generateRobots } from "onedocs/seo";
const baseUrl = "https://yourdomain.com";
export default function robots() {
return generateRobots({ baseUrl });
}
Ini membuat:
User-Agent: *
Allow: /
Host: https://yourdomain.com
Sitemap: https://yourdomain.com/sitemap.xml
LLMs.txt
LLMs.txt membantu asisten AI memahami dokumentasi Anda. Onedocs dapat membuat versi ringkasan maupun konten lengkap.
Versi ringkasan
Buat /llms.txt dengan judul dan deskripsi halaman:
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" },
});
}
File dimulai dengan judul dan deskripsi, mencantumkan setiap halaman sebagai - Title: URL beserta deskripsinya, lalu diakhiri penunjuk ke /llms-full.txt. Kedua fungsi menerima sumber terbungkus dari createLLMsSource, bukan sumber Fumadocs itu sendiri, dan mengembalikan promise.
Versi konten lengkap
Buat /llms-full.txt dengan dokumentasi lengkap:
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" },
});
}
Setiap halaman ditulis sebagai judul, URL, deskripsi, dan Markdown yang telah diproses, dengan --- di antara halaman.
Teks halaman berasal dari Fumadocs MDX's Markdown yang telah diproses, dan secara default fitur ini nonaktif. Tanpanya, llms-full.txt hanya berisi judul, URL, dan deskripsi (#3). Aktifkan di source.config.ts:
import { defineDocs } from "fumadocs-mdx/config";
export const docs = defineDocs({
dir: "content/docs",
docs: {
postprocess: {
includeProcessedMarkdown: true,
},
},
});
Opsi konfigurasi
Opsi sitemap
generateSitemap({
baseUrl: "https://yourdomain.com",
pages: ["index", "getting-started", "configuration"],
docsPath: "/docs", // Default: "/docs"
});
Opsi robots
generateRobots({
baseUrl: "https://yourdomain.com",
sitemapPath: "/sitemap.xml", // Default: "/sitemap.xml"
});
Yang Anda dapatkan
Setelah menyiapkan rute ini:
| URL | Fungsinya |
|---|---|
/api/search?query=... |
Endpoint API pencarian |
/sitemap.xml |
Sitemap XML untuk mesin pencari |
/robots.txt |
File Robots dengan referensi sitemap |
/llms.txt |
Ringkasan untuk asisten AI |
/llms-full.txt |
Dokumentasi lengkap untuk asisten AI |