搜尋抓取

把搜尋蜘蛛拦在门外:誤封爬虫怎样中断 URL 發現

不少站点為了防掃描和恶意抓取上了 WAF、限速與地域規則,却在不经意間把搜尋蜘蛛一起拦在门外。本文梳理常见的誤封触發点、如何用反向 DNS 確認蜘蛛身份,以及放行蜘蛛流量时的合理顺序,帮助站点避免因誤封導致 URL 發現中断、新頁面迟迟不被抓取。

搜尋抓取

把搜尋蜘蛛拦在门外:誤封爬虫怎样中断 URL 發現

網站被掃描、被撞库、被恶意抓取是常事,于是很多站点會装上 WAF、CDN 防護規則,或者按 IP、按 User-Agent 做频率限制。問题是這些規則大多奉行“先拦再说”,搜尋蜘蛛一旦被归進拦截名單,URL 發現就會在入口處断掉,而且從站内看几乎没有明顯異常——頁面自己能打開,只是蜘蛛進不来。

誤封通常是多层規則叠加的结果

很少有人會主動把蜘蛛加進黑名單,實际發生的拦截多来自几层規則的叠加:CDN 的地域限制、WAF 的通用攻击特征库、服務器上的並發限速,以及 Web 服務层面的 UA 過滤。單看每一层都“不算嚴”,合起来就可能把正常抓取請求挡在第一步。

  • 把 UA 中含有“bot”的請求一律拒绝,誤伤 Googlebot、Bingbot 等正規爬虫;
  • 對同一 IP 段做並發或 QPS 限速,蜘蛛集中抓取时触發封禁;
  • WAF 把带參數的 URL 判成注入攻击,列表頁、篩選頁最先被拦;
  • 按地域屏蔽,而蜘蛛的出口 IP 恰好落在被屏蔽的地区;
  • 驗證類挑战頁(JS 挑战、滑块)蜘蛛無法执行,請求停在挑战頁上。

先確認被拦的是不是真蜘蛛

發現流量被拦之後,不要急着放開整段 IP,先把“是不是真蜘蛛”確認清楚,否則等于给伪装爬虫開门。比較可靠的做法是做反向 DNS 查询:從訪問日誌里取到 IP,反查主机名,再正向解析一次,看是否對得上官方公布的域名後缀。主流搜尋引擎都提供官方的驗證方式,IP 段也有公開列表,可以定期比對。

同时看三组資料:服務器訪問日誌里的狀態碼分布(403、429、503 集中在哪些路径)、搜尋资源平台里的抓取統計(抓取請求數、平均响應時間是否突然下滑)、以及 robots.txt 抓取測試工具返回的结果。三邊對得上,基本能定位拦截發生在哪一层。

放開訪問时的顺序

  1. 先放行已驗證的蜘蛛 IP,而不是放行整個網段或所有 UA;
  2. 把 robots.txt、Sitemap、主要栏目頁加入限速白名單,這些是 URL 發現的入口;
  3. 為蜘蛛單獨設定一條高阈值或不限速的規則,與普通用戶流量分開統計;
  4. 观察一到两周,確認抓取請求量恢复正常,且没有明顯異常流量;
  5. 再逐步收紧其他規則,避免一次性全開带来風險。

被拦住的代價不只是抓不到

蜘蛛訪問失敗时通常會重试,但如果连續拿到 403 或 429,抓取频率會被主動下調,新發布的 URL 排進队列的時間被拉長,Sitemap 里提交的地址也可能迟迟不被訪問。更麻烦的是這種狀態没有报错提示,站内一切照常,只有抓取日誌里能看到入口頁面的失敗记錄。

排查 URL 發現問题时,先確認蜘蛛能不能進来,再去看内鏈和 Sitemap。入口被封的情况下,後面所有優化都無從生效。

一份可落地的自检清單

  • 確認 WAF/CDN 規則中没有针對通用爬虫 UA 的一刀切拒绝;
  • 驗證通過反向 DNS 確認的蜘蛛 IP 不触發限速與地域封禁;
  • robots.txt 與 Sitemap 地址不落在需要登入或需要 JS 挑战的路径下;
  • 定期检查抓取統計中的失敗比例,尤其關注首頁與栏目頁;
  • 規則變更後保留一段观察期,记錄抓取量變化再决定下一步。

防護本身没有错,問题在于防護規則與抓取通路之間缺少一层校對。把已驗證的蜘蛛從風控名單里單獨拎出来,用白名單的思路管理,URL 發現的路才不會被自己堵上。