API
AI 可发现性如何优化 llms.txt

如何优化 llms.txt

把扁平的网址列表整理成清晰、有优先级的站点地图,帮助 AI 系统先找到最重要的 Talizen 页面。

Talizen 会自动提供 /llms.txt,并为每个被索引的页面生成 Markdown 版本。URL 清单与站点地图使用同一数据源,根目录的 /llms.ts 负责控制这些 URL 以什么结构呈现给 AI。

为什么结构很重要

未配置时,所有页面会进入一个按字母排序的 Pages 分组。这是安全的默认行为,但会让价格页、关键实现文档和次要法律页面获得相同的优先级。

更好的文件应把高价值产品页与文档放在前面,将相关内容分组,并移除重复、过期、实际应保持私有,或信息过弱、可能降低 AI 回答准确性的页面。

标题与摘要不需要配置:它们取自站点的 metadata.titlemetadata.description,把 metadata 写好就会自动同步。另外 /public/llms.txt 永远不会被访问到,平台始终提供自己的版本。

在项目根目录新建 /llms.ts,默认导出一个函数(可以是 async)。返回一个对象即声明结构,由平台负责枚举页面并排版。下面的配置优先展示核心页面和 AI 建站文档,将博客集中分组,并把法律内容标记为可选内容。

// /llms.ts
export default function llms() {
  return {
    sections: [
      { name: '核心页面', pages: ['/', '/pricing', '/templates', '/figma-to-website'] },
      { name: '帮助文档', pages: ['/docs/*'] },
      { name: '博客', pages: ['/blog/*'] },
      { name: 'Optional', pages: ['/solutions/*', '/contact'] },
    ],
    exclude: [
      '/cmstest',
      '/newfile',
    ],
  }
}

分组名称会原样输出,因此应使用能让目标 AI 理解的标签。Optional 具有特殊的排列语义,通常用于 AI 在上下文有限时可以跳过的链接,因此必须保留这个英文名称。

匹配规则

精确路径

/price 只匹配 /price。前导斜杠可以省略,但保留它更清晰。

前缀通配符

末尾的 /* 会匹配前缀页面及其全部子路径。/docs/ai/* 匹配 /docs/ai/docs/ai/guide,但不匹配 /docs/ai-tools

首次匹配优先

页面会归入第一个匹配的分组。把范围窄、优先级高的分组放在宽泛规则之前。

排除优先

系统会先检查 exclude。即使页面同时匹配某个分组,只要命中排除规则就不会输出。

在同一分组内,pages 中模式的顺序是主要排序依据;同一模式匹配到的 URL 按字母排序。空分组不会渲染。

没有匹配任何配置分组的页面会保留在自动生成的 Pages 分组中。如果存在 Optional,这个兜底分组会插入到它之前,否则放在最后。若希望直接丢弃这些未归类页面,设置 includeUnmatched: false

需要手工指定链接时,把分组写成 { name, links },其中每条链接是 { name, url }。这种分组不参与模式匹配,可以和 pages 分组混在同一个 sections 数组里——精选部分手写,长尾交给平台。

补充站点上下文

使用 details 编写一段简短的 Markdown 说明,让 AI 在打开任何页面前先获得必要背景。内容应事实明确、长期稳定且紧凑,包括产品是什么、哪部分文档最权威,以及重要术语。

return {
  details: `Talizen 是一个可视化与 AI 建站工具。
实现需求时优先使用 AI 建站文档。
产品与价格事实以核心页面为准。`,
  sections: [/* ... */],
}

生成文件的开头已经包含站点标题和 metadata.description。不要在 details 中逐字重复,应把空间留给能改善内容选择与理解的上下文。

完全接管

返回字符串而不是对象时,这段字符串就是 /llms.txt 的全文,标题、摘要和每一条链接都由你决定。入参 ctx 仍然提供平台的页面枚举,因此不必从零开始。

export default function llms(ctx) {
  const docs = ctx.pages.filter((p) => p.path.startsWith('/docs/'))
  return [
    `# ${ctx.metadata.title}`,
    '',
    '## 文档',
    '',
    ...docs.map((p) => `- [${p.path}](${p.url})`),
    '',
  ].join('\n')
}

ctx 提供 originpages(每项含 pathurl 与可选的 lastModified)以及 metadata。完整类型见 talizen 包中的 LLMsFileLLMsContext

验证清单

  • 打开部署域名上的 /llms.txt,确认最重要的分组排在第一位。
  • 打开多个生成的 .md 链接,包括首页的 /index.md,确认没有浏览器 UI 时内容仍然完整可用。
  • 确认通配符没有意外吞掉更具体的分组。
  • 确认被排除的 URL 不存在,未分类页面仍保留在 Pages 中。
  • 保持 Optional 在最后,使上下文受限的 AI 可以安全降低其优先级。
  • /llms.ts 执行出错或返回值形态不对,该端点会直接返回 5xx,不会静默退回默认输出——看到 5xx 就说明这个文件本身有问题。

Render diagnostics