AI 代理实际是如何浏览网页的
假设带来的问题
大多数网站优化都假设:访问者通过 HTTP 获取你的页面、看到响应头、跟随重定向并渲染 HTML。AI 代理打破了这些假设中的每一条。
ChatGPT
ChatGPT 的浏览工具通过 HTTP 实时获取页面,但模型从来看不到原始响应:
- 仅文本提取 —— HTML 在到达模型之前会被剥离为约 4096 token 的纯文本
- 没有 HTTP 头 —— 模型不会知道 Content-Type、状态码或重定向
- SearchGPT 中间层 —— 一个二级模型在内容到达主模型之前会先检查 prompt injection
- Agent Mode 使用伪装的 Chrome UA(
Chrome/138.0.0.0),通过 RFC 9421 的密码学签名进行身份验证,而不是 User-Agent
这意味着什么: 内容协商在背后会默默生效(由工具层处理),但模型只能看到提取后的文本。提供干净、结构化的文本,你的内容对 ChatGPT 才会更有用。
Perplexity
Perplexity 使用多阶段的检索流水线:
- 隐身爬虫 —— 每天 300-600 万次请求,使用通用 Chrome UA 和轮换 IP,不是
PerplexityBot - 混合排序 —— BM25 关键词匹配 + 向量相似度,找出相关段落
- 原子片段检索 —— 抽取特定文本片段而非整个页面
- 独立索引 —— 在网页搜索结果之外维护自己抓取的索引
这意味着什么: 你针对 PerplexityBot 的 robots.txt 规则可能无法阻止它们的隐身爬虫。带有清晰标题的结构化内容有助于其片段抽取找到正确段落。
Gemini
Gemini 最常见的浏览模式根本不会访问你的服务器:
- 基于索引 ——
url_context从 Google 内部索引读取,不是实时 HTTP。测试时服务器日志中没有出现任何请求 - 基于截图 —— Project Mariner 会以视觉方式渲染页面,处理需要视觉的任务
- 拒绝 markdown —— Gemini CLI 在早期测试中拒绝了
Accept: text/markdown响应
这意味着什么: 你的网站需要被 Googlebot 索引,Gemini 才能看到它。在你的 HTML 中添加 <link rel="alternate" href="/llms.txt"> 可以确保 Google 索引到 llms.txt 关系。JSON-LD 结构化数据也能在索引流水线中保留下来。
该怎么做
| 操作 | 适用于 |
|---|---|
提供包含干净 markdown 的 llms.txt | ChatGPT、Perplexity |
添加 <link rel="alternate" href="/llms.txt"> | Gemini(通过 Google 索引) |
| 添加 JSON-LD 结构化数据 | Gemini(通过 Google 索引) |
不要在 robots.txt 中屏蔽 Google-Extended | Gemini |
| 使用 RFC 9421 签名进行 bot 认证 | ChatGPT Agent Mode 验证 |
| 提供带清晰标题的结构化内容 | Perplexity 片段抽取 |
了解更多
- Dejan.ai:Google 的 URL Context 工具
- Dejan.ai:AI Mode 不是实时网络
- Cloudflare:Perplexity 隐身爬虫
- SeatGeek:Chasing Signature