Next.js 的 llms.txt
(还)没有官方约定
Next.js 为 robots.txt 和 sitemap.xml 提供了元数据文件约定 —— 从 app/robots.ts 导出一个函数,框架就会提供文件。llms.txt 没有这样的约定(有一个开放的功能请求: vercel/next.js 讨论 #80692),所以要自己接线。两种模式,都很简单:
模式 1: 静态文件
把 llms.txt 放进 public/。Next.js 会把那里的任何东西挂到根路径,所以 public/llms.txt → yoursite.com/llms.txt。完成。
关键页面很少变化时,这是正确选择。风险是漂移: 文件说的是你的网站曾经是什么。
模式 2: route handler
对于会变的内容 —— 文档、产品、文章 —— 从与页面相同的事实来源生成文件:
// app/llms.txt/route.ts
import { getDocs } from '@/lib/content';
export async function GET() {
const docs = await getDocs();
const body = [
'# Acme',
'',
'> Acme 是面向开发者的 widget API。',
'',
'## 文档',
...docs.map(d => `- [${d.title}](/docs/${d.slug}): ${d.summary}`),
'',
'## 机器可读表面',
'- [OpenAPI 规范](/openapi.json): 完整 API schema',
].join('\n');
return new Response(body, {
headers: { 'Content-Type': 'text/plain; charset=utf-8' },
});
}
如果内容源开销大,加上 export const revalidate = 3600。想要全文伴生文件,同样的模式也能提供 llms-full.txt。
该包含什么
精选胜过完整: 网站是什么(一个 blockquote)、智能体该从哪十几个页面开始(带单行摘要),以及指向机器表面的交叉引用 —— OpenAPI 规范和任何 MCP 端点是文件中最有价值的行。完整格式指南: llms.txt 指南。
验证
对你的部署运行 llms.txt 验证器 —— 存在性、可解析性、可导航结构 —— 或者扫描网站获取完整的智能体就绪图景。
常见问题
Next.js 有像 robots.ts 那样的 llms.ts 元数据约定吗?
没有。元数据文件约定覆盖 robots.txt、sitemap.xml、图标和 OG 图片 —— 不包括 llms.txt。功能请求仍开放;在那之前,用 public/llms.txt 或 route handler。
route handler 需要设置特殊的 Content-Type 吗?
以 UTF-8 的 text/plain(或 text/markdown)提供。智能体从正文解析 markdown 结构;重要的是路由直接以 200 返回内容。
静态文件还是 route handler?
关键页面稳定就用静态。文件里列了任何会变的东西就用 route handler —— 这是文档与快照的区别。