# llms.txt v2 网站实施操作手册

> 面向网站开发人员的技术手册：依据 llmstxt.org 官方规范 v2（2026-08 修订，Jeremy Howard 提出，AnswerDotAI 维护）逐步实施 `llms.txt`。
>
> - 官方规范：https://llmstxt.org/（英文原文）
> - 变更说明（v1 → v2）：https://llmstxt.org/changes.html
> - 开源仓库：https://github.com/AnswerDotAI/llms-txt

**重要声明**：本手册第 1–7 章、第 9 章"官方部分"严格依据官方原文编写；第 8 章为**社区实践**，不属于官方规范，正文已显著标注。请勿混淆二者。

---

## 目录

1. [标准概述](#1-标准概述)
2. [格式规范（精确版）](#2-格式规范精确版)
3. [页面 Markdown 版规则](#3-页面-markdown-版规则)
4. [发现机制：链接关系（rel 声明）](#4-发现机制链接关系rel-声明)
5. [分步实施指南](#5-分步实施指南)
6. [验证清单](#6-验证清单)
7. [运维与常见错误排查](#7-运维与常见错误排查)
8. [社区实践（非官方）](#8-社区实践非官方)
9. [生态工具与集成](#9-生态工具与集成)
10. [附录 A：参考资料](#附录-a参考资料)
11. [附录 B：全文合规自检表](#附录-b全文合规自检表)

---

## 1. 标准概述

### 1.1 它是什么

`llms.txt` 是放在网站某个路径下的 **Markdown 文件**，为 LLM / AI Agent 提供一份"精炼、专家级、集中于单一位置"的内容入口。Agent 的典型工作方式：

1. 查看或搜索 `llms.txt`，找到它需要的信息在哪；
2. 跟随文件中的链接，按需拉取详细内容（链接应指向 LLM 友好内容，如页面的 Markdown 版本）。

文件本身必须足够小，能放进上下文窗口；细节藏在链接背后，按需取用。

### 1.2 文件定位

- 文件可放在**站点根目录**（`/llms.txt`），也可放在**任意子路径**（如 `/docs/llms.txt`）。
- 一个文件**覆盖其路径下的所有页面**：`/docs/llms.txt` 覆盖 `/docs/` 下的一切内容。
- 当多个文件同时适用时，Agent 应使用**最具体的那一份**（最接近目标页面的路径）。

### 1.3 与现有标准的区别（为什么是它）

| 标准 | 定位 | 与 llms.txt 的关系 |
|---|---|---|
| `robots.txt` | 告知自动化工具哪些访问是允许的（抓取控制） | 互补：llms.txt 用于按需获取信息，主要用于**推理（inference）**而非训练 |
| `sitemap.xml` | 列出全部可索引的**人可读**页面 | **不能替代** llms.txt：通常没有页面的 LLM 可读版本；不含外部站点 URL；全部文档合计往往超出上下文窗口，且含大量无关信息 |
| `/.well-known/`（RFC 8615） | 元数据文件保留前缀 | llms.txt 不选它的原因：well-known 只在站点源根存在，许多作者只控制共享主机上的某个路径（如 GitHub Pages 项目站），无法在根目录放文件；而 `llms.txt` 和 `index.html` 一样，**描述它所在路径**，任何能发布内容于某路径的人都能提供 |

沿用标准文件名（同 `robots.txt` / `sitemap.xml`）使该方案可被常规发现；同时像 `index.html` 给任意路径一个"人读入口"一样，`llms.txt` 给任意路径一个"LLM 读入口"。

- `llms.txt` 也可引用站点使用的结构化数据标记（如 schema.org JSON-LD），帮助 LLM 结合上下文理解该信息。
- 补充说明：本文档应列出的页面若被 `robots.txt` 屏蔽，需要协调（见 [7.4](#74-与-robotstxt-的协调)）。

### 1.4 适用场景（官方列举）

官方在 1.1 与教程页给出适用方向，不限于软件文档：

- 软件文档（最常用）：编码 Agent 跟随它查找 API 参考与教程；
- 业务站点：阐述业务结构与政策；
- 个人站点：回答关于简历/履历的问题；
- 教育机构：提供课程信息访问路径。

---

## 2. 格式规范（精确版）

### 2.1 设计原则

`llms.txt` 使用 Markdown 而非 XML 等经典结构化格式，原因是这些文件主要被语言模型和 Agent 阅读。但**它的信息遵循特定格式，可用标准的程序化方法（解析器 / 正则）读取**。

### 2.2 文件节序（必须严格按此顺序）

一个合规文件包含以下 Markdown 节，**按指定顺序**：

1. **可选**：字节序标记（BOM）
2. **H1 标题**：项目或站点名称 —— **唯一必需项**
3. **可选**：blockquote（`>` 引用块）写项目简短摘要，包含理解其余文件所必需的关键信息
4. **零或多个**非标题类 Markdown 节（段落、列表等），提供更详细信息，说明如何解读所列文件
5. **零或多个**以 **H2 标题**分隔的节，内含"文件列表"（URL 清单）
   - 每个"文件列表"是一个 Markdown 列表；
   - 每项**必需**一个 Markdown 超链接 `[名称](url)`；
   - 链接后**可选** `:` 加说明文字。

### 2.3 官方 mock 示例（原文）

```markdown
# Title

> Optional description goes here

Optional details go here

## Section name

- [Link title](https://link_url): Optional link details

## Optional

- [Link title](https://link_url)
```

约定：名为 `Optional` 的 H2 节，按惯例放**次要信息**——需要更短上下文时 Agent 可以跳过的链接。

### 2.4 官方解析器即"文法契约"

官方在 intro.html 给出了一个无依赖、20 行内的完整解析器。其正则隐含的精确文法，是判断"是否合规"的最权威依据：

```
# 标题（必需）
   ^#\s*(?P<title>.+?$)

可选 blockquote 摘要（紧接标题）
   ^>\s*(?P<summary>.+?$)$

正文 info（标题与摘要之后的一切非标题内容）
   (?P<info>.*)

H2 分区（在正文之后）
   ^##\s*(.*?$)   逐段切分

列表项（每个分区内）
   -\s*\[(?P<title>[^\]]+)\]\((?P<url>[^\)]+)\)(?::\s*(?P<desc>.*))?
```

要点：

- 解析用 `re.split(r'^##\s*(.*?$)', txt, flags=re.MULTILINE)` 先切出"标题+摘要+正文"，再按 H2 切分区；
- 列表项必须从 `- ` 开始，且**必须**含 `[title](url)`；描述 `: desc` 可选；
- 描述为空也合法（正则组 `(?P<desc>.*)?` 可缺失）。

### 2.5 官方解析产物（Python 契约）

用官方模块 `parse_llms_file()` 解析，返回四个键：

```
['title', 'summary', 'info', 'sections']
```

- `title`：H1 标题文本
- `summary`：blockquote 摘要（若存在）
- `info`：正文信息（非标题内容）
- `sections`：`{'分区名': [{'title':…, 'url':…, 'desc':…}, …], …}`

### 2.6 官方 Python 解析器源码（intro.html 原文）

```python
from pathlib import Path
import re,itertools

def chunked(it, chunk_sz):
    it = iter(it)
    return iter(lambda: list(itertools.islice(it, chunk_sz)), [])

def parse_llms_txt(txt):
    "Parse llms.txt file contents in `txt` to a `dict`"
    def _p(links):
        link_pat = '-\s*\[(?P<title>[^\]]+)\]\((?P<url>[^\)]+)\)(?::\s*(?P<desc>.*))?'
        return [re.search(link_pat, l).groupdict()
                for l in re.split(r'\n+', links.strip()) if l.strip()]

    start,*rest = re.split(fr'^##\s*(.*?$)', txt, flags=re.MULTILINE)
    sects = {k: _p(v) for k,v in dict(chunked(rest, 2)).items()}
    pat = '^#\s*(?P<title>.+?$)\n+(?:^>\s*(?P<summary>.+?$)$)?\n+(?P<info>.*)'
    d = re.search(pat, start.strip(), (re.MULTILINE|re.DOTALL)).groupdict()
    d['sections'] = sects
    return d
```

官方附有测试套件 `tests/test-parse.py` 并确认通过全部测试。

### 2.7 内容编写指导（官方 Guidelines）

- 使用**简洁、清晰**的语言；
- 链接到资源时，附**简短、有信息量**的说明；
- 避免歧义词汇与未解释的行话；
- **测试你的文件**：用只给 `llms.txt` 作为起点的方式，向 Agent 提问关于你内容的问题。

---

## 3. 页面 Markdown 版规则

Agent 可能需要的信息页面，应在其**同一 URL** 提供干净的 Markdown 版本。官方允许两种形式：

| 原页面 URL | Markdown 版 URL（二选一） |
|---|---|
| `https://site/page.html` | `https://site/page.html.md`（扩展名后**追加** `.md`） |
| `https://site/page.html` | `https://site/page.md`（**替换**扩展名为 `.md`） |
| `https://site/path/`（无文件名） | `https://site/path/index.html.md` 或 `https://site/path/index.md` |

要点：

- 两种形式 v2 均允许（v1 只规定追加 `.md`；社区实践出现替换扩展名的做法，v2 予以采纳）；
- 无文件名的路径 URL，改用 `index.html.md` 或 `index.md`；
- llms.txt 中的链接应指向 LLM 友好内容，因此优先指向这些 Markdown 版本；
- 官方示范：本网站（llmstxt.org）自身即通过 `.html.md` 提供各页 Markdown 版（如 `index.md`、`changes.md`、`intro.html.md`）。

---

## 4. 发现机制：链接关系（rel 声明）

v2 新增的发现机制，解决"给了一个页面，Agent 如何不靠猜就找到它的 Markdown 版 / 覆盖它的 llms.txt"。

### 4.1 两种标准链接关系

| rel | type | 指向 |
|---|---|---|
| `rel="alternate"` | `text/markdown` | 该页面的 Markdown 版本 |
| `rel="describedby"` | — | 覆盖该页面的 llms.txt 文件 |

一个 llms.txt 文件描述其路径下所有页面，因此 `/docs/llms.txt` 覆盖 `/docs/` 下的一切。

### 4.2 提供方式一：HTML `<link>` 元素

在页面 `<head>` 中加入：

```html
<link rel="alternate" type="text/markdown" href="/docs/page.html.md">
<link rel="describedby" href="/docs/llms.txt">
```

### 4.3 提供方式二：HTTP `Link:` 响应头

官方原文示例（一次可同时声明两个关系，逗号分隔）：

```
Link: </docs/page.html.md>; rel="alternate"; type="text/markdown", </docs/llms.txt>; rel="describedby"
```

要点：

- **对非 HTML 资源同样适用**——例如 Markdown 文件自身也可以携带 `Link:` 头（`rel="describedby"` 指向覆盖它的 llms.txt）；
- **可以在 Web 服务器或 CDN 配置层添加，无需修改任何页面**，这是不便于改页面时的首选方案。

### 4.4 Nginx 配置示例（响应头）

在 `server` 或 `location` 块中加入（页面级）：

```nginx
location /docs/ {
    add_header Link "</docs/page.html.md>; rel=\"alternate\"; type=\"text/markdown\", </docs/llms.txt>; rel=\"describedby\"";
}
```

对 Markdown 文件自身（CDN / 服务器层，覆盖非 HTML 资源）：

```nginx
location ~* \.md$ {
    add_header Link "</docs/llms.txt>; rel=\"describedby\"";
}
```

### 4.5 Cloudflare 等 CDN 说明

CDN 的"Transform Rules"或"Response Headers"规则可对匹配路径/扩展名统一注入 `Link` 头，适合跨多页面批量生效，且不动源站代码。

---

## 5. 分步实施指南

> 目标：一个站点从零到"Agent 可消费"。以软件文档站点（如 `/docs/`）为例，全站同理。

### 步骤 1：创建 `/docs/llms.txt`

按第 2 章格式编写。官方 FastHTML 实际使用的精简示例（llmstxt.org 原文节选）：

```markdown
# FastHTML

> FastHTML is a python library which brings together Starlette, Uvicorn, HTMX, and fastcore's `FT` "FastTags" into a library for creating server-rendered hypermedia applications.

Important notes:

- Although parts of its API are inspired by FastAPI, it is *not* compatible with FastAPI syntax and is not targeted at creating API services
- FastHTML is compatible with JS-native web components and any vanilla JS library, but not with React, Vue, or Svelte.

## Docs

- [FastHTML quick start](https://fastht.ml/docs/tutorials/quickstart_for_web_devs.html.md): A brief overview of many FastHTML features
- [HTMX reference](https://github.com/bigskysoftware/htmx/blob/master/www/content/reference.md): Brief description of all HTMX attributes, CSS classes, headers, events, extensions, js lib methods, and config options

## Examples

- [Todo list application](https://github.com/AnswerDotAI/fasthtml/blob/main/examples/adv_app.py): Detailed walk-thru of a complete CRUD app in FastHTML showing idiomatic use of FastHTML and HTMX patterns.

## Optional

- [Starlette full documentation](https://gist.githubusercontent.com/jph00/809e4a4808d4510be0e3dc9565e9cbd3/raw/9b717589ca44cedc8aaf00b2b8cacef922964c0f/starlette-sml.md): A subset of the Starlette documentation useful for FastHTML development.
```

直接套用的空模板见同目录 `llms.txt-模板.md`。

### 步骤 2：为页面生成 Markdown 版本

- 把文档类页面按第 3 章规则输出 `.md`（追加或替换扩展名）；
- 静态站点生成器（如 nbdev、VitePress、Docusaurus 等）多数可自动产出，见第 9 章；
- 保持与 HTML 页面**同 URL**，仅扩展名变化。

### 步骤 3：声明链接关系

- 能改页面：在 `<head>` 加 `<link>` 元素（见 4.2）；
- 不想改页面 / 非 HTML 资源：在服务器或 CDN 配置 `Link:` 头（见 4.3–4.5）。

### 步骤 4：子路径部署与"最具体文件"规则

- 多级目录可各放自己的 llms.txt（如 `/docs/llms.txt`、`/docs/api/llms.txt`）；
- 当多个文件适用时，Agent 使用**最具体**（路径最深、最接近目标页面）的那一份；
- 若你的站点只控制某路径（如 GitHub Pages 项目站 `user.github.io/project/`），可在该路径下发布 `llms.txt`，无需碰主机根目录。

### 步骤 5：验证

按第 6 章执行：curl 检查可达性、`Link:` 头、Markdown 版；用官方 CLI / Python API 校验格式；用官方测试脚本向 Claude 提问实测。

---

## 6. 验证清单

### 6.1 可达性检查（curl）

```bash
# llms.txt 是否存在（期望 200）
curl -sI https://yourdomain.com/docs/llms.txt

# 看响应头中是否含 Link: rel=describedby / rel=alternate
curl -sI https://yourdomain.com/docs/page.html

# 页面 Markdown 版是否可达
curl -sI https://yourdomain.com/docs/page.html.md

# 看 Markdown 文件自身是否声明 describedby
curl -sI https://yourdomain.com/docs/page.html.md
```

HTTP 状态码判定：

| 状态 | 含义 | 处置 |
|---|---|---|
| 200 | 存在 | 继续验证内容 |
| 404 | 不存在 | 补建文件 |
| 403 | 存在但被拦截 | 视为配置错误，排查 WAF/CDN/权限 |
| 301/302 | 跳转 | 跟随跳转并记录，尽量消除重定向 |

### 6.2 官方 CLI 校验

```bash
pip install llms-txt

# 帮助
llms_txt2ctx -h

# 解析并转成 XML 上下文（LLM 友好），输出到 llms.md
llms_txt2ctx llms.txt > llms.md

# 追加 Optional 分区（默认不包含）
llms_txt2ctx --optional True llms.txt > llms.md
```

> 注：`llms_txt2ctx` 工具仍可用，但 v2 已将其从规范提案中移除；工具输出仅作检查/辅助用，`Optional` 分区不承载机械语义。

### 6.3 官方 Python API 校验格式契约

```python
from pathlib import Path
from llms_txt import parse_llms_file

parsed = parse_llms_file(Path('llms.txt').read_text())
assert set(parsed) == {'title', 'summary', 'info', 'sections'}   # 四键契约
assert parsed.title                                             # H1 必需
print(parsed.sections)                                          # 分区与条目结构
```

也可用 [2.6](#26-官方-python-解析器源码introhtml-原文) 的无依赖解析器 `parse_llms_txt(txt)` 直接自查。

### 6.4 官方推荐：向 LLM 实测（domains.html 教程脚本）

官方给出的 Claude 测试脚本（需 `uv`，脚本头自动安装依赖）：

```python
# /// script
# requires-python = ">=3.8"
# dependencies = [
#     "claudette",
#     "llms-txt",
#     "requests",
# ]
# ///
from claudette import *
from llms_txt import create_ctx

import requests

model = models[1] # Sonnet 3.5
chat = Chat(model, sp="""You are a helpful and concise assistant.""")

url = 'your_url/llms.txt'
text = requests.get(url).text
llm_ctx = create_ctx(text)
chat(llm_ctx + '\n\nThe above is necessary context for the conversation.')

while True:
    msg = input('Your question about the site: ')
    res = chat(msg)
    print('From Claude:', contents(res))
```

运行：`uv run test_llms_txt.py`（uv 自动隔离安装依赖）；或手动 `pip install claudette llms-txt requests` 后 `python test_llms_txt.py`。

测试方法原则（官方）：**只给 Agent 你的 llms.txt 作为起点**，看它能否准确回答关于你站点内容的问题。

### 6.5 第三方审计

- **Chrome Lighthouse「agentic browsing」类目**：含 llms.txt 审计项，作为 agentic browsing 检查之一（官方提及）。运行方式：浏览器 DevTools → Lighthouse，或 `npx lighthouse <url>`（具体类别 flag 以当前 Lighthouse 版本文档为准）。

---

## 7. 运维与常见错误排查

### 7.1 常见错误表

| # | 错误 | 判定方法 | 修复 |
|---|---|---|---|
| 1 | 缺少 H1 标题（唯一必需项） | `parse_llms_file()` 后 `title` 为空 | 首行写 `# 站点名` |
| 2 | 节序错乱（H2 前有别的标题） | 官方法则要求 H1 在首、正文区无标题、H2 在末 | 按第 2.2 节顺序重排 |
| 3 | 列表项缺少 `[名称](url)` 超链接 | 正则匹配不到 `-\s*\[...\]\(...\)` | 每项必须含链接 |
| 4 | URL 写错/失效 | curl 逐个验证 | 修正链接，删除死链 |
| 5 | 链接指向 HTML 而非 Markdown 版 | 比对第 3 章 URL 规则 | 改指向 `.md` 版本 |
| 6 | Markdown 版缺失 | curl `page.md` / `page.html.md` 返回 404 | 生成 MD 版或启用生成器 |
| 7 | 被 robots.txt 屏蔽 | 见 7.4 | 协调 AI 爬虫放行 |
| 8 | 页面无 `rel=alternate` / `rel=describedby` | curl -sI 看 `Link:` 头 / 检查 `<link>` | 见第 4 章 |
| 9 | 描述含行话/营销腔，含糊不清 | 人工审读 | 用简洁、具体语言重写 |
| 10 | 文件过大塞满上下文 | 统计行数/体积 | 只留入口，细节放链接背后 |

### 7.2 内容维护频率

- 站点有活跃内容更新（如每周发博文）→ 更新 llms.txt 的频率应跟上（如每月）；
- 产品/接口季度变化 → 每个版本发布后更新；
- Markdown 版与 HTML 版需**同步**（建议由构建流程自动生成，避免双份手工维护）。

### 7.3 安全与边界

- 不要列出内部工具、管理后台、含敏感信息的页面；
- llms.txt 是"公开导航"，任何可访问该 URL 的人都读得到，等同公开内容对待。

### 7.4 与 robots.txt 的协调

- robots.txt 控制"访问是否允许"，llms.txt 提供"按需取用的信息"；
- 若 `robots.txt` 对 AI 爬虫（如 GPTBot、ClaudeBot、Google-Extended 等）设置了 `Disallow` 的路径，恰好又列在 llms.txt 中，可能导致 Agent 无法取到内容；二者应保持一致；
- 已声明为"允许"内容时，llms.txt 可为该内容提供上下文（官方表述：complement）。

---

## 8. 社区实践（非官方）

> ⚠️ **本章内容不在官方 v2 规范（llmstxt.org）中**。以下为社区 / 第三方生态（含 SEO 工具链）的经验性扩展，**可选采用**。若追求严格合规，仅实施第 1–7 章即可。采用扩展时，请保持与官方格式不冲突（基础结构不变，仅增加分区 / 文件）。

### 8.1 `/llms-full.txt`（扩展版清单）

社区实践中，站点可额外提供 `/llms-full.txt`，承载比 `llms.txt` 更完整的内容清单。定位差异（社区经验值，非官方硬性规定）：

| 维度 | llms.txt（官方） | llms-full.txt（社区实践） |
|---|---|---|
| 长度 | 精简（几十行） | 详尽（上百行甚至更多） |
| 条目数 | 关键页面 | 大量 / 全量页面 |
| 描述 | 简短说明 | 更详细，可含每页要点 |
| 用途 | 快速理解站点 | 深度检索 / 大规模分析 |

配合方式（社区约定）：Agent 先读 `llms.txt`，需要更深细节时可再取 `llms-full.txt`。两者可共存。

> 注意：官方全站**未定义也未提及** `llms-full.txt`，其文件名、结构均无官方背书，采用与否属站点自主决定。

### 8.2 扩展分区（社区实践）

部分 SEO / 营销工具（如 Yoast、AIOSEO 等）会生成以下类型分区，**均非官方要求**：

- `## Key Facts`：成立年份、总部、客户规模、主营产品、行业分类等"可快速引用"的业务事实；
- `## Contact`：官网、邮箱、支持渠道、电话、地址等联系信息；
- 按业务划分的 `## Products`、`## Services`、`## About`、`## Legal` 等。

经验性建议（非官方）：

- 描述控制在有信息量但不冗长（社区常用 10–30 词区间）；
- 用绝对 URL（官方示例亦全部使用绝对 URL）；
- 条目按重要性排序，最权威内容靠前；
- 分区名尽量贴近站点主导航结构，便于 Agent 对照理解。

### 8.3 采用社区实践的注意事项

1. 不破坏官方文法：H1 仍为唯一必需节，任何扩展都只是"额外 H2 分区 / 额外文件"；
2. 若解析器 / 工具不认 `llms-full.txt`，它会被当作普通文件忽略，无兼容性问题（社区实践互不影响官方消费流程）；
3. 若追求目录站收录（见 9.7）或 Lighthouse 审计通过，**核心仍是官方 `/llms.txt` 本身**，扩展不是必要条件。

---

## 9. 生态工具与集成

### 9.1 官方工具（llms-txt 项目）

| 工具 | 说明 | 使用 |
|---|---|---|
| Python 模块 | 解析 llms.txt、生成 XML 上下文 | `pip install llms-txt`；`parse_llms_file()` / `create_ctx()` |
| Python CLI | `llms_txt2ctx` 转上下文 | `llms_txt2ctx llms.txt > llms.md`；`--optional True` |
| JavaScript 实现 | 浏览器内 llms.txt 解析器演示（官方页面） | 参考 https://llmstxt.org/llmstxt-js.html 源码 |

> 定位说明：官方规范 v2 已移除"上下文扩展工具"作为规范组成部分，工具页保留为 Code 资源；`Optional` 分区不再有机械语义。

### 9.2 自动生成 llms.txt 的文档平台 / CMS（官方 Integrations 列出）

| 平台 | 说明 |
|---|---|
| Mintlify | 为其托管站点自动生成 llms.txt 与 Markdown 页面版 |
| GitBook | 为已发布文档站点提供 llms.txt |
| Yoast SEO | WordPress 插件，生成并维护 llms.txt |
| AIOSEO | WordPress 插件，含 llms.txt 生成器 |
| Wix | 为每个 Wix 站点生成 llms.txt |

### 9.3 生成插件 / 库（官方列出）

| 项目 | 用途 |
|---|---|
| `vitepress-plugin-llms` | VitePress 插件，按规范自动生成 LLM 友好文档 |
| `docusaurus-plugin-llms` | Docusaurus 插件 |
| Drupal LLM Support | Drupal 10.3+ Recipe，完整支持本提案 |
| `llms-txt-php` | PHP 库，读写 llms.txt Markdown |
| `server-llm-txt` | MCP 服务器，让 Agent 获取并搜索 llms.txt 文件 |
| VS Code PagePilot | 自动加载外部上下文（文档/API/README）的 Chat 参与者 |

### 9.4 nbdev 集成（官方备注）

所有 nbdev 项目的页面默认生成 `.md` 版本；Answer.AI 与 fast.ai 全部 nbdev 软件项目的文档已启用此功能。示例：`https://fastcore.fast.ai/docments.html.md` 对应 `https://fastcore.fast.ai/docments.html`。

### 9.5 目录注册站（官方 Directories 列出）

以下目录收录网上公开的 llms.txt 文件，可用于被 Agent 生态发现：

- https://llmstxt.site/
- https://directory.llmstxt.cloud/
- https://llmstxthub.com/

### 9.6 社区与反馈渠道（官方 Next steps）

- 规范仓库（意见 / PR / 问题）：https://github.com/AnswerDotAI/llms-txt
- 提 issue：https://github.com/AnswerDotAI/llms-txt/issues/new
- 社区 Discord：https://discord.gg/aJPygMvPEN

### 9.7 官方站其他资源页（可对照学习）

- 规范 v2：https://llmstxt.org/
- 变更说明：https://llmstxt.org/changes.html
- Python 模块与 CLI：https://llmstxt.org/intro.html
- JavaScript 解析器：https://llmstxt.org/llmstxt-js.html
- 不同领域教程：https://llmstxt.org/domains.html
- nbdev 教程：https://llmstxt.org/nbdev.html

---

## 附录 A：参考资料

- 官方规范 v2（首页，含 Background / Proposal / Format / Existing standards / Example / Directories / Integrations / Next steps）：https://llmstxt.org/
- 官方变更说明 v1 → v2：https://llmstxt.org/changes.html
- 官方 Python 模块 & CLI：https://llmstxt.org/intro.html
- 官方 Python 源码：https://llmstxt.org/core.html
- 官方 JavaScript 解析器：https://llmstxt.org/llmstxt-js.html
- 官方教程：不同领域 https://llmstxt.org/domains.html ｜ nbdev https://llmstxt.org/nbdev.html
- 规范仓库：https://github.com/AnswerDotAI/llms-txt
- 目录站：llmstxt.site ｜ directory.llmstxt.cloud ｜ llmstxthub.com

## 附录 B：全文合规自检表

发布前逐项核对（均基于官方 v2）：

- [ ] 文件命名为 `llms.txt`，位于站点根或某个子路径（如 `/docs/llms.txt`）
- [ ] 首行（允许前置 BOM）为 `# 站点/项目名`（唯一必需项）
- [ ] 若有 blockquote 摘要，紧跟 H1 之后
- [ ] 若有正文信息，位于摘要之后、首个 H2 之前，且**不含标题**
- [ ] H2 分区位于最后；每区为一个 Markdown 列表
- [ ] 列表每项包含超链接 `[名称](url)`，描述 `: ...` 为可选
- [ ] 链接指向 LLM 友好内容（优先 Markdown 版页面）
- [ ] 需要的页面已提供 `page.md` / `page.html.md` / `index.md` / `index.html.md`
- [ ] 页面声明了 `rel="alternate" type="text/markdown"`（HTML `<link>` 或 HTTP `Link:` 头）
- [ ] 页面（含 Markdown 文件）声明了 `rel="describedby"` 指向覆盖它的 llms.txt
- [ ] 多文件并存时，理解了"最具体文件适用"规则并部署正确
- [ ] curl 验证：llms.txt 200、Markdown 版 200、Link 头存在
- [ ] 官方 CLI/API 验证通过（title/summary/info/sections 四键）
- [ ] 用官方脚本向 LLM 实测，仅以 llms.txt 为起点提问成功
- [ ] 与 robots.txt 协调，未屏蔽已列出的路径
- [ ] 未列入内部工具、管理后台、敏感页面
- [ ] （可选，社区实践）如采用 llms-full.txt / Key Facts / Contact 等，已与官方格式兼容且不影响官方消费流程
