← 所有文章

Agents.txt不是存取控制

DreamHost現在的文件說明:如果網站沒有提供自訂版本,Web Hosting方案會自動包含預設的robots.txtagents.txt檔案。1

這個小小的主機代管細節,指向一個更大的轉變。網站現在至少同時面向3種對象:搜尋爬蟲、AI爬蟲,以及在推論時尋找清楚脈絡的助理。檔名讓這個轉變看起來井然有序。robots.txt說明自動化用戶端可以爬取什麼。llms.txt為LLM提供策展過的地圖。agents.txt則暗示面向代理程式的政策。但這些檔案都不該讓營運者誤以為自己已受到保護。

Agents.txt不是存取控制。請把爬蟲檔案視為公開的政策提示與探索輔助。真正的控制仍來自伺服器端授權、機器人身分驗證、速率限制、日誌、快取行為,以及您關心的爬蟲確實看過目前檔案的證據。

重點摘要

Robots Exclusion Protocol標準明確指出,爬蟲規則「不是一種存取授權」。2 Google也警告,即使某個URL在robots.txt中被禁止,如果其他頁面連到它,該URL仍可能出現在搜尋結果中。3 DreamHost自己的機器人控制文章也說,robots檔案對遵循規範的搜尋引擎而言只是建議,惡意機器人可能忽略該檔案,或使用誤導性的user-agent。1

AI爬蟲又加入更多政策維度。OpenAI將用於ChatGPT搜尋的OAI-SearchBot,與涉及訓練用途爬取的GPTBot分開;並表示ChatGPT-User代表使用者觸發的動作,這類情境下robots.txt可能不適用。4 Google則說,Google-Extended沒有獨立的HTTP user-agent字串,而是作為robots.txt中的產品權杖,用於訓練與模型依據化偏好,不影響Google Search收錄。5 如今的爬蟲控制檔需要依目的制定政策,而不是單一的允許或封鎖開關。

如果您的主機、平台或代理程式生態系預期有agents.txt,就使用它。若希望推論時工具理解您最重要的頁面,請使用llms.txtrobots.txt仍要保持正確,因為主要爬蟲仍會使用它。然後在伺服器邊界驗證請求,並閱讀日誌。文字檔可以表達意圖,卻無法阻止不受信任的用戶端。

重要結論

給網站擁有者: - 發布robots.txt作為爬取政策、llms.txt作為AI可讀脈絡;agents.txt只應作為面向代理程式的提示。 - 不要把私有路由、祕密檔名、內部提示詞或敏感路徑放進任何公開爬蟲檔案。 - 變更後檢查日誌。政策檔只有在正確的爬蟲抓取並改變行為時才有意義。

給SEO與AIO團隊: - 將搜尋能見度、訓練許可與使用者觸發的擷取分開處理。 - 明確列出您想允許的機器人,例如搜尋爬蟲與AI答案介面。 - 將爬蟲檔案與sitemap、canonical、schema及llms.txt驗證搭配使用。

給安全團隊: - 把user-agent字串視為聲稱,而不是身分。 - 在營運者支援的情況下,使用反向DNS或公布的IP範圍驗證爬蟲。 - 敏感資源的存取應以身分驗證、WAF規則、應用程式政策與速率限制執行,而不是依賴爬蟲禮節。

Agents.txt帶來了什麼變化?

robots.txt已存在數十年。RFC定義的robots.txt檔案,是服務擁有者提供給爬蟲的檔案,讓爬蟲判斷哪些URI可以存取。2 基本檔案格式看起來很熟悉:

User-agent: *
Disallow: /private-draft/
Sitemap: https://example.com/sitemap.xml

agents.txt出現在另一個時刻。今天的網站接收到的不再只有搜尋引擎爬蟲。還有訓練爬蟲、答案引擎爬蟲、廣告安全爬蟲、瀏覽器助理擷取、使用者觸發的LLM擷取、封存爬蟲、SEO工具,以及借用合法爬蟲名稱的垃圾機器人。

DreamHost的文件之所以重要,是因為它讓agents.txt從小眾想法,進入至少一家主流主機商的預設行為。該文章表示,DreamHost會為Web Hosting方案自動包含預設的robots.txtagents.txt檔案,網站擁有者也可以在網站根目錄放置自訂檔案來覆寫任一檔案。1 這並不代表agents.txt成為具備強制語義的標準。它只代表這個檔名更可能出現在真實網站中。

安全的解讀應該很窄:

檔案 最適合的角色 錯誤假設
robots.txt 給遵循規範爬蟲的爬取偏好。 「封鎖就代表私密。」
llms.txt 為推論時使用提供策展過、LLM可讀的地圖。 「列入就代表會排名或被引用。」
agents.txt 在平台會讀取時,提供面向代理程式的政策提示。 「機器人必須遵守。」
Sitemap 為可收錄的公開頁面提供完整URL探索。 「提交就代表已收錄。」
伺服器日誌 證明實際發生了什麼。 「沒有可見referrer就代表沒有爬蟲使用該頁面。」

