SEO і пошук
Пошук працює на основі Fumadocs. Onedocs додає хелпери для карти сайту, файлів robots.txt і llms.txt, налаштованих як маршрути App Router Next.js. Про метадані сторінок і зображення Open Graph див. onedocs/metadata і onedocs/og у довіднику API Reference.
Пошук
Onedocs використовує вбудований пошук Orama з Fumadocs. Створіть маршрут API:
import { source } from "@/lib/source";
import { createFromSource } from "fumadocs-core/search/server";
export const { GET } = createFromSource(source);
За замовчуванням діалог пошуку, який додає RootProvider, надсилає запити до /api/search, тож додаткове налаштування не потрібне.
Карта сайту
Створіть карту сайту за адресою /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 додає кореневу сторінку сайту, а потім по одному URL для кожного запису в pages у /docs. Записи, що починаються з --- (роздільники бічної панелі), пропускаються, а index зіставляється з /docs. Записи зчитуються без змін, тому сторінки у вкладених папках потрібно додавати окремо, наприклад "guides/setup".
Robots.txt
Створіть robots.txt за адресою /robots.txt:
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 допомагає асистентам ШІ розуміти вашу документацію. Onedocs може створити як стислу версію, так і версію з повним вмістом.
Стисла версія
Створіть /llms.txt із заголовками й описами сторінок:
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, і повертають проміс.
Версія з повним вмістом
Створіть /llms-full.txt із повною документацією:
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). Увімкніть його в source.config.ts:
import { defineDocs } from "fumadocs-mdx/config";
export const docs = defineDocs({
dir: "content/docs",
docs: {
postprocess: {
includeProcessedMarkdown: true,
},
},
});
Параметри конфігурації
Параметри карти сайту
generateSitemap({
baseUrl: "https://yourdomain.com",
pages: ["index", "getting-started", "configuration"],
docsPath: "/docs", // Default: "/docs"
});
Параметри robots
generateRobots({
baseUrl: "https://yourdomain.com",
sitemapPath: "/sitemap.xml", // Default: "/sitemap.xml"
});
Що ви отримуєте
Після налаштування цих маршрутів:
| URL | Призначення |
|---|---|
/api/search?query=... |
Кінцева точка пошуку API |
/sitemap.xml |
XML карта сайту для пошукових систем |
/robots.txt |
Файл Robots із посиланням на карту сайту |
/llms.txt |
Стислий опис для асистентів ШІ |
/llms-full.txt |
Повна документація для асистентів ШІ |