---
title: "智能体就绪网站:我们的实践与关键要点 — Dardo"
description: "基于 dardo.studio 的搭建经验,解析智能体就绪网站所需:Markdown 副本、llms.txt、AI 爬虫规则、MCP 服务器、A2A 卡片,以及哪些可以跳过。"
url: "https://dardo.studio/zh-Hans/blog/agent-ready-website/"
language: "zh-Hans"
translations: {"en":"https://dardo.studio/en/blog/agent-ready-website/","es":"https://dardo.studio/es/blog/sitio-web-preparado-para-agentes-de-ia/","fr":"https://dardo.studio/fr/blog/site-web-pret-pour-agents-ia/","de":"https://dardo.studio/de/blog/agentenfaehige-website/","it":"https://dardo.studio/it/blog/sito-web-pronto-per-agenti-ai/","pt":"https://dardo.studio/pt/blog/site-pronto-para-agentes/","nl":"https://dardo.studio/nl/blog/agent-ready-website/","sv":"https://dardo.studio/sv/blogg/agentredo-webbplats/","pl":"https://dardo.studio/pl/blog/strona-gotowa-na-agentow-ai/","uk":"https://dardo.studio/uk/blog/agent-ready-website/","ru":"https://dardo.studio/ru/blog/agent-ready-website/","ar":"https://dardo.studio/ar/blog/agent-ready-website/","hi":"https://dardo.studio/hi/blog/agent-ready-website/","th":"https://dardo.studio/th/blog/agent-ready-website/","ja":"https://dardo.studio/ja/blog/agent-ready-website/","ko":"https://dardo.studio/ko/blog/agent-ready-website/","zh-Hant":"https://dardo.studio/zh-Hant/blog/agent-ready-website/"}
updated: "2026-10-10T09:13:03.716Z"
---