這些檔名不應彼此競爭。它們應該組成一組政策封包:爬蟲可以請求什麼、AI系統應該閱讀什麼、代理程式應該知道什麼,以及伺服器實際觀察到什麼。

Robots.txt仍然重要,但它不能保護您

當團隊把爬蟲檔案當作安全邊界時,這些檔案就會失效。

RFC清楚劃出邊界。該協定要求自動化用戶端在存取URI時遵守規則;它並不授權存取。2 Google在實務上也說了同樣的事:如果其他頁面連到被禁止的URL,Google即使不爬取被封鎖頁面的內容,仍可能找到並索引該URL位址與其他公開連結資訊。3 DreamHost也警告,robots規則對遵循規範的搜尋引擎只是建議,惡意機器人可能忽略檔案,或使用假的user-agent。1

這些事實導出一條簡單規則:凡是被複製到搜尋結果、被抓進資料集,或由LLM顯示後會造成傷害的內容,都不要放進robots.txtagents.txtllms.txt

糟糕的爬蟲檔案暴露的內容,往往多於它保護的內容:

User-agent: *
Disallow: /internal-product-roadmap/
Disallow: /legal-private/
Disallow: /prompt-drafts/
Disallow: /customers/acme-renewal-risk/

上面的檔案等於告訴每位訪客:敏感資料可能在哪裡。遵循規範的爬蟲也許會避開那些路徑。攻擊者則拿到了一張目錄地圖。

更安全的檔案會說明公開爬取政策,而不點名敏感資產:

