---
title: "適合 AI 代理的網站:我們的做法與重點','max':60},{ — Dardo"
description: "從打造 dardo.studio 的經驗談起,AI 代理友善網站需要哪些條件:Markdown 副本、llms.txt、AI 爬蟲規則、MCP 伺服器、A2A 卡片,以及哪些可以省略。"
url: "https://dardo.studio/zh-Hant/blog/agent-ready-website/"
language: "zh-Hant"
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-Hans":"https://dardo.studio/zh-Hans/blog/agent-ready-website/"}
updated: "2026-10-10T09:13:50.519Z"
---

[部落格](https://dardo.studio/zh-Hant/blog/)

# 支援 AI 代理的網站需要什麼:打造 dardo.studio 的心得筆記

我們一層一層地讓 dardo.studio 能被 AI 代理讀取與呼叫。本文說明每一層的作用、目前有哪些平台在文件中說明會讀取,以及哪些層我們會再做一次。

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

![一台小型輪式機器人在夜晚的美術館展廳裡,沿著一條深紅色導引線,朝一座被燈光照亮的雕塑前進。](https://dardo.studio/_astro/01M4GYDFZJP0ZV0S7JSNMWYADG_ZoH0qp.webp)

## 簡短回答

支援 AI 代理的網站要做到三件事。第一,AI 代理能夠連上網站。第二,它們不必穿過選單、橫幅和腳本,就能讀懂內容。第三,在合適的情況下,它們可以呼叫幾個已公開宣告的工具,而不必猜該按哪個按鈕。

我們在 2026 年 10 月初把這三件事都做進了 dardo.studio。以下是我們上線的內容,以及主要 AI 平台在文件中說明會使用其中多少項目;這些都已在 2026 年 10 月 8 日對照正式上線的網站查證過。

結論比多數「AI-ready」檢查清單來得平淡。最老的幾層最重要:爬蟲存取,以及乾淨、語意化的 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 日測試時,Cloudflare 的 Browser Integrity Check 對 Python 預設的 HTTP 用戶端(`Python-urllib`)和 `libwww-perl` 回應了 403,但 robots.txt 明明允許一切。由程式碼代理寫出的腳本,常常直接使用 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,並解讀無障礙樹(accessibility tree)。指南引導網站經營者參考 web.dev 的[代理友善指引](https://web.dev/articles/ai-agent-site-ux),而其內容大多屬於[無障礙工作](https://dardo.studio/zh-Hant/services/web-accessibility/):使用 `<button>` 和 `<a>`,而不是套上樣式的 `<div>`;讓每個標籤都連結到對應的輸入欄位;並避免版面在截圖時發生位移。

在 dardo.studio 上,每個頁面都只有一個 `<main>`,以及附有標示的 `<nav>` 地標。選單和佈景主題切換是真正的按鈕,會透過 `aria-expanded` 和 `aria-pressed` 回報狀態,而收合的選單則設為 `inert`。聯絡表單的每個欄位都放在自己的 `<label>` 裡,因此都有可存取的名稱。web.dev 建議使用 `for` 屬性;把 input 包起來也能達到同樣的效果。

這對現在的螢幕閱讀器使用者就有幫助,光憑這點就已足夠。

## 為每個頁面提供乾淨的 Markdown 副本

代理每讀一個 token 都要付費,而渲染後的頁面包含導覽列、Cookie 橫幅、腳本和裝飾性圖形。在這項工作之前,用 `Accept: text/markdown` 請求我們的頁面,回傳的仍是包含上述所有內容的 HTML。

現在,建置流程會在每個可被索引的頁面旁產生一份 `index.md`。檔案開頭是 front matter(標題、描述、標準網址、語言、另一語言版本與更新日期),接著是該頁面的 `<main>` 內容,不含腳本、按鈕、裝飾性圖片,也不含頁內目錄。常見問題的解答會保留。表單會轉為欄位與選項的清單,讓 AI 代理不必實際操作表單,就能告訴使用者我們的聯絡表單需要填寫哪些內容。

取得這份副本的方式有三種:

- 對一般網址送出 `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 之外,Google 也能抓取並索引許多檔案類型,且不會特別區別對待。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 並未說明哪些用戶端會送出這個標頭,我們也沒有經過驗證的名單。如果你使用 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-Hant/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 公司,沒有一家文件說明會遵守                        | 只要一行,但別抱期待             |
| 附有 canonical 標頭的 Markdown 副本 | 每個頁面的純文字乾淨版本                                 | 會請求 Markdown 的代理;目前沒有公開名單說明是哪些                 | 值得,但要搭配 canonical 標頭   |
| llms.txt 與 llms-full.txt     | 為代理整理的精選索引與完整文字                              | Google 搜尋會忽略它;沒有任何爬蟲文件聲明會讀取                    | 若是自動產生就留著,但它不是提升能見度的手段 |
| MCP 伺服器(唯讀)                  | 宣告好、可供代理呼叫的工具                                | 由使用者連接的 MCP 用戶端                                | 僅在有值得呼叫的資料或操作時         |
| A2A agent card               | 以機器可讀格式描述一個代理                                | 指向它的 A2A 用戶端                                   | 對多數網站而言屬於推測性質          |
| API 目錄(RFC 9727)             | 一份列出公開 API 的 well-known 清單                   | 會去尋找它的工具                                       | 若已有 API,成本很低           |
| WebMCP                       | 頁面在瀏覽器中註冊的工具                                 | Chrome,透過 origin trial                         | 實驗性質                   |

## 我們會再做一次的項目

依序是:語意化 HTML、經過測試的爬蟲存取、附有 canonical 標頭的 Markdown 副本、自動產生的 llms.txt,以及只在有值得呼叫的內容時才提供工具。接著進行衡量。伺服器記錄會顯示哪些代理擷取了 Markdown 副本或呼叫了 `/mcp`。擷取不等於引用,以上這些也都無法保證[AI 系統會提到你](https://dardo.studio/zh-Hant/blog/appear-in-ai-answers/)。

代理就緒是我們[AI 搜尋最佳化](https://dardo.studio/zh-Hant/services/ai-search-optimization/)服務的一環,同時還包括決定 AI 回答是否引用你的內容與成效衡量。若想把它建置到你的網站中,[歡迎和我們聊聊你的專案](https://dardo.studio/zh-Hant/contact/)。

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

Nicolás Cerón 是 Dardo 的創辦人。Dardo 是一間位於哥倫比亞波哥大的品牌、網頁設計與開發工作室。

## 繼續探索。

- [服務 · **AI 搜尋最佳化(GEO):讓 ChatGPT 與 Google AI 引用你的品牌**](https://dardo.studio/zh-Hant/services/ai-search-optimization/)

- [您的專案 · **開始聊聊**](https://dardo.studio/zh-Hant/contact/)