[博客](https://dardo.studio/zh-Hans/blog/)

# 适配 AI 智能体的网站需要什么:打造 dardo.studio 的心得

我们逐层改造 dardo.studio,让 AI 智能体既能读取,也能调用。本文介绍每一层的作用、目前哪些平台在文档中说明会读取它,以及哪些层我们还会再做一次。

作者: [Nicolás Cerón](https://dardo.studio/zh-Hans/studio/) ·2026年10月10日

![一台带轮子的小机器人在夜晚的美术馆展厅里,沿着一条深红色引导线驶向一件被灯光照亮的雕塑。](https://dardo.studio/_astro/01M4GYDFZJP0ZV0S7JSNMWYADG_ZoH0qp.webp)

## 简短回答

适配 AI 智能体的网站要做到三件事:AI 智能体能够访问它;能够直接读取内容,而不必穿过层层菜单、横幅和脚本;在合适的情况下,还能调用几个已声明的工具,而不是猜测该点哪个按钮。

2026 年 10 月初,我们在 dardo.studio 上把这三件事都做了。以下是我们上线的内容,以及主要 AI 平台在文档中说明使用其中哪些层的情况(已于 2026 年 10 月 8 日对照线上站点核实)。

结论没有大多数“AI 就绪”清单那么惊艳。最古老的层最重要:爬虫访问权限和干净的语义化 HTML。Markdown 副本和 llms.txt 只是成本很低的便利措施。MCP、A2A 和 WebMCP 都是真实的协议,也有可用的客户端,但在我们引用的 OpenAI、Anthropic、Perplexity 和 Google 的爬虫文档中,没有一份提到它们的助手会自行发现网站的工具。

## 先从访问开始:robots.txt 与边缘层

我们的 [robots.txt](https://dardo.studio/robots.txt) 为默认代理(`*`)以及我们点名的每个 AI 搜索爬虫和用户触发抓取器重复了同一组规则:

```
User-agent: OAI-SearchBot
Allow: /
Disallow: /api/
Content-Signal: search=yes, ai-input=yes
```

同样的规则也适用于 ChatGPT-User、PerplexityBot、Perplexity-User、Claude-SearchBot、Claude-User 和 Bingbot。只有 `/api/` 被禁止访问。

### 搜索爬虫与训练爬虫是分开的

各大公司现在都在文档中为搜索和训练分别提供了不同的标识:

- **OpenAI。**OAI-SearchBot 负责让网站出现在 ChatGPT 搜索中。屏蔽它的网站不会出现在 ChatGPT 搜索的回答里,不过仍可能以普通导航链接的形式出现。GPTBot 用于收集训练数据。([OpenAI 爬虫](https://developers.openai.com/api/docs/bots))
- **Anthropic。**Claude-SearchBot 为搜索建立索引,ClaudeBot 收集训练数据,Claude-User 则在用户向 Claude 提问时抓取网页。([Anthropic 爬虫](https://support.claude.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler))
- **Perplexity。**PerplexityBot 在 Perplexity 的结果中展示并链接网站,不用于训练基础模型。([Perplexity 爬虫](https://docs.perplexity.ai/docs/resources/perplexity-crawlers))
- **Google。**Google-Extended 是一个控制标识,用于 Gemini 的训练以及其他 Google 产品中的内容依据(grounding)。它不影响网站在 Google 搜索中的收录或排名。([Google 通用爬虫](https://developers.google.com/crawling/docs/crawlers-fetchers/google-common-crawlers))

用户触发的抓取器则不同。OpenAI 表示 robots.txt 可能不适用于 ChatGPT-User,因为这些请求由用户发起。Perplexity-User 和 Google 的[用户触发抓取器](https://developers.google.com/crawling/docs/crawlers-fetchers/google-user-triggered-fetchers)通常会忽略它。这类抓取器是实时替某一个人行事的;即使屏蔽生效,多半也只是阻止了这个人的助手读取你的页面。

我们的文件没有点名训练爬虫,所以它们归入 `*`,是被允许的。这是一项商业决策,各厂商也把它作为单独的控制项来说明:屏蔽 GPTBot 或 ClaudeBot,与退出它们的搜索索引并不是一回事。

### Content Signals:一行代码,没有任何承诺

`Content-Signal` 这一行来自 Cloudflare 的 [Content Signals Policy](https://blog.cloudflare.com/content-signals-policy/),其中列出三种用途:`search`、`ai-input`(在回答时把内容提供给模型)和 `ai-train`。我们省略了 `ai-train`,按照该政策,这既不表示允许,也不表示限制该用途。Cloudflare 表示,这些信号只表达偏好,不会阻止任何访问,也可能被忽略。这里引用的爬虫文档页面都没有提到它们。它只需要一行;但眼下不要抱有期待。

### 要检查边缘层,而不只是文件

robots.txt 只是声明一项策略,真正决定结果的是你的 CDN。10 月 2 日测试时,尽管 robots.txt 允许一切访问,Cloudflare 的浏览器完整性检查(Browser Integrity Check)仍对 Python 默认的 HTTP 客户端(`Python-urllib`)和 `libwww-perl` 返回了 403。编程智能体编写的脚本经常原样使用 Python 标准库。

我们添加了一条 Cloudflare 配置规则,对公开内容的 GET 和 HEAD 请求予以豁免;`/api/` 仍然返回 403。同一次检查还发现,我们的 `.txt` 文件没有指定字符集,导致一些客户端把“Bogotá”读成“BogotÃ¡”。修复只需一个响应头:`charset=utf-8`。

用各个 user agent 发送真实请求来测试。这能证明没有任何规则屏蔽这个名称,但不能证明真正的爬虫来访过。

## 朴素的语义化 HTML:所有智能体都依赖的一层

Google 的 [AI 优化指南](https://developers.google.com/search/docs/fundamentals/ai-optimization-guide)介绍了浏览器智能体:它们会分析截图、检查 DOM,并解读无障碍树。该指南引导网站所有者阅读 web.dev 的[智能体友好指南](https://web.dev/articles/ai-agent-site-ux),其内容大多属于[无障碍工作](https://dardo.studio/zh-Hans/services/web-accessibility/):使用 `<button>` 和 `<a>`,而不是加了样式的 `<div>`;让每个标签与对应的输入框关联;并避免页面布局在截图时发生位移。

在 dardo.studio 上,每个页面都只有一个 `<main>`,并带有设置了标签的 `<nav>` 地标。菜单和主题切换都是真正的按钮,通过 `aria-expanded` 和 `aria-pressed` 报告状态,关闭的菜单设置为 `inert`。联系表单的每个字段都放在自己的 `<label>` 内,从而拥有可访问的名称。web.dev 建议使用 `for` 属性;把输入框包在标签里,效果相同。

这对如今的屏幕阅读器用户就有帮助,仅此一点就足够了。

## 每个页面都有一份干净的 Markdown 副本

智能体每读一个 token 都要付费,而渲染后的页面包含导航、Cookie 横幅、脚本和装饰性图形。在这项工作之前,用 `Accept: text/markdown` 请求我们的页面,返回的仍是包含所有这些内容的 HTML。

现在,构建步骤会在每个可被索引的页面旁生成一个 `index.md`。文件开头是 front matter(标题、描述、规范网址、语言、另一语言版本和更新日期),然后是页面的 `<main>` 内容,不含脚本、按钮、装饰性图片和页内目录。常见问题的解答会保留。表单会转换为字段和选项的列表,这样智能体无需操作表单,就能告诉用户我们的联系表单会询问哪些内容。

获取这份副本有三种方式:

- 向常规网址发送 `Accept: text/markdown`。这类响应带有 `Vary: Accept`,因此缓存会将不同版本分开保存。
- 直接请求文件:`/en/services/seo/index.md`。
- 在页面路径后加上 `.md`(`/en/services/seo.md`)。对于以斜杠结尾的网址,[llms.txt 提案](https://llmstxt.org/)使用 `index.md`,即上文的形式。

每个 HTML 页面还会通过 `<link rel="alternate" type="text/markdown">` 指向它的副本。

### 让搜索引擎回到 HTML 页面

Google 的指南提到,除 HTML 之外,它也可以抓取和索引许多文件类型,并且不会特殊对待。Markdown 副本可能与其对应的页面互相竞争,因此每个 markdown 响应都会将 HTML 页面声明为规范版本:

```
$ curl -sI https://dardo.studio/en/services/seo/index.md
content-type: text/markdown; charset=utf-8
link: <https://dardo.studio/en/services/seo/>; rel="canonical", ...
```

谁会读取这些副本?Cloudflare 打造了 [Markdown for Agents](https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/),在边缘节点为偏好 markdown 的请求转换 HTML,这说明确实有智能体在请求。但它没有说明哪些客户端会发送该请求头,我们也没有经过验证的名单。如果你使用 Cloudflare 的这项功能,除非源站自行设置,否则它会添加 `Content-Signal: ai-train=yes, search=yes, ai-input=yes`。我们在构建时生成副本,使其与页面完全一致。

## llms.txt:实用的索引,但对搜索没有影响

llms.txt 是 [Jeremy Howard 的提案](https://llmstxt.org/),于 2024 年 9 月首次发布,目前仍在征集社区意见:它是位于 `/llms.txt` 的 markdown 文件,包含网站名称、简短摘要,以及智能体可能需要的链接列表。

我们的文件位于 [/llms.txt](https://dardo.studio/llms.txt) 和 [/es/llms.txt](https://dardo.studio/es/llms.txt),与页面使用同一份数据生成,因此不会出现内容偏差。它列出了工作室的基本情况(波哥大、2026 年成立、三人团队、项目如何定价、联系方式),列出服务和作品,并说明如何获取 markdown 副本。`llms-full.txt` 包含工作室、服务、作品和联系页面的完整文本。

其中有一行列出了与我们名称相似、但与我们无关的企业。我们在 10 月 2 日查看时,它们占据了“dardo studio”搜索结果的前列。这一行也许是整个文件中最有用的。

现状,直说如下:

- **Google** 表示,出现在搜索或其 AI 功能中并不需要 llms.txt,搜索会忽略它,有没有这个文件既无益也无害。
- **OpenAI、Anthropic 和 Perplexity** 在爬虫文档中并未说明其机器人会读取其他网站的 llms.txt。不过,OpenAI、Anthropic 和 Perplexity 自己的文档网站确实发布了 llms.txt,供读取其文档的智能体使用。

如果文件是自动生成且内容准确,不妨保留。它对编程智能体和会查找它的工具有帮助,但不是提升可见度的手段。

## 智能体可调用的工具:MCP、A2A 和 API 目录

我们发布了两个只读工具:

- `**list_services**` 以英文或西班牙文返回我们已发布的服务、范围、交付内容和来源网址,可通过可选关键词筛选。
- `**get_project_brief**` 返回联系我们之前需要回答的问题,以及该服务对应语言的联系链接。

多个入口背后是同一套实现:

| 入口      | dardo.studio 上的地址                           | 标准与状态                                                                                                                                                                                 |
| ------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| MCP 服务器 | /mcp,卡片位于 /.well-known/mcp/server-card.json | [MCP](https://modelcontextprotocol.io/specification/2025-11-25/basic/transports) Streamable HTTP;服务器卡片是一份[草案提案](https://modelcontextprotocol.io/community/working-groups/server-card) |
| A2A 智能体 | /a2a,卡片位于 /.well-known/agent-card.json      | [A2A 1.0](https://a2a-protocol.org/latest/specification/),JSON-RPC                                                                                                                    |
| JSON 端点 | /agent/services.json,以 OpenAPI 描述           | 普通 HTTP                                                                                                                                                                               |
| API 目录  | /.well-known/api-catalog                    | [RFC 9727](https://www.rfc-editor.org/rfc/rfc9727.html),IETF 标准轨道                                                                                                                     |

每个 HTML 和 markdown 响应都会发送一个 `Link` 头,指向该目录、智能体技能索引以及两张卡片,因此从任何页面都能找到其余内容。

### 我们愿意重复采用的设计原则

- **只读且公开。**MCP 工具声明了 `readOnlyHint: true`,读取的是与 HTML 相同的已发布目录,背后没有数据库。`get_project_brief` 不会提交、预约或报价;由人来审阅并发送。
- **限定输入。**请求正文上限为 8 KiB,会检查浏览器的 `Origin` 头(MCP 规范要求如此),调用还有单独的速率限制。
- **无状态。**A2A 智能体即时作答,不保留任务,关闭了流式传输,也不会获取发送给它的文件或网址。
- **条款清晰。**[/auth.md](https://dardo.studio/auth.md) 说明无需任何凭据,并且读取公开数据并不代表获得授权去发送消息或付款。

我们也有所取舍。就绪度扫描工具会检查商务协议和 OAuth 发现。我们不通过结账流程销售任何东西,也不保护任何资源,所以发布这些内容只会描述并不存在的能力。

目前谁在使用这些工具:有人连接到 `/mcp` 的 MCP 客户端,以及拿到我们卡片的 A2A 客户端。对一家工作室来说,价值有限:对“Dardo 做什么,我该发给他们什么?”给出准确的回答。对于拥有人们会询问的实时数据的网站,例如库存、可用情况或产品文档,这种做法更有价值。会写入数据的智能体需要身份验证和审核环节,那属于 [AI 自动化](https://dardo.studio/zh-Hans/services/ai-automation/)的工作。

## WebMCP:浏览器内的同一套工具

[WebMCP](https://webmachinelearning.github.io/webmcp/) 允许页面注册工具,供浏览器中的 AI 智能体调用。它是 W3C Web Machine Learning 社区组的社区组报告草案,并声明它不是 W3C 标准。web.dev 表示它正处于积极开发中,可能会变化,可以在 Chrome 中通过源试用(origin trial)进行体验。

我们的页面通过 `document.modelContext`(旧版预览中为 `navigator.modelContext`)注册同样的两个工具。没有这个 API,浏览器不会额外运行任何内容。由于这些工具本来就存在,这部分只用了大约 40 行代码。请把它当作一次实验。

## 每一层,以及它是否值得做

| 层级                       | 是什么                                          | 目前谁在读取                                         | 值得做吗?                   |
| ------------------------ | -------------------------------------------- | ---------------------------------------------- | ----------------------- |
| 语义化 HTML 与带标签的表单         | 真正的按钮、链接、页面地标和标签                             | 浏览器、辅助技术和浏览器智能体                                | 值得。优先做好                 |
| 面向搜索和用户代理的 robots.txt    | 按爬虫分别设置规则,区分搜索与训练                            | OpenAI、Anthropic、Perplexity 和 Google 都公开了各自的标识 | 值得。然后在 CDN 层测试          |
| Content Signals          | 在 robots.txt 中设置 search、ai-input、ai-train 偏好 | 我们查证过的 AI 公司,都没有公开说明会遵守                        | 只需一行。但别抱期望              |
| 带规范标头的 Markdown 副本       | 每个页面的干净纯文本版本                                 | 会请求 Markdown 的智能体;没有公开的名单说明具体是哪些               | 值得,但要加上规范标头             |
| llms.txt 和 llms-full.txt | 为智能体准备的精选索引和完整文本                             | Google 搜索会忽略它;没有爬虫文档声称会读取它                     | 如果是自动生成的就保留。它不是提升可见度的手段 |
| MCP 服务器(只读)              | 声明好、可供智能体调用的工具                               | 由用户自行连接的 MCP 客户端                               | 仅当有值得调用的数据或操作时          |
| A2A 智能体卡片                | 对智能体的机器可读描述                                  | 指向它的 A2A 客户端                                   | 对大多数网站来说只是推测            |
| API 目录(RFC 9727)         | 一份集中列出你的公开 API 的 well-known 清单               | 会查找它的工具                                        | 如果已有 API,成本很低           |
| WebMCP                   | 页面在浏览器中注册的工具                                 | Chrome,通过 origin trial                         | 实验性                     |

## 我们还会再做的事

按顺序:语义化 HTML、经过测试的爬虫访问、带规范标头的 Markdown 副本、自动生成的 llms.txt,以及只在有值得调用的内容时才提供工具。然后进行衡量。服务器日志会显示哪些智能体抓取了 Markdown 副本或调用了 `/mcp`。抓取不等于引用,以上这些都不能保证[AI 系统会提到你](https://dardo.studio/zh-Hans/blog/appear-in-ai-answers/)。

智能体就绪是我们[AI 搜索优化](https://dardo.studio/zh-Hans/services/ai-search-optimization/)工作的一部分,同时还包括决定 AI 回答是否引用你的内容与衡量工作。想把它融入你的网站,请[告诉我们你的项目](https://dardo.studio/zh-Hans/contact/)。

[Nicolás Cerón](https://dardo.studio/zh-Hans/studio/)

Nicolás Cerón是Dardo的创始人,Dardo是一家位于哥伦比亚波哥大的品牌、网页设计与开发工作室。

## 继续探索。

- [服务 · **AI 搜索优化(GEO):让 ChatGPT 和 Google AI 引用你的品牌**](https://dardo.studio/zh-Hans/services/ai-search-optimization/)

- [你的项目 · **开始沟通**](https://dardo.studio/zh-Hans/contact/)