User-agent: *
Allow: /
Disallow: /*.md$
Sitemap: https://example.com/sitemap.xml

這個版本表達了真實偏好,同時不揭露私有結構。如果/prompt-drafts/確實存在,伺服器應該用身分驗證保護它,並在適當情況下使用noindex標頭。爬蟲檔案不該承擔這個責任。

AI爬蟲需要依目的制定政策

搜尋爬蟲政策過去看起來很二元:允許Googlebot、封鎖吵雜的SEO工具,並用伺服器控制保護私有頁面。

AI爬蟲政策則多了目的。網站擁有者可能希望某頁出現在ChatGPT搜尋結果中,同時又不希望同一頁被用於模型訓練。OpenAI的爬蟲文件明確區分這一點。文件指出,OAI-SearchBot支援ChatGPT搜尋功能,而GPTBot會爬取可能用於訓練OpenAI生成式AI基礎模型的內容。4 OpenAI也表示這些設定彼此獨立:網站管理員可以允許OAI-SearchBot,同時禁止GPTBot。4

Google以不同方式畫出類似邊界。Google爬蟲文件說,Google-Extended沒有獨立的HTTP請求user-agent字串;現有Google user agent會執行爬取,而Google-Extendedrobots.txt中的產品權杖。5 Google表示,這個權杖控制已爬取網站內容是否可支援未來Gemini模型訓練與模型依據化,且不影響Google Search收錄或排名。5

這兩個例子說明,單一封鎖清單抓不到重點。真正的政策矩陣會問:

目的 範例訊號 營運者問題
搜尋探索 Googlebot、Bingbot、OAI-SearchBot 我是否希望該頁出現在搜尋或答案結果中?
訓練偏好 GPTBot、Google-Extended 我是否希望該頁用於模型訓練或模型依據化工作流程?
使用者觸發擷取 ChatGPT-User、瀏覽器助理 是否有人要求助理擷取該頁?
網站理解 llms.txt、schema、RSS 我是否已給AI系統清楚說明公開內容?
濫用流量 偽造user-agent、抓取工具 該請求是否證明身分,並在政策內運作?

政策檔應該符合目的。不要封鎖所有AI user-agent,然後疑惑為什麼AI搜尋介面忽略網站。也不要允許所有AI爬蟲,事後才抱怨訓練爬蟲取用了您原本只想提供給使用者搜尋的頁面。請分開目的、說清偏好,並驗證行為。

Llms.txt解決的是另一個問題

llms.txt不會取代robots.txt。Jeremy Howard的提案將/llms.txt描述為一種提供資訊的方式,協助LLM在推論時使用網站。6 同一份提案也說,llms.txt可以與現有Web標準並存:sitemap為搜尋引擎列出頁面,llms.txt則為LLM提供策展過的概覽,並可用允許內容的脈絡補充robots.txt6

這個區別對AIO工作很重要。

robots.txt回答:「這個爬蟲可以請求這條路徑嗎?」

llms.txt回答:「如果助理閱讀我的網站,它應該先理解什麼?」

agents.txt可能回答:「代理式用戶端應該知道哪些期望行為?」

這些問題彼此相近,但不會收斂成同一個檔案。嚴肅經營的網站應該把AI探索視為發布介面:

  1. 發布具有清楚標題與描述的canonical頁面。
  2. 加入與可見頁面一致的結構化資料。
  3. 保持sitemap與RSS輸出最新。
  4. 發布llms.txtllms-full.txt,提供策展過的AI脈絡。
  5. 發布robots.txt,明確說明爬蟲政策。
  6. 只有在平台或代理程式生態系有具體讀取者時,才加入agents.txt
  7. 檢查日誌,確認爬蟲請求了變更後的檔案。

跳過最後一步,AIO就只是希望儀式。爬蟲檔案存在。路由回傳200。卻沒有證據能證明目標用戶端看過它。

驗證應該放在邊界

User-agent字串不能證明身分。隨便一支指令碼都能送出User-Agent: Googlebot。抓取工具也能送出User-Agent: GPTBot。只信任標頭的政策,會把最寬鬆待遇給最容易偽造的訊號。

Google為聲稱來自Google的請求記錄了兩種驗證路徑:一次性檢查可使用反向DNS加正向DNS;大型系統則可比對公布的IP範圍。7 OpenAI在爬蟲文件中為OAI-SearchBot、GPTBot與ChatGPT-User公布IP位址JSON檔案。4 這些機制無法涵蓋所有爬蟲,但它們確立了正確形狀:身分需要字串以外的證據。

最低限度的邊界政策應記錄:

證據 為什麼重要
User-agent 顯示用戶端的聲稱。
來源IP與ASN 協助區分雲端抓取工具與已驗證爬蟲範圍。
反向DNS或IP範圍結果 在營運者支援驗證時證明身分。
請求路徑 顯示用戶端實際碰觸了哪些內容。
robots.txt擷取時間 顯示用戶端是否在爬取前檢查政策。
狀態碼與快取結果 顯示爬蟲收到什麼。
速率與路徑模式 即使是具名機器人,也能揭露濫用行為。

這組日誌封包會把爬蟲政策從意見變成證據。如果GPTBot持續請求被禁止的路徑,您可以證明。若假的Googlebot從住宅代理大量敲打看似私有的URL,您可以封鎖它,而不傷害真正的Googlebot。如果OAI-SearchBot從未請求變更後的文章,就能知道頁面為什麼沒有出現在ChatGPT搜尋中。

實用的AI爬蟲政策封包

不要從檔案開始。請先從結果開始。

結果 必要控制
搜尋引擎應收錄公開頁面。 Sitemap、canonical標籤、schema、快速200回應,以及允許搜尋爬蟲。
AI答案引擎應理解網站。 清楚文章、schema、RSS、llms.txt,以及具備明確摘要的來源頁面。
訓練爬蟲應避開特定內容。 依目的分組的robots.txt,加上政策或法律要求時的伺服器執行。
私有內容必須維持私密。 身分驗證、授權、無公開連結、不在爬蟲檔案揭露,且不外洩快取。
惡意機器人不應耗盡資源。 速率限制、WAF規則、已驗證機器人例外,以及濫用日誌。
政策變更應可稽核。 路由檢查、爬蟲擷取日誌、部署時間戳,以及簡短審查封包。

這組封包讓每一層各司其職。robots.txt傳達偏好。llms.txt傳達脈絡。agents.txt在有讀取者時傳達面向代理程式的意圖。伺服器負責執行。日誌負責證明。

在我自己的網站上,爬蟲工作也遵循這個分工。公開政策檔歡迎合法爬蟲,並封鎖爬蟲從程式碼區塊範例推斷出的原始Markdown路徑。AI脈絡檔則讓助理能以策展過的路徑進入公開文章。夜間爬取普查會告訴我爬蟲是否看見錯誤、過期快取、缺失路由,或現在應該回傳410的舊URL。政策檔提供意圖。日誌決定意圖是否奏效。

Agents.txt應該放什麼

在生態系定型之前,請讓agents.txt保持平淡且公開。

適合放入的內容:

  • 網站聯絡資訊與政策URL。
  • 指向robots.txt、sitemap、llms.txt與RSS的連結。
  • 偏好的公開內容使用聲明。
  • 提醒私有或需驗證路由必須取得授權。
  • 處理爬取問題的支援信箱。

不適合放入的內容:

  • 祕密路徑。
  • 內部提示詞規則。
  • 非公開API路由。
  • 客戶名稱。
  • 安全例外。
  • 若被敵意用戶端複製會傷害網站的指令。

判斷agents.txt的正確標準不是「好代理程式會喜歡這個嗎?」而是「如果惡意代理程式、搜尋結果和隨機使用者都讀到這個檔案,我是否仍能接受?」

更好的心智模型

爬蟲檔案是公共道路上的標誌。

標誌可以寫「送貨入口」、「請勿進入」或「從這裡開始」。守規矩的駕駛會遵守標誌。魯莽駕駛會忽略它。標誌仍然有用,因為多數合法流量都需要清楚指引。但當您把標誌當成上鎖的門,它就會失效。

AI爬蟲讓這些標誌同時更重要,也更不充分。更重要,是因為AI系統需要清楚的公開脈絡、依目的區分的政策與路由地圖。更不充分,是因為user-agent數量增加、訓練與搜尋分道揚鑣,惡意用戶端也能冒充好用戶端。

答案不是放棄爬蟲檔案。答案是把它們的權威降到正確層級。發布清楚的公開政策。驗證誰請求了這些檔案。觀察它們抓取了什麼。在伺服器端執行私有邊界。凡是關於「AI能見度」的主張,在日誌與即時路由支持之前,都應視為尚未證實。

這就是AIO表演與真實爬蟲營運的差別。


FAQ

什麼是agents.txt?

agents.txt是一種新興的面向代理程式文字檔,有些主機或工具可能會在網站根目錄提供它。DreamHost記錄了Web Hosting方案的預設agents.txt檔案,但該文件不會讓這個檔案成為存取控制標準。在特定代理程式平台清楚記錄如何讀取與套用該檔案之前,請把它視為公開提示。1

robots.txt會封鎖AI爬蟲嗎?

遵循規範的爬蟲可能會遵守robots.txt,主要營運者也會為其爬蟲記錄特定權杖。OpenAI記錄了OAI-SearchBot與GPTBot控制方式,Google則將Google-Extended記錄為用於訓練與模型依據化偏好的產品權杖。45robots.txt仍不會驗證用戶端、不會隱藏內容,也無法阻止選擇忽略該檔案的機器人。23

我應該發布llms.txt嗎?

如果希望AI助理找到一份策展過的公開內容地圖,就發布llms.txt。該提案將llms.txt定位為推論時脈絡,而不是sitemap或robots.txt的替代品。6 有用的檔案會指向您真正希望代理程式理解的頁面。

被禁止的URL仍可能出現在搜尋中嗎?

會。Google表示,被robots.txt封鎖的URL若被其他頁面連結,仍可能出現;即使Google不會爬取或索引被封鎖頁面的內容。3 對於必須遠離公開結果的頁面,請使用身分驗證、在允許爬取時使用noindex,以及伺服器端政策。

如何分辨真正的爬蟲和假的爬蟲?

不要只看user-agent字串。Google記錄了反向DNS加正向DNS檢查,以及公布IP範圍比對。7 OpenAI為其記錄的機器人公布IP位址JSON檔案。4 若某爬蟲營運者沒有公布驗證資料,請把該請求歸類為一項聲稱,並依行為進行速率限制或挑戰。

公開網站最安全的爬蟲檔案設定是什麼?

使用robots.txt管理爬蟲政策,使用sitemap做URL探索,使用llms.txt提供策展過的AI脈絡,並只將agents.txt用於公開的代理程式指引。讓敏感路徑遠離所有公開檔案。接著驗證即時路由、快取狀態、爬蟲擷取與伺服器日誌,再說這套設定有效。

參考資料


  1. DreamHost, “Control bots, spiders, and crawlers,” DreamHost Knowledge Base. Accessed May 18, 2026. 

  2. Koster, M., Illyes, G., Zeller, H., and Sassman, L., “RFC 9309: Robots Exclusion Protocol,” IETF, September 2022. 

  3. Google Search Central, “Introduction to robots.txt,” Google for Developers. 

  4. OpenAI, “Overview of OpenAI Crawlers,” OpenAI API Documentation. 

  5. Google Crawling Infrastructure, “Google’s common crawlers,” Google for Developers. 

  6. Jeremy Howard, “The /llms.txt file,” llms-txt proposal, September 3, 2024. 

  7. Google Crawling Infrastructure, “Verify requests from Google crawlers and fetchers,” Google for Developers, last updated March 20, 2026. 

相關文章

Fork Bomb 拯救了我們

LiteLLM 的攻擊者犯了一個實作錯誤。正是這個錯誤,讓 47,000 次安裝在 46 分鐘內被發現。

1 分鐘閱讀

開放原始碼不是安全邊界

GDS關於AI弱點發現的指引,正確掌握了開放原始碼安全的核心:預設保持開放、加快修補,並以證據明確列出例外。

1 分鐘閱讀

Ralph 迴圈:我如何在夜間運行自主 AI 代理

我建構了一套自主代理系統,搭配停止鉤子、生成預算與檔案系統記憶體。以下是失敗經驗與真正能交付程式碼的方法。

3 分鐘閱讀