robots.txt 解析器

貼上一份 robots.txt,按 RFC 9309(機器人排除協議,2022 年標準化)規定的方式像爬蟲一樣讀它:user-agent 組、Allow/Disallow 規則、站點地圖與未知指令,全部一覽無餘 —— 另附常見錯誤的體檢(空的 Disallow 行、未知指令、超大檔案)。匹配器則回答真正的問題:貼上一個 user agent 和一個路徑,立刻得到允許/禁止的判定,以及做出該決定的那條確切規則 —— 最長匹配、萬用字元 *、結尾錨點 $ 與組合並,全部嚴格按標準實現。一切都在你的瀏覽器裡執行。
還沒有解析任何東西。在上方貼上一份 robots.txt 並點選解析檔案,或者載入一個示例。
匹配器作用於上方輸入框裡當前的文本(無需先點解析)。user agent 的匹配方式由 RFC 9309 定義:檔案裡的 User-agent 值必須是你在此輸入內容的大小寫不敏感子串 —— 比如輸入 ExampleBot/1.0 就能匹配宣告為 ExampleBot 的組。路徑可以直接填完整 URL。
User agent(填真實 UA 串也行) 路徑,或完整 URL
還沒有判定。點選測試許可權。
如何取回你的檔案: 開啟https://your-domain.example/robots.txt 在瀏覽器裡全選、複製,貼上到這裡 —— 或者curl -s https://your-domain.example/robots.txt 在終端裡跑。本頁面自己絕不抓取任何東西:它只讀取你貼上的內容。想檢查傳輸該檔案的響應頭,請把它們交給HTTP 響應頭解析器.
自測
用 RFC 9309 參考向量重跑解析器與匹配器:最長匹配優先(包括 allow 勝過 disallow 的同長並列與深路徑情形),組合並,* 組回退、路徑與 user agent 的大小寫敏感性、萬用字元、$ 錨點、對/robots.txt 的隱式允許、百分號編碼歸一化、站點地圖提取,以及反向路徑。不會向任何地方傳送資料。
什麼是 robots.txt?
一句話:robots.txt 是放在站點根目錄的純文本檔案,告訴守規矩的爬蟲哪些路徑可以抓取 —— 這是一項自願的約定,2022 年被標準化為 RFC 9309,所有主流爬蟲都遵守它。
檔案的形狀

檔案由一連串記錄組成。一個組以一行或多行 User-agent 開頭,隨後是作用於這些爬蟲的 Allow 與 Disallow 規則。規則之後再出現新的 User-agent 行就開始一個新組;連續多行 User-agent 共享同一個組(一個爬蟲有兩個名字時就需要這樣)。Sitemap 這類獨立記錄可以出現在任何位置。# 在一行的任何位置都開始註釋。欄位名大小寫不敏感;路徑大小寫敏感。

行含義
User-agent: foobot下面的規則作用於名字包含 foobot 的爬蟲(大小寫不敏感)
User-agent: *下面的規則作用於所有沒有更具體組的爬蟲
Disallow: /private/不要抓取以 /private/ 開頭的路徑
Allow: /private/public/對這些路徑而言是壓過上面禁止項的例外(最長匹配)
Disallow:什麼都不禁止 —— 經典的"允許一切"寫法
Sitemap: https://…/sitemap.xml你的站點地圖的位置;爬蟲可以收集多份
Crawl-delay: 30不在 RFC 9309 內 —— 遺留擴充套件;主流爬蟲要麼忽略要麼自行解讀
判定是怎麼得出的(RFC 9309 §2.2.2)

1. 找到 User-agent 值是該爬蟲名字子串的組;所有匹配的組會合並。若沒有,使用 * 組;連該組也沒有,則一切允許。2. 用每條規則測試該路徑:匹配基於前綴、大小寫敏感,* 與 $ 作為通配符生效。3. 最長的匹配規則勝出;長度相同時 Allow 壓過 Disallow。沒有任何規則匹配即允許。而且無論規則怎麼寫,/robots.txt 本身都被隱式允許——不然爬蟲就讀不到這些規則了。

常見錯誤
  • 以為 robots.txt 能擋住訪問。它只是對守規矩爬蟲的請求,不是一堵牆:惡意採集器完全無視它,它對瀏覽器能開啟什麼也沒有任何影響。真正的防護請用身份驗證;只為引導搜尋引擎時,robots.txt 才是合適的工具。
  • 指望 Disallow: / 能把頁面從搜尋結果裡刪掉。它阻止的是抓取,不是索引:只要別的頁面鏈向你,搜尋引擎仍可能列出這個 URL(不帶摘要)。刪除頁面的工具是 noindex meta 標籤或響應頭。
  • 靠行序而不是靠長度。最先匹配的規則並不會贏 —— 贏的是最具體(最長)的那條。靠重排行來"修"行為是無效操作;想贏就把規則寫得更長。
  • 封禁 CSS 和 JS。過去流行禁止 /*.css$ 與 /*.js$ 的"最佳化";如今渲染器需要這些檔案才能像訪客一樣看到頁面,半渲染的頁面排名可能更差。
  • 把一整段文字當成文件。組內的註釋行沒問題,但第一條 User-agent 行之前沒打 # 的一段散文是解析錯誤,寬鬆的解析器也可能被它弄糊塗。
常見問題

所有爬蟲都支援 Allow、* 和 $ 嗎?主流的都支援,RFC 9309 也把三者全部標準化。一些較小或較老的爬蟲只認 Disallow,並把 * 當字面字元 —— 能把規則寫簡單就寫簡單,這是理由之一。

空的 Disallow: 是什麼意思?"什麼都不禁止" —— 該組顯式允許一切。它通常出現在有人改模板時刪了路徑卻留下指令;體檢會把這種行標出來。

檔案可以多大?RFC 9309 要求解析器至少能處理 500 KiB;超過之後爬蟲可以停止讀取並把餘下內容當作禁止。儘量遠小於這個值;如果檔案已經臃腫,該想想抓取控制是不是應該放到頁面響應頭裡。

為什麼匹配器說 /robots.txt 在 Disallow: / 下也是允許的?因為標準白紙黑字這樣寫:robots 檔案本身被隱式允許。Python 的 urllib.robotparser 等實現並沒有實現這個特例 —— 這正是本頁自測記錄下來的現實解析器之間的細微分歧之一。

Disallow 的路徑區分大小寫嗎?區分。/Private/ 和 /private/ 是兩條路徑。欄位名 disallow 可以任意大小寫,但值必須與 URL 完全一致。