過去 robots.txt 的二元局限
robots.txt 自 1994 年存在到現在,30 年沒變過核心模型:
User-agent: SomeBot
Allow: / 或 Disallow: /
對單一 bot 只能「完全允許」或「完全禁止」。但 AI 時代有三種完全不同的爬蟲意圖:
- 傳統搜尋(Googlebot、Bingbot)—索引給排名用
- AI 即時引用(ChatGPT-User、PerplexityBot)—使用者問問題時即時抓
- AI 訓練(GPTBot、ClaudeBot、Google-Extended)—餵下一代模型訓練語料
對品牌來說,三者的策略可能完全不同:
- 完全歡迎傳統搜尋(影響 SEO)
- 歡迎 AI 即時引用(直接影響 GEO 引用率)
- 不希望內容被當訓練語料(智財考量、品牌想保留控制權)
舊 robots.txt 沒辦法精細區分。要嘛全允許(連訓練都送出去),要嘛全擋(連即時引用都進不來)。
Content-Signal 協議怎麼解這個問題
IETF 在 2025 年提出的 draft-ietf-aipref-content-signal 是這個問題的標準化嘗試。
它在 robots.txt 中加入新指令 Content-Signal:
User-agent: *
Content-Signal: search=yes, ai-input=yes, ai-train=no
Allow: /
三個獨立旗標:
search— 允許傳統搜尋索引(Google、Bing 等)ai-input— 允許作為 AI 引擎即時引用來源(ChatGPT browse、Perplexity)ai-train— 允許作為 AI 訓練資料
每個旗標可獨立設 yes 或 no,Allow / Disallow 仍然有效——是疊加而非取代。
geoweb.tw 自家 robots.txt 怎麼寫
我們自家的策略是:歡迎被引用,但保留訓練權限。完整 robots.txt 公開在 https://geoweb.tw/robots.txt:
User-agent: *
Content-Signal: search=yes, ai-input=yes, ai-train=no
Allow: /
Disallow: /api/
User-agent: GPTBot
Allow: /
Disallow: /api/
User-agent: ChatGPT-User
Allow: /
Disallow: /api/
# ...其他 AI bot 同樣設定...
Sitemap: https://geoweb.tw/sitemap.xml
注意:
*行設了 Content-Signal——這是「對所有 bot 的預設」- 個別 AI bot 行不設 Content-Signal——繼承上面的
*預設 Disallow: /api/保護內部端點不被任何 bot 抓
廠商支援度(2026 年 4 月現況)
| 廠商 | 支援 Content-Signal? | 備註 |
|---|---|---|
| Microsoft (Bing) | 🟡 有限支援 | search 旗標被遵守;ai-train 仍在實驗 |
| OpenAI | 🟡 部分 | ai-train=no 對 GPTBot 有效;ai-input 對 ChatGPT-User 暫無明確聲明 |
| Anthropic | 🟡 部分 | 對 ClaudeBot 訓練意圖尊重 robots.txt + Content-Signal |
| ❌ 未支援 | 仍走 Google-Extended user-agent 二元控制 |
|
| Perplexity | 🟡 試驗中 | 公司聲明會逐步加入 |
| 其他 | 不確定 | 多數新爬蟲跟 spec 進度 |
結論:Content-Signal 仍是過渡期協議——支援率不高但持續成長。做了不會錯——支援的廠商會遵守,不支援的廠商會 fallback 到 user-agent 級規則(你 robots.txt 仍有 GPTBot / ClaudeBot 等明確 allow/disallow)。
實作建議
1. 雙保險
不要只靠 Content-Signal,也要在 user-agent 層級寫明確規則:
User-agent: *
Content-Signal: search=yes, ai-input=yes, ai-train=no
Allow: /
# 對未來新出現的 AI bot 雙保險
User-agent: GPTBot
Allow: /
User-agent: ChatGPT-User
Allow: /
# ...
2. ai-train 的策略選擇
選 yes 還是 no 視品牌情況:
| 情境 | 建議 |
|---|---|
| B2C 想最大化曝光 | ai-train=yes(被訓練 = 進 LLM 內隱知識,長期推薦力強) |
| B2B 內容是核心競爭力 | ai-train=no(保留版權,讓客戶找你而非看 AI 摘要) |
| 媒體 / 出版業 | ai-train=no(多家媒體已對 AI 廠商集體興訟) |
| 個人品牌 | 通常 yes(被訓練成 LLM 知識的一部分對個人品牌長期有利) |
3. 監控
每季檢查一次:
- robots.txt 裡的 user-agent 規則是否含括所有新出現的 AI bot
- AI 廠商有沒有更新 Content-Signal 支援
- 你的網站是否被某些 bot 「忽視 Content-Signal」(透過 server log 觀察)
健檢能告訴你什麼
GeoWeb 的「AI 爬蟲可達性」維度會:
- 偵測你 robots.txt 是否含 Content-Signal 指令
- 列出每個主流 AI bot 對你網站的存取權限
- 提示是否有 bot 被誤擋
- 提示 IndexNow / sitemap 配套是否齊全
如果你想完整部署 Content-Signal + 持續維護 + 季度更新,這是 GEO 顧問服務涵蓋範圍:[email protected]
GEO 深度系列 #16。前一篇:「12 維度逐項拆解:語言自然度的 7 個子指標」
等等search=yes,ai-input=yes,ai-train=no這行直接copy到我的robots.txt就會生效嗎?還是要先去哪裡註冊?有點怕亂寫整個站被擋掉QQ
個人品牌那欄寫『通常yes,被訓練對長期有利』這個我持保留態度欸,現在被餵進去誰知道之後AI講錯話算誰的,我寧可先no
content-signal是寫在robots.txt裡,那這指令本身會不會被當成無效行直接被舊的parser忽略?相容性那段想再聽細一點
有人實際測過設了ai-train=no之後,server log裡GPTBot之類的真的就不來了嗎?還是照爬不誤?
+1也想知道 我們官網log我完全看不懂 ig小編偶爾說「欸這個爬蟲怪怪的」我也聽不出是什麼意思 母湯喔這種東西是不是要花錢請人顧
我是做媒體的,文章裡寫『媒體/出版業建議ai-train=no』這點我超有感,但老實說擋了gptbot它真的就不拿去訓練嗎?我們也只能相信它自律而已啊orz
看到那個表格Google還是 ❌ 未支援我就笑了,最大那家不支援等於這協議現在實際覆蓋率超低吧,寫了一半的bot看不懂是要寫心酸的喔
想問一下ai-input跟ai-train差在哪我看半天有點混QQ一個是即時抓一個是拿去訓練這樣理解對嗎
94狂 直接把自家geoweb.tw/robots.txt公開出來給人看,這點加分,至少不是嘴砲
文章說Disallow: /api/ 是保護內部端點不被任何bot抓,但robots.txt本來就是公開檔,這樣寫不就等於告訴大家『我的 /api/ 在這』,反而引人注意?
哈哈這是經典問題,你說得對,robots.txt從來不是安全機制,disallow只是"請有禮貌的bot不要爬",擋不了存心要打你api的人,而且確實是把路徑公開出來。真正的存取控制要靠後端鑑權那層。robots.txt那行disallow: /api/ 的目的只是"不要讓搜尋引擎/ai把我的api回應索引進去當內容",不是拿來當防護。敏感端點本來就不該只靠這行檔案保護,這部分要聊就不是三言兩語了。
先收藏,這篇剛好解決我一直搞不懂robots.txt到底要全開還全擋的問題==
歪個樓,與其在robots.txt跟AI廠商鬥智不如想想內容本身值不值得被引用吧 不然擋一堆結果根本沒人想抓你==
這句其實蠻中肯的xd權限怎麼設是要不要給,但想不想抓你是另一回事。我的理解是兩件事要分開做:content-signal解決的是我有好內容、但我要決定它能被拿去幹嘛;至於內容本身夠不夠格被即時引用,那是這系列其他篇在談的(結構化、可被retrieval的程度那些)。先有值得被引用的內容,再來談權限分級,順序別反過來。
draft-ietf那個連結點進去看了,IETF還是draft階段而已欸,這種還沒定案的東西現在all in會不會太早==
推一個雙保險的觀念,光靠新指令真的不夠,我自己server log看下來一堆crawler根本不甩Content-Signal直接硬爬
看完最大的疑問:既然Google還沒支援、OpenAI/Anthropic都只是『部分』,那我現在花時間部署Content-Signal的實際效益到底有多少?會不會等於白做?
我懂你的猶豫,覆蓋率現在確實不高。但你不會白做的原因在文章那句結論:支援的廠商會遵守,不支援的會fallback回去看你user-agent那層的allow/disallow,所以你不會因為多寫一行Content-Signal而有任何損失。把它想成先卡位,現在多打一行字幾乎零成本,等之後主流引擎陸續補上支援,你就不用回頭重弄。真正花時間的不是這一行,是後面季度要追每家有沒有更新、log裡誰在偷爬,那段自己手動追會追到瘋掉就是了。
文末又是免費健檢又是顧問信箱,是不是其實重點是要賣服務ㄏㄏ 不過內容本身是真的有寫東西啦不能否認
電商小老闆路過,照文章B2C想最大化曝光那邊我應該設ai-train=yes對吧?想被推薦就讓它學沒錯吧
想問作者,文章說個別ai bot那幾行不設content-signal是『繼承 * 的預設』,可是robots.txt不是常說user-agent區塊一旦比對到專屬那段就只看那段、不看 * 嗎?那content-signal到底有沒有真的繼承?
好問題,這其實是robots.txt兩種規則的差別。傳統的allow/disallow確實是最具體的user-agent區塊勝出、不疊加,所以你在gptbot那段沒寫disallow它就不繼承 * 的disallow。但content-signal在草案裡的設計是站台級別的內容意圖宣告,比較像對整站的旗標,不是傳統那種誰最具體誰贏的比對邏輯。所以我自家才會只在 * 寫一次。不過老實說各家解讀現在還沒完全統一,我才會在文裡一直強調雙保險、user-agent層也要寫死,不要把命運押在繼承行為上 😅
監控那段說『每季檢查一次robots.txt有沒有含括所有新出現的ai bot』,問題是新bot一直冒出來,我怎麼知道現在市面上有哪些ai爬蟲要加?有清單嗎?
沒有一份官方總表是真的痛點,各家自己公布user-agent,名字還常改。實務上就是混著看:各引擎自己的爬蟲說明頁、社群整理的清單、再加上你自己server log裡冒出來的陌生ua,log往往比任何清單都早發現新爬蟲。這也是我們健檢那個"ai爬蟲可達性"維度在做的事之一,幫你比對主流bot的存取權限、提示誰被誤擋。長期維護的話,養成習慣每季掃一次自己的server log找陌生UA,比追別人整理的清單更即時,這是最務實的做法。
我是B2B做技術內容的,照表格我應該ai-train=no保留版權。但我又很想被AI引用帶流量,這樣ai-input=yes但ai-train=no它即時引用我的時候,不就等於還是把我的內容吐出去了?那擋訓練的意義在哪?
你抓到重點了,這兩件事影響的時間尺度不一樣。ai-input=yes是使用者當下問問題,引擎即時抓你這篇、附上連結引用你,這帶流量、會把人導回你站上,對B2B是好事。ai-train=no擋的是把你整批內容吸進去變成模型內隱知識,之後它不附來源、不導流,直接用你的know-how回答別人。所以input是有來源的曝光,train是無來源的稀釋,你要的正是給引用、不給白嫖這個組合,方向沒錯。