很多站点把 robots.txt 当成一個開關:要么全站放開,要么一刀切禁止。實际上它是蜘蛛進入站点时最先讀到的說明文件,同时承担两個角色——告诉蜘蛛哪些路径暂时不用抓,以及告诉蜘蛛去哪里找 URL 清單。這两件事寫得好不好,直接影响後面的 URL 發現是否顺畅。
蜘蛛讀 robots.txt 的顺序
蜘蛛訪問一個站点,通常會先請求根目錄下的 robots.txt,再根據其中的規則决定接下来的抓取路径。這個文件的响應狀態不同,蜘蛛的處理方式也不一样。
- 返回 200:按規則执行,同时讀取其中的 Sitemap 行。
- 返回 404:多數蜘蛛视為没有限制,但也就失去了 Sitemap 這一入口信息。
- 返回 5xx 或超时:部分蜘蛛會暂时收敛抓取,等下次再试,抓取节奏可能被打断。
所以這個文件本身要足够轻:静態輸出、纯文本、不要经過登入態或复杂跳轉。
把 Sitemap 寫進 robots.txt
在 robots.txt 末尾單獨一行寫 Sitemap,是最直接的 URL 清單入口之一。它省去蜘蛛額外试探的步骤,對新站或内鏈較浅的栏目更有帮助。需要注意:這一行只是告知,是否抓取、抓多少仍由蜘蛛自己决定,寫了不等于會被收錄。
如果站点有多個 Sitemap 索引文件,可以並列寫多行。用索引文件时,最好確認索引里引用的每個分片都返回 200,否則蜘蛛顺着索引走下去,只會拿到一串死鏈,反而浪費一次抓取机會。
Disallow 挡住的不只是“頁面”
常见的誤配置,是用 Disallow 屏蔽後台、搜尋结果頁或带參數頁面,却顺手把某條内鏈路径也關掉了。蜘蛛無法抓取被禁止的 URL,也就無法顺着它繼續發現更深层的地址。
几個容易忽略的点
- 路径前缀匹配:寫 /search 时,/search-tips 這類同前缀地址也可能被一並挡掉,寫成 /search/ 更稳妥。
- 通配符與结尾符:* 和 $ 能提高精确度,但寫错也容易收紧過度或放宽過度。
- 禁止抓取不等于不收錄:被 Disallow 的地址若從別處获得外鏈,仍有可能出現在结果里,只是内容由外部信息推断,准确性無從保證。
如果目标是“不要被抓”,用 robots.txt;如果目标是“不要被收錄”,robots.txt 往往不是合适的工具。
抓取频率與規則缓存
robots.txt 會被缓存一段時間,改動之後未必立刻生效。Crawl-delay 一類字段各家支持程度不同,不适合当作流量控制的總開關;真正的抓取节奏更多取决于站点响應速度、错誤率和内容更新频率。响應快、错誤少的站点,蜘蛛通常愿意多走几條連結。
一份简短的巡检清單
- robots.txt 是否返回 200,内容是否為纯文本。
- Sitemap 行是否指向可訪問的索引或清單文件。
- Disallow 的路径前缀是否誤伤了正常栏目。
- 被屏蔽的目錄里,是否存在希望被發現的内鏈。
- 改動後是否在抓取日誌里確認蜘蛛重新讀取了该文件。
改動之後怎么观察
與其反复調整規則,不如看日誌:蜘蛛請求 robots.txt 的時間、抓取 Sitemap 的频次、被禁止路径出現的 403 记錄,都能反映配置是否落地。连續观察几天再决定下一步,通常比频繁改動更稳妥。