背景:争"有没有用",不如先看日志里谁伸手
llms.txt 的争论每几个月发作一次:某个知名项目加了一个,或者删了一个,评论区就分成"AI 可见度必备"和"纯自嗨"两派。技术博客作者 Dachary Carey 在 2026 年 9 月做了一件更笨也更可靠的事——把自己站点上的访问日志重新分类,看代理到底伸手要什么。
他的动机来自两个巧合:一是当时关于 llms.txt 是否有效的争论又起;二是同事提到"答案引擎和爬虫在抓我们站的 llms-info 文件",而他自己的日志里从来没出现过这个请求。既然两边说法互相矛盾,唯一能当裁判的就是日志。
他在 4 月就上线了一套代理流量分类器(agent traffic classifier)和信号记录器(signal tracker),5 个月没校准,这次一并修了自己分类器里的误判,然后取 9 月 11 日至 19 日共 9 天、12 个站的日志重新跑了一遍。这 12 个站多数主题就是代理、代理友好文档、代理工具,所以样本偏向"技术内容站",不是全网随机抽样。
落地清单:四件事决定代理读不读得动
1)文件位置与路由
/llms.txt放根目录,直出纯文本,响应头text/plain; charset=utf-8,不走框架路由、不经过会回退成index.html的 CDN 规则。2026-11-09 本机复检:51,896 字节、317 行、HTTP 200。- 不提供
llms-full.txt。本机实测https://dacharycarey.com/llms-full.txt返回 404——这是有意的取舍:他就是不想维护一份会过期的全文副本,全文交给"每页的 Markdown 兄弟文件"。 - 所有链接指向
.../index.md(Markdown 源),而不是渲染后的 HTML 页面。这是整件事的关键,下面的数据会证明。
2)llms.txt 原文片段(2026-11-09 本机抓取,节选未改字段)
# Dachary Carey
> Tools, apps, and strong opinions about coffee.
## Pages
- [About](https://dacharycarey.com/about/index.md)
- [AI & Agent Research](https://dacharycarey.com/ai-research/index.md)
- [Documentation & Developer Education](https://dacharycarey.com/documentation/index.md)
- [Programming](https://dacharycarey.com/programming/index.md)
- [Resume](https://dacharycarey.com/resume/index.md)
## Posts
- [What Changed in Agent Traffic?](https://dacharycarey.com/2026/10/18/what-changed-in-agent-traffic/index.md): In which I explore changes in agent traffic from April to October.
- [Agent Data Seeking Patterns](https://dacharycarey.com/2026/09/23/agent-data-seeking-patterns/index.md): In which I examine agent website traffic logs to see what they're actually reaching for.
- [What "Just Prompting" Looks Like](https://dacharycarey.com/2026/09/20/what-just-prompting-looks-like/index.md): In which I have Claude audit my own prompts to find out what "just prompting" means, and which parts of it anyone can copy.
结构上只有四类元素:H1 站名、blockquote 摘要、H2 分节、链接列表,每条链接后面跟一句摘要。没有自定义元数据字段,没有 JSON 头,没有版本号声明——和 llmstxt.org 提案的骨架一致。
3)每页 .md + 内容协商(真正被用的那条路)
同一篇文章页,两种取法,本机 2026-11-09 实测:
| 请求方式 | 状态码 | Content-Type | 字节数 |
|---|---|---|---|
普通访问 /2026/09/23/agent-data-seeking-patterns/ | 200 | text/html | 40,967 |
同 URL 带 Accept: text/markdown | 200 | text/markdown; charset=utf-8 | 16,428 |
直接取 /2026/09/23/agent-data-seeking-patterns/index.md | 200 | text/markdown; charset=utf-8 | 16,428 |
同一个 URL 靠请求头切换表示,返回体比 HTML 小 59.9%,且与 .md 路径的字节数完全一致。这一条不依赖任何发现类文件,不需要 llms.txt,不需要 well-known 路径——代理只要会发 Accept 头,就能拿到能读的内容。
4)页面内指路 + 测量侧记录
站点没在 <head> 里挂 <link rel="alternate" type="text/markdown"> 或 rel="describedby"(本机实测该页 head 内 0 处,属 llms.txt v2 修订后流行的那套写法,这里没采用)。它用的是更原始的一招:页面正文里直接写一句给代理看的话——
For AI agents: a documentation index is available at /llms.txt — markdown
versions of all pages are available by appending index.md to any URL path.
测量侧同样关键:他在每个站放了一个小的 PHP shim,只在三种情况触发全量请求头记录——请求协商 Markdown、直接取 .md URL、取 /llms.txt。9 天下来产生约 1,240 条信号记录,这些记录才是"代理会话"的证据,普通访问日志只能看到有人抓了页面。
结果:9 天 12 站 72,600 请求的分布
流量分类(作者重新校准分类器后,仅列主体行):
| 类别 | 请求占比 |
|---|---|
| 真实浏览器(加载资源、站内跳转) | 23% |
| 自动化工具伪装成浏览器 UA | 25% |
| 伪装浏览器但从不加载资源 | 10% |
| 未收录的 bot(isbot 兜底) | 10% |
| AI 训练爬虫 | 7% |
| AI 助手代用户抓取 | 5% |
| Feed 阅读器、社交预览、搜索爬虫、SEO 工具 | 15% |
| 自称身份的编码代理 | 0.6% |
一个细节值得记:初版分类里"人类浏览器"占 58%,校准后掉到 23%。其中最大一块是一个分布式爬虫——约 9,000 次请求来自近 1,000 个 IP(多在腾讯云地址段),用冻结的 30 个 2024 年初浏览器 UA,Firefox/Safari 的伪装却发 Chromium 客户端提示,全天匀速请求,几乎从不加载样式表或图片。如果不把这些剔掉,任何"人类访客"结论都是假的。
llms.txt 的 198 次请求,按请求方拆开:
| 请求方 | 次数 | 之后是否读了里面的链接页 |
|---|---|---|
| 他自建的测试与工具 | 61 | 按设计读 |
| 伪装浏览器的分布式爬虫(头部自相矛盾) | 34 | 不读 |
| 访客浏览器内的页内请求(扩展或浏览器内代理) | 12 | 不读 |
| 可能是真人浏览器 | 2~5 | 不读 |
| SEO 与站点审计 bot | 37 | 从不 |
| 两个扫描器(轮换 UA / 云主机探 well-known) | 19 | 不读 |
| AI 训练爬虫(Amazonbot、Bytespider、ClaudeBot、GPTBot、SSI) | 14 | 从不 |
| 某大学研究爬虫 | 6 | 各读一页 |
| AI 搜索(Exa) | 2 | 不读 |
| AI 助手与答案引擎 | 0 | — |
| 编码代理(GitHub Copilot、Claude Code,含 Claude Code 转 shell 调 curl) | 10 | 6 个会话里 5 个读了 |
"目标读者"一行全零,具体到厂商:Amazon Quick 跑了 3,223 次请求、0 次取 llms.txt;OAI-SearchBot 0/632;ChatGPT-User 0/404;PerplexityBot 0/403;Claude-User 0/141;DuckAssistBot 0/116。Meta、Google、Mistral、xAI 的抓取器同样是零。训练爬虫碰到它的频率跟碰到任何别的 URL 一样(ClaudeBot:1,319 次里 1 次),碰到之后也没有后续动作。
真正把它当目录用的两个会话值得抄下来:
- Claude Code 找 afdocs.dev 的 CLI 文档,先猜
/cli→ 404,再猜/docs/cli-reference→ 404,然后抓首页、抓 llms.txt,最后只取清单里的两页:/reference/cli.md和/run-locally.md。猜路失败 → 找到地图 → 用地图。 - GitHub Copilot 的 fetch runtime 在同一站点三次会话,每次都是先取 llms.txt,再拉 19 到 26 个链接的 Markdown 文件。
对照另一组数据更说明问题:内容协商(Accept: text/markdown)9 天产生 500 多条信号,直接取 .md 465 条(还被按 IP 限流低估了)。这两类加起来,约是所有发现类文件请求总和的 5 倍。代理不问"你有没有给我准备文件",它只问"你能不能给我能读的格式"。
其他发现类文件的处境更直接——全部 404,因为作者根本没做;请求方全是审计工具和扫描器:
| 文件 | 请求数 | 谁在要 | 是否来自代理或 AI 厂商 |
|---|---|---|---|
| llms-info(任何拼写、任何位置) | 0 | 无人 | 否 |
| llms-full.txt | 4 | PoweredByBot、curl | 否 |
| ai.txt | 22 | SEOJuice、PipericBot、PoweredByBot | 否 |
| .well-known/agent-card.json、agents.json、agent.json、mcp、server-card.json | 12 | AgentTrustBot、curl | 否 |
| .well-known/tdmrep.json | 5 | NVBot、一个 PostHog 图片 bot | 否 |
顺带一个反例:Cursor 只有在被明确要求时才取 llms.txt,放任它自己探索站点时,它去抓的是 sitemap.xml。
复盘:3 条可直接抄的配置
- 把"每页 Markdown + 内容协商"当默认输出。 同一个 URL,
Accept: text/markdown返回 Markdown 源,.md路径同样可用,返回体比 HTML 少约六成。这是代理无人指路时唯一稳定在做的动作,成本也最低。 - llms.txt 留着,但必须在页面里指路。 文件本身几乎免费,代价是维护;决定它有没有用的不是文件里的内容,而是页面上那句"索引在 /llms.txt"。日志证明:编码代理是撞到首页那句话才去找文件的,不是天生就会去探根目录。
- 衡量会话,不要衡量 PV。 有意义的指标是"取完 llms.txt 之后有没有继续取里面的链接页,谁取的"。198 次请求里真正有价值的信息是"6 个会话,5 个读了链接页",而不是那个 198。
踩坑提醒 2 条
- 别拿"有人来取"当趋势证据。 AgentTrustBot 的 UA 里明写
purpose=AI Agent Discovery,在一个个没有任何 agent 卡的站点上系统地探 5 条 well-known 路径;llms-info 的 0 次请求也是同一逻辑的反面——同事看到的"流量",大概率是自己把路径写进了 llms.txt、robots.txt、sitemap 或某篇文章后被爬虫顺着链接抓的。要证据,先要 UA 和 referrer。 - 样本小,别把结论放大。 6 个编码代理会话来自 4 个开发者、9 天、2 个站,作者自己把它定性为 anecdata(轶事数据)。能支持的结论是"编码代理发现 llms.txt 就会用",不支持"编码代理会主动找 llms.txt"。
标注
- llms.txt 形态:v1 链接清单(llmstxt.org 提案结构:H1 + blockquote 摘要 + H2 分节 + 链接列表),未采用 v2 修订里的
<link rel="alternate" type="text/markdown">/rel="describedby"页面级写法(本机实测 head 内 0 处)。 - 规范状态:提案与作者主张,LLM 厂商未官方确认;本文不对 llms.txt 的"有效性"下结论,只复述日志事实。
- 来源:https://dacharycarey.com/2026/09/23/agent-data-seeking-patterns/ (2026-09-23 发布),日志窗口 2026-09-11 至 2026-09-19。
- 数据口径:流量分类、请求计数、会话数均为作者自述的站内日志统计(12 个站、约 72,600 条请求、约 1,240 条信号记录),非第三方复现,样本偏向代理/文档类技术站。
- 本机复检(2026-11-09):
/llms.txt200 / text/plain; charset=utf-8 / 51,896 字节 / 317 行;/llms-full.txt404;文章页 HTML 40,967 字节、Accept: text/markdown与index.md均 16,428 字节;页面内 directive 存在、head 内 alternate/describedby 为 0。本机只复检文件与协商行为,未复现流量结论。