关闭

Tryaivo™技术

9天日志打脸:llms.txt只有编码代理在读

2026-11-09 02:55:41 浏览:

背景:争"有没有用",不如先看日志里谁伸手

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/200text/html40,967
同 URL 带 Accept: text/markdown200text/markdown; charset=utf-816,428
直接取 /2026/09/23/agent-data-seeking-patterns/index.md200text/markdown; charset=utf-816,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%
自动化工具伪装成浏览器 UA25%
伪装浏览器但从不加载资源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 与站点审计 bot37从不
两个扫描器(轮换 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)106 个会话里 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.txt4PoweredByBot、curl否
ai.txt22SEOJuice、PipericBot、PoweredByBot否
.well-known/agent-card.json、agents.json、agent.json、mcp、server-card.json12AgentTrustBot、curl否
.well-known/tdmrep.json5NVBot、一个 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.txt 200 / text/plain; charset=utf-8 / 51,896 字节 / 317 行;/llms-full.txt 404;文章页 HTML 40,967 字节、Accept: text/markdown 与 index.md 均 16,428 字节;页面内 directive 存在、head 内 alternate/describedby 为 0。本机只复检文件与协商行为,未复现流量结论。