搜尋抓取

robots.txt 出問题时蜘蛛會怎么抓:404、5xx 與誤封的差別

robots.txt 是蜘蛛抓取前的第一道检查,它自身的狀態碼會直接改變抓取行為。本文說明 200、404、5xx 與限速响應各自對應什么處理方式,列出常见的誤封寫法,並给出規則缓存生效的节奏與一套可执行的排查顺序。

搜尋抓取

robots.txt 出問题时蜘蛛會怎么抓:404、5xx 與誤封的差別

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 仍然要能正常响應、有站内入口,才更容易被稳定抓取。

出現抓取異常时的排查顺序

  1. 直接用命令行或抓取工具請求 robots.txt,看返回的狀態碼、内容類型,以及正文是否為纯文本。
  2. 確認返回内容與目前线上文件一致,排除缓存或反向代理返回了舊版本。
  3. 检查是否有防護策略把该路径的請求拦成 403 或 5xx。
  4. 核對 Disallow 規則是否誤伤目錄,以及 Sitemap 声明的地址是否可訪問。
  5. 對照服務器日誌,看蜘蛛對该文件的請求频率和狀態碼分布。
robots.txt 不决定頁面是否被收錄,它只影响蜘蛛能不能抓、以多大的范围抓。把它当成訪問控制的入口,而不是排名的開關。

一個稳定的 robots.txt,價值不在于寫得多复杂,而在于長期返回一致的结果,並且與站点實际想開放的范围保持一致。