常见問题

蜘蛛池入口頁把搜尋蜘蛛拦在门外:robots、防火墙和限速規則的常见誤伤

入口頁没人抓,不一定是内容問题,很可能是被自己的防護規則挡住了。本文從 robots.txt、防火墙與 WAF、频率限制三個方向,說明搜尋蜘蛛被抓取拦截的常见誤伤场景,並给出一套按日誌和狀態碼逐步排查的顺序,帮你先把入口恢复成可正常訪問的狀態。

常见問题

蜘蛛池入口頁把搜尋蜘蛛拦在门外:robots、防火墙和限速規則的常见誤伤

很多站点做蜘蛛池时,注意力都放在“怎么让搜尋蜘蛛發現目标 URL”,却忽略了另一面:入口頁可能根本没让搜尋蜘蛛進来。抓取日誌一片空白,有人以為是自己入口頁质量太差,實际上是被自己的 robots.txt、防火墙或频率限制拦在了门外。

一、先分清是“被拦住”還是“没来過”

這两種情况的處理方向完全不同。日誌里完全没有搜尋蜘蛛的請求,可能是它压根没發現入口頁,也可能是請求在到達應用之前就被挡掉了。比較稳妥的做法是同时看三個地方:Web 服務器的訪問日誌、CDN 或 WAF 的拦截日誌,以及服務器出口的網絡层记錄。如果 WAF 日誌里有大量来自搜尋引擎 IP 段的 403、405 或 406,那基本可以判断是拦截問题,而不是内容問题。

反過来,如果连 WAF 日誌里都没有對應记錄,說明請求连邊缘节点都没到,就要往域名解析、入口頁是否被搜尋蜘蛛發現這些方向去查。

二、robots.txt 是最常见的“自我阻断”

robots.txt 一行寫错,整站都可能被拒绝抓取,而很多人只在改版时顺手寫了一次,之後再没看過。

几種典型寫法

  • Disallow: / 寫在入口頁所在目錄或整站上,等于告诉搜尋蜘蛛全都別来。
  • 把測試环境的 robots.txt 直接同步到线上,而測試环境里往往寫了全站禁止。
  • 只對部分蜘蛛寫規則,结果把真正想放行的那個也排除了。
  • 返回 404 一般會被视為允许抓取,但持續返回 500 會让部分蜘蛛降低抓取意愿。
robots.txt 是约定不是命令。遵守它的蜘蛛會离開,不遵守的照样抓;所以指望用它挡垃圾流量,往往先誤伤的是正常抓取。

三、防火墙和 WAF:只看 UA 的規則最危險

不少防護規則的做法是“UA 里没有常见浏览器标识就拦”,或者“空 UA 直接拉黑”。而搜尋蜘蛛的 UA 往往不含浏览器特征串,正好命中規則。更麻烦的是,有些蜘蛛首次訪問时 UA 會比較简單,後續才带上完整标识。

相對稳妥一些的判断方式是反向解析 IP 归属:確認来源 IP 的 PTR 记錄属于對應搜尋引擎,再做正向解析核對。只看 UA,几乎等于把判断權交给任何會改 UA 的人。

還要注意這几類規則

  • 直接拉黑整個資料中心 IP 段,而部分抓取节点就在云机房里。
  • 地区限制:入口頁只對某些國家或地区開放,抓取节点不在范围内就被挡。
  • 强制 HTTPS 跳轉或强制 Cookie、JS 驗證,蜘蛛拿不到跳轉後的内容。

四、频率限制把搜尋蜘蛛当成攻击流量

入口頁的目标本来就是让蜘蛛多看几個 URL,所以它的請求频率天然比普通訪客高。如果按“單 IP 每分钟請求數”做硬限速,很容易在蜘蛛刚進入抓取狀態时就把它限掉。

可以留意的几点:

  • 限速阈值按 IP 段 而不是單 IP 設定,搜尋抓取往往来自同一段内的多個 IP。
  • 被限速时返回 429 比直接返回 403 更友好,至少明确告知是频率問题。
  • 在服務器压力允许的前提下,對已校驗過的搜尋引擎 IP 段适当放宽限速。
  • 入口頁大多是小文件、静態頁,做好缓存即可,不必動用過于复杂的動態防護。

五、一套简單的自查顺序

  1. 直接訪問入口頁,確認能正常返回 200,且内容不是驗證頁或跳轉頁。
  2. 查看 robots.txt 是否可正常訪問、是否有针對入口頁的 Disallow。
  3. 翻 WAF、CDN 日誌,按狀態碼筛 403、405、429,看拦截是否集中在搜尋引擎 IP 段。
  4. 临时對已校驗的 IP 段放宽規則,观察訪問日誌里是否出現蜘蛛請求。
  5. 把日誌中的 UA 與真實 IP 反查结果交叉驗證,確認来訪的确實是搜尋蜘蛛。

六、別把“屏蔽”当成常規手段

用拦截来解决抓取問题,本质上是先把入口堵上,再抱怨没人来。入口頁该做的是保持稳定可訪問、结构清晰、更新有节奏,而不是靠一堆隐蔽規則去篩選来訪者。如果确實需要防刷,建议把規則做细:按行為特征判断,而不是按 UA 或整段 IP 一刀切。

最後提醒一句:拦截策略和抓取策略最好由同一拨人一起讨论,否則很容易出現“运营改了連結、运维加了規則”這種互相抵消的情况,排查起来也更費時間。