搜尋抓取

搜尋蜘蛛抓取:robots.txt 規則冲突與目錄誤伤的排查顺序

robots.txt 是搜尋蜘蛛判断抓取范围的第一入口,規則冲突或组別寫错时,可能把整段可抓目錄挡住。本文按先看日誌、再驗匹配、後做修正的顺序,梳理通配符、Allow 與 Disallow 優先級、User-agent 组別合並、大小寫與 Sitemap 指令位置的常见誤伤点,並给出可复用的驗證方法。

搜尋抓取

搜尋蜘蛛抓取:robots.txt 規則冲突與目錄誤伤的排查顺序

為什么 robots.txt 值得單獨排查

在抓取路径的鏈條里,robots.txt 是最靠前的一环。蜘蛛到達站点後,通常先取這份文件,再决定哪些路径可以繼續請求。它不负责收錄,也不保證抓取,但一旦規則寫错,後面的 Sitemap、内鏈、目錄结构再合理,也可能因為入口被挡住而失去被請求的机會。實际运营中,robots.txt 引發的誤伤往往不是“整站被封”這么明顯,而是某個栏目、某類參數頁或某個子目錄被悄悄排除,日誌里表現為蜘蛛對该目錄的請求量長期為零。

先確認問题是否真的出在 robots.txt

不要一看到抓取量下降就改規則。更稳妥的顺序是:先用服務器日誌或抓取日誌確認蜘蛛最近是否請求過 robots.txt,返回狀態是否為 200;再確認被怀疑的目錄是否曾经有抓取记錄。如果该目錄此前有稳定請求,某次改版或規則調整後归零,robots.txt 的嫌疑才比較大。如果蜘蛛根本没有取過這份文件,或者返回 404、403、5xx,那問题可能出在服務器可達性、WAF 或 DNS 环节,需要另開排查线。

日誌里可以看的几個信号

  • robots.txt 的請求频率和返回碼是否稳定為 200。
  • 被怀疑目錄的抓取量是否在某個時間点之後突然归零。
  • 同目錄下部分 URL 仍被抓取,說明不是整段屏蔽,而是規則匹配范围過宽或過窄。
  • 蜘蛛是否频繁請求被 Disallow 的路径但未繼續深入,可能只是規則解析结果與预期不同。

常见誤伤点與對應規則

通配符位置不当

robots.txt 只支持前缀匹配和有限通配符,其中 * 表示任意字符序列,$ 表示路径結束。寫法稍不注意就會扩大范围,例如想屏蔽带排序參數的分頁,却寫成 Disallow: /*sort,可能把包含 sort 的正常栏目也一起挡住。更稳的做法是把通配符限制在參數段附近,並配合 Allow 放行必要路径。

Allow 與 Disallow 同时命中

当同一路径同时命中 Allow 和 Disallow 时,通常按最長匹配决定,長度相同时 Allow 優先。很多人以為“後面的規則覆盖前面的”,于是把 Allow 寫在 Disallow 之後,却發現没有生效。排查时應把相互冲突的規則列出来,逐條比較匹配長度,而不是凭书寫顺序判断。

User-agent 组別被空行拆開

多行 User-agent 连續书寫时属于同一组,中間出現空行則分组結束。若把 User-agent: * 和针對某蜘蛛的規則混在一起,再插入空行,規則可能挂到错誤的组上。尤其当站点同时声明多個蜘蛛名稱时,建议每组之間留出清晰空行,並避免在组内随意插入注释以外的内容。

目錄前缀與大小寫

路径匹配区分大小寫。Disallow: /Search 和 /search 在規則层面並不等價。另外,用目錄名做前缀时容易誤伤,例如 Disallow: /doc 會同时挡住 /document 和 /docs。如果只想屏蔽某個目錄,寫成 /doc/ 更稳妥。

Sitemap 指令的位置

Sitemap 是全局指令,不属于某個 User-agent 组。它放在文件任意位置通常都能被识別,但如果被夹在某個组中間,维護时容易被誤讀為只對该蜘蛛生效。為了减少交接成本,可以把 Sitemap 统一放在文件末尾,並保證地址可訪問、返回 200 且為 XML 内容。

修正與驗證的落地步骤

  1. 先备份目前 robots.txt,记錄修改時間和修改人。
  2. 把冲突規則逐條列出,标注匹配路径、允许或禁止、命中長度。
  3. 用最小范围改寫,尽量用目錄结尾斜杠限定范围,避免裸前缀誤伤。
  4. 修正後先在小范围驗證,观察目标目錄是否重新出現蜘蛛請求。
  5. 把 Sitemap 中真實可抓的 URL 與 robots.txt 允许范围做交叉核對,避免提交了却被規則挡住。
  6. 稳定一段時間後再评估是否需要繼續收紧,不要一次改動過多變量。
robots.txt 不承诺收錄,也不直接决定排名。它的作用是表達抓取意愿,真正發現 URL 仍然依赖内鏈、Sitemap 和服務器稳定性。

保持規則简洁可讀

很多誤伤来自“為了精确而堆叠大量通配符”。對中小站点来说,規則组越少、路径越明确,後續排查成本越低。建议给每個被屏蔽目錄寫一句原因注释,定期复核是否仍有必要。若某目錄已经重新開放,就把對應 Disallow 及时刪除,避免規則與站点结构長期脱节。抓取路径的恢复通常需要观察一段時間,期間可以结合日誌中的狀態碼分布和入口請求量,判断蜘蛛是否重新走回了被誤挡的目錄。