首頁 / 技術文章 / 用 robots.txt 允許 AI 搜尋、封鎖模型訓練的做法與限制
技術文章
用 robots.txt 允許 AI 搜尋、封鎖模型訓練的做法與限制
可以,但只在「爬蟲業者提供分離的 User-Agent,且遵守 robots.txt」時成立。以 OpenAI 為例,可允許 OAI-SearchBot,並禁止 GPTBot;這是在 robots.txt 層級表達網站存取偏好,不等於可強制所有 AI 系統不得訓練。
精簡答案
robots.txt 能做的是:依 User-Agent 對爬蟲宣告哪些路徑可抓、哪些不可抓。若 AI 服務商把「搜尋索引/答案引用」與「模型訓練資料蒐集」拆成不同爬蟲,網站就能用不同規則處理。
| 目標 | robots.txt 是否適合 | 判斷 |
|---|---|---|
| 允許特定 AI 搜尋爬蟲存取公開頁面 | 適合 | 可用指定 User-Agent 的 Allow 規則表達 |
| 禁止特定模型訓練爬蟲存取網站 | 適合,但取決於對方是否遵守 | 可用指定 User-Agent 的 Disallow 規則表達 |
| 保證任何 AI 公司都不能拿內容訓練 | 不適合 | robots.txt 不是身分驗證、授權合約或存取控制系統 |
| 阻止未宣告、偽裝或不遵守規則的抓取行為 | 不適合 | 需要伺服器端偵測、封鎖、授權與法律條款等其他機制 |
為什麼 robots.txt 可以分開處理不同 AI 爬蟲
RFC 9309 定義的 Robots Exclusion Protocol 允許網站在根目錄的 /robots.txt 中,針對不同 User-Agent 建立規則群組。每個群組可包含 Allow 與 Disallow 規則,用來表示該爬蟲是否可存取特定路徑。
因此,關鍵不在於 robots.txt 是否有「AI training」這個通用欄位;它沒有。實務上可行的做法,是依各業者公開文件列出的爬蟲名稱分別設定。
OpenAI 的例子:允許 OAI-SearchBot,禁止 GPTBot
以 OpenAI 文件為例,GPTBot 與 OAI-SearchBot 是不同的爬蟲。OpenAI 文件描述 GPTBot 可用於協助改善模型,並描述 OAI-SearchBot 與搜尋功能相關,且不是用來訓練 OpenAI 的生成式 AI foundation models。
| User-Agent | 文件描述的用途 | 常見 robots.txt 策略 |
|---|---|---|
GPTBot | OpenAI 的網頁爬蟲,文件說明其可用於協助改善模型 | 若不希望內容被此爬蟲抓取,可設定 Disallow: / |
OAI-SearchBot | 與 OpenAI 搜尋功能相關;OpenAI 文件說明它不是用來訓練生成式 AI foundation models | 若希望內容可出現在 AI 搜尋或相關搜尋功能中,可設定 Allow: / |
ChatGPT-User | 代表 ChatGPT 使用者觸發的請求,而非一般自動化網頁爬取 | 是否允許取決於網站是否要支援使用者透過 ChatGPT 存取頁面 |
robots.txt 範例
以下範例表達的政策是:允許 OpenAI 搜尋爬蟲存取全站、允許使用者觸發的 ChatGPT 存取、禁止 GPTBot 抓取全站。這是針對 OpenAI 文件中公開列出的 User-Agent 所寫,不是所有 AI 爬蟲的通用規則。
User-agent: OAI-SearchBot
Allow: /
User-agent: ChatGPT-User
Allow: /
User-agent: GPTBot
Disallow: /
User-agent: * 設定 Disallow: /。該寫法可能同時影響其他遵守 robots.txt 的爬蟲。規則如何被解讀
- 爬蟲會讀取網站根目錄的
/robots.txt。 - 爬蟲依自己的
User-Agent找到對應的規則群組。 - 群組中的
Allow與Disallow規則用路徑比對 URL。 - 若多條規則同時符合,依 RFC 9309 的規則選擇最明確的比對結果。
因此,網站管理者應把「允許搜尋」與「禁止訓練」寫成不同 User-Agent 的明確規則,而不是期待單一 Disallow 能表達所有 AI 使用情境。
適用範圍與限制
| 限制 | 說明 | 建議 |
|---|---|---|
| 依賴爬蟲自我識別 | robots.txt 是依 User-Agent 套用規則;若爬蟲未使用公開名稱,規則就無法精準套用 | 搭配伺服器日誌檢查與異常流量偵測 |
| 依賴對方遵守 robots.txt | robots.txt 是爬蟲排除協定,不是登入、付費牆或檔案權限 | 對非公開資料使用身分驗證或授權控管 |
| 不同業者命名不同 | 沒有單一標準 User-Agent 可代表所有 AI 搜尋或所有模型訓練 | 逐一查閱各業者官方文件 |
| 搜尋與訓練界線由業者文件定義 | 網站端只能依對方公開說明設定規則,不能從 robots.txt 本身驗證資料用途 | 保留政策紀錄,並定期檢查文件是否更新 |
常見誤解與陷阱
Disallow: / 就等於禁止所有 AI 使用內容。實際上,它只會影響遵守 robots.txt 且符合該規則的爬蟲存取行為;內容授權、模型訓練用途與資料保存政策不是 robots.txt 能完整處理的範圍。OAI-SearchBot 就等於允許 GPTBot。兩者是不同 User-Agent,應分開寫規則;不要只用泛用規則處理所有 OpenAI 相關流量。維運建議
沒有真實觀測資料時,不應把某個 robots.txt 設定寫成「已能阻止所有 AI 訓練」。較穩健的做法,是把 robots.txt 視為公開政策宣告,再搭配日誌分析、爬蟲目錄、使用條款與伺服器端控管。
- 建立一份允許與封鎖的 User-Agent 清單,並註明依據來源與更新日期。
- 把搜尋用途與訓練用途分開管理,不要只用
User-agent: *處理。 - 定期檢查伺服器日誌,確認實際請求是否使用預期的 User-Agent。
- 非公開、付費或合約限制內容,不應只依賴 robots.txt,應使用身分驗證或授權控管。
本文的依據與限制
本文依據 RFC 9309 的 robots.txt 規格,以及 OpenAI 對 GPTBot、OAI-SearchBot、ChatGPT-User 與模型資料來源的公開說明整理。未使用站內或伺服器日誌觀測資料。
常見問題
能不能只允許 AI 搜尋,但禁止模型訓練?
可以表達這個偏好,但前提是服務商把搜尋爬蟲與訓練爬蟲分成不同 User-Agent,且遵守 robots.txt。以 OpenAI 為例,可允許 OAI-SearchBot,並禁止 GPTBot。
需要封鎖 ChatGPT-User 嗎?
ChatGPT-User 代表使用者在 ChatGPT 中觸發的請求,和一般自動化爬蟲不同。若網站希望使用者能透過 ChatGPT 開啟或查詢公開頁面,通常不會把它與訓練爬蟲混在同一條封鎖規則。
robots.txt 能保證內容不被拿去訓練模型嗎?
不能保證。robots.txt 是爬蟲排除協定,用來告知遵守規則的爬蟲哪些路徑可存取;它不是授權合約、身分驗證或技術性資料外洩防護。
其他 AI 服務也能用同樣寫法嗎?
原理相同,但 User-Agent 名稱不能直接套用。應查閱該服務的官方爬蟲文件,確認是否有分離搜尋、訓練或使用者觸發請求的爬蟲名稱。