AI 智能体访问你的网站时真正看到什么
你打开自己的首页,看到的是一套设计:导航栏、一张大图、三栏文字、一张价格表,还有一条几个月前就不再注意的 Cookie 提示。
智能体打开同一个网址,这些一样也看不见。它拿到的是一串字节,丢掉其中绝大部分,把剩下的交给一个上下文窗口有限的模型。熬过这段路程的东西,就是助手描述你公司时的全部依据。
几乎没人真去看过那是什么。所以我们做了测量。
测量
2026 年 8 月 31 日,我们把十二个知名页面送进自家引擎:像普通智能体那样抓取页面,抽取可读内容,转换成 Markdown,再用 cl100k_base 在两端数 token。
| 页面 | 发送 | 抵达模型 | 剩余 |
|---|---|---|---|
wordpress.org/about |
56,663 tok | 159 tok | 0.3% |
vercel.com/docs |
278,962 tok | 905 tok | 0.3% |
stripe.com/docs |
376,509 tok | 1,042 tok | 0.3% |
cloudflare.com/learning/… |
95,028 tok | 631 tok | 0.7% |
nodejs.org/en/about |
117,729 tok | 1,190 tok | 1.0% |
shopify.com/pricing |
410,515 tok | 2,479 tok | 0.6% |
notion.com/pricing |
172,136 tok | 2,805 tok | 1.6% |
slack.com/pricing |
294,980 tok | 5,718 tok | 1.9% |
developer.mozilla.org/…/HTTP |
59,350 tok | 3,059 tok | 5.2% |
react.dev/learn |
91,899 tok | 3,804 tok | 4.1% |
atlassian.com/software/jira/pricing |
379,636 tok | 1 tok | 0.0% |
agentready.md |
13,188 tok | 627 tok | 4.8% |
没有一个页面交付的内容超过它所发送的 6%。中位数不到 1%。
这算不上什么丑闻。那些字节大多在做真正的工作——排版、样式、统计、交互——为带着浏览器来的读者服务。我们要说的是更窄的一件事:这些全都在入口处付了钱,而其中几乎没有一样是智能体来找的东西。
你的页面会经历的四件事
从请求到模型,你的页面要过四道门。每一道都会掉下点什么。
1. 抓取。 智能体请求这个网址。多数智能体的抓取器不执行 JavaScript:慢、贵,还多一层攻击面。所以它拿到的是你服务器的原始响应,不是浏览器组装出来的页面。
2. 抽取。 总得有东西判断这段 HTML 里哪部分是正文,哪部分是家具。这和 Firefox 阅读模式解决的是同一个问题,用的也是大家都在用的那个库。导航、页脚、Cookie 提示和侧边栏进垃圾桶。抽取器分辨不出跟侧边栏有何不同的东西,也一起进去。
3. 转换。 剩下的变成文本。标题、列表、表格、链接和代码块作为结构保留下来。类名、包裹用的 <div>、内联 SVG 和 data- 属性则不会。
4. 上下文窗口。 走到这一步的内容,此刻要和用户的问题、系统提示,也许还有另外九个页面抢位置。
对助手来说,你的内容只有穿过这四道门才算存在。
顺利时是什么样子
vercel.com/docs 把 278,962 个 token 压到 905 个,这 905 个是这么开头的:
## Ship anything with Vercel
Deploy your app on Vercel in three steps: install the CLI, add agent
support if you need it…
这是对“Vercel 是做什么的”一个干净的回答。读到它的模型可以引用、可以概括、可以标注出处。掉掉的那 99.7% 没有拿走它想要的任何东西。
不顺利时是什么样子
atlassian.com/software/jira/pricing 发送 1.37 MB,交付 一个 token。
这个页面是个壳。HTML 里有 <div id="wac-root"></div>,后面跟着大约一兆字节的内嵌应用状态——价格、套餐名称、功能清单,全部以 JSON 的形式待在一个 <script> 里,等着 JavaScript 把页面搭出来。我们的抽取器老老实实地取出了 110 万个字符的 window.SSR_detailMetrics=Object.freeze({"getFeatureGateValues":…,而在剥掉脚本之后,剩下的是一个换行符。
也就是说:去问助手 Jira 多少钱,这个页面上没有任何东西能成为它答案的来源。不是因为 Atlassian 拦了谁——它没有——而是因为在浏览器运行它之前,这个页面里没有文字。
用无头浏览器抓同一个网址,得到的是 3,048 个 token,开头是 Transparent pricing for every team。内容是在的。只是不在响应里。智能体跑不跑浏览器,以及这要付出什么代价,就是全部差别。
stripe.com/docs 是同一形态更温和的版本:进去 1.28 MB,抽出来的内容是 1,057 个字符,开头是一条命令行示例,而不是一句关于 Stripe 是做什么的说明。
我们以为会找到、结果没有的东西
我们本以为这些站点里会有几个在边缘把智能体挡回去。于是每个都探测两次——一次作为普通浏览器,一次自称 OAI-SearchBot——然后比对。
十二个里没有一个区别对待机器人。 两次的状态码一样,跨越 Cloudflare、Vercel 和 CloudFront 都是如此。(cloudflare.com/learning 对我们两次探测都返回 403,那是一堵墙,但不是针对机器人的墙。)
拦截是人人都在谈的那种失败。在这个样本里它一次都没发生。发生的是更安静的事:门开着,屋子是空的。
看看你自己的页面
两条命令。你发送的量:
curl -s https://你的站点/页面 | wc -c
然后去读熬过抽取的那部分:把网址贴进检测工具,看 Markdown 面板,别看分数。要问的不是这个数字大不大,而是你正在读的这段文字,是不是你希望助手拿去引用来描述你的那段。
大多数人会惊讶两次:惊讶剩下的这么少,也惊讶留下来的竟是这几块。
简短版
- 智能体看到的是你的原始 HTML,通常不执行 JavaScript,并且只留下大约 1%。
- 如果你的内容靠 JavaScript 拼出来,这 1% 可能恰好等于零。
- 被拦截很少见。内容为空很常见。
- 解法不是少发标记,而是让文字确实出现在响应里。