robots.txt 在抓取流程里的位置
蜘蛛准备抓取一個新 URL 之前,通常會先確認這個站点的 robots.txt 允许它訪問。這份文件本身也是一個普通 URL,同样要经歷 DNS 解析、建立连接、等待响應這一整套流程。区別在于,它的结果會影响蜘蛛對整個站点的判断,所以一個不稳定的 robots.txt,比一個不稳定的一般頁面更麻烦。
不少站点只在 robots.txt 里寫几條 Disallow 就長期不管,等到出現抓取異常才回头检查,往往已经過去几周。把它当成一份需要监控的基础配置,比当成一次性的設定更稳妥。
不同响應狀態對應不同處理方式
200,正常讀取規則
返回 200 且内容可解析时,蜘蛛按規則执行。需要注意的是,規則按路径匹配,Disallow 寫得過于宽泛,或者使用了蜘蛛並不支持的寫法,都可能波及本来想放開的目錄。
404 與 410:视為没有限制
robots.txt 返回 404 或 410,蜘蛛通常理解為该站点没有設定限制,于是按常規方式抓取。對新建站点来说這不算坏事,但如果本来是靠 robots.txt 屏蔽某些目錄,文件被誤删之後,這些目錄會重新進入抓取范围。刪除或改名之前,最好先確認没有依赖它做屏蔽。
5xx 與超时:偏向保守
robots.txt 连續返回 5xx 或請求超时,蜘蛛會倾向于暫停或减少抓取,等待後續再试。這種保守是有道理的:在拿不到規則的情况下繼續大量抓取,風險更高。如果服務器整体故障,頁面和 robots.txt 會一起出問题;但如果只是這一個路径被错誤配置、被防護策略拦截、或者被後端路由吞掉,就會出現「頁面能打開、抓取却在降频」的割裂現象。
429 與其他限速响應
有些站点會在 robots.txt 之前加一层限速,返回 429。這類响應同样會被当作未取得規則處理,短期影响不大,但如果長期如此,蜘蛛每次都要為讀取規則付出額外代價。
誤封的几種典型寫法
- Disallow: / 從測試环境複製到生产环境,整站被挡在门外。
- 規則里的路径大小寫或尾斜杠寫法不一致,以為挡住了 /search/,實际只挡住了其中一種寫法。
- 把 Sitemap 声明放在被 Disallow 覆盖的目錄下,忽略了声明文件和 Sitemap 文件本身是两件事。
- 通過跳轉把 robots.txt 指向別處,或者让它返回一個 HTML 頁面,導致内容無法解析。
缓存與規則生效的节奏
蜘蛛不會每次抓取都重新讀一遍 robots.txt,它有自身的缓存周期。規則改動之後,生效往往不是即时的:收紧規則和放開規則的感知速度也不一样,放開之後頁面還需要重新進入抓取队列。修改前後都留一段观察期,比反复改動更容易看清效果。
robots.txt 里的 Sitemap 声明
在其中寫入 Sitemap 地址是一個低成本的补充,让蜘蛛在讀取規則的同时知道 URL 清單在哪里。不過它只是清單来源之一,並不等于收錄保證;Sitemap 里的 URL 仍然要能正常响應、有站内入口,才更容易被稳定抓取。
出現抓取異常时的排查顺序
- 直接用命令行或抓取工具請求 robots.txt,看返回的狀態碼、内容類型,以及正文是否為纯文本。
- 確認返回内容與目前线上文件一致,排除缓存或反向代理返回了舊版本。
- 检查是否有防護策略把该路径的請求拦成 403 或 5xx。
- 核對 Disallow 規則是否誤伤目錄,以及 Sitemap 声明的地址是否可訪問。
- 對照服務器日誌,看蜘蛛對该文件的請求频率和狀態碼分布。
robots.txt 不决定頁面是否被收錄,它只影响蜘蛛能不能抓、以多大的范围抓。把它当成訪問控制的入口,而不是排名的開關。
一個稳定的 robots.txt,價值不在于寫得多复杂,而在于長期返回一致的结果,並且與站点實际想開放的范围保持一致。