## 假设带来的问题

大多数网站优化都假设：访问者通过 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](/kb/zh/llms-txt) 关系。JSON-LD 结构化数据也能在索引流水线中保留下来。

## 该怎么做

| 操作 | 适用于 |
|--------|------------|
| 提供包含干净 markdown 的 `llms.txt` | ChatGPT、Perplexity |
| 添加 `<link rel="alternate" href="/llms.txt">` | Gemini（通过 Google 索引） |
| 添加 JSON-LD 结构化数据 | Gemini（通过 Google 索引） |
| 不要在 [robots.txt](/kb/zh/robots-txt) 中屏蔽 `Google-Extended` | Gemini |
| 使用 RFC 9421 签名进行 bot 认证 | ChatGPT Agent Mode 验证 |
| 提供带清晰标题的结构化内容 | Perplexity 片段抽取 |

## 了解更多

- [Dejan.ai：Google 的 URL Context 工具](https://dejan.ai/blog/googles-new-url-context-tool/)
- [Dejan.ai：AI Mode 不是实时网络](https://dejan.ai/blog/ai-mode-is-not-live-web/)
- [Cloudflare：Perplexity 隐身爬虫](https://blog.cloudflare.com/perplexity-is-using-stealth-undeclared-crawlers-to-evade-website-no-crawl-directives/)
- [SeatGeek：Chasing Signature](https://chairnerd.seatgeek.com/chasing-signature/)

## 相关

- [SKILL.md](/kb/zh/skills)
- [OpenAPI](/kb/zh/openapi)
- [A2A](/kb/zh/a2a)
- [WebMCP](/kb/zh/webmcp)
