搜尋抓取

当蜘蛛被 WAF 拦住:URL 能發現,抓取却進不来

URL 發現和抓取是两回事。CDN、WAF、防火墙、限速規則如果誤拦搜尋引擎蜘蛛,Sitemap 和日誌里能看到入口,實际抓取却會變成 403、503 或空响應。本文從日誌特征、常见誤拦配置和驗證方法入手,梳理排查顺序。

搜尋抓取

当蜘蛛被 WAF 拦住:URL 能發現,抓取却進不来

URL 發現正常,不代表抓取通道畅通

Sitemap 提交了,内鏈也加了,日誌里能看到蜘蛛訪問首頁或 sitemap,但目标 URL 始终没有抓取记錄。這種情况下,問题往往不在 URL 發現,而在抓取請求進入服務器之前就被拦下了。CDN、WAF、云防火墙、限速插件都可能成為這道闸门。

蜘蛛發起請求时,和普通用戶浏览器没有本质区別:同样经過 DNS、CDN 节点、WAF 規則、源站防火墙。如果其中某一层返回 403、406、429、503,或者直接断開连接,蜘蛛拿不到内容,也就不會繼續深入抓取。

常见的誤拦方式

  • User-Agent 黑名單過宽:規則里寫了包含“bot”“spider”“crawler”就拦截,结果把正常搜尋引擎蜘蛛也挡在外面。蜘蛛池工具常伪造 UA,但搜尋引擎蜘蛛也有固定 UA,不能一概而论。
  • IP 段未放行:WAF 只允许已知 IP 訪問,但搜尋引擎蜘蛛的出口 IP 會變化或未被及时更新。舊 IP 段失效後,新請求會被当成異常流量。
  • 频率限制過低:CDN 或防火墙按 IP 限速,蜘蛛短時間内抓取多個 URL 时触發 429。抓取队列會因此降低频率,嚴重时停止訪問该目錄。
  • 地域封禁:只允许國内 IP 訪問,而蜘蛛节点在海外,或者反過来。地域規則命中後直接返回 403,日誌里看不到源站记錄。
  • JS 挑战與驗證碼:WAF 對疑似机器人返回挑战頁,蜘蛛無法执行 JS,只能拿到空頁面或跳轉頁,URL 後續抓取路径就断了。

怎么判断是誤拦而不是其他問题

先看 CDN 和 WAF 日誌,而不是只看源站日誌。源站日誌没有记錄,不代表蜘蛛没来,可能請求在邊缘节点就被處理掉了。重点看狀態碼分布:如果某個目錄集中出現 403、429、503,且 UA 是搜尋引擎蜘蛛,就要怀疑規則誤拦。

再看响應内容。用站長工具或日誌里的 UA、IP 做一次模拟請求,观察返回的是正常 HTML、驗證碼頁、空响應還是跳轉。如果模拟請求能拿到内容,但蜘蛛抓取记錄仍然缺失,可能是 IP 或 UA 组合被單獨限制。

不要只用浏览器打開頁面来判断。浏览器带 Cookie、执行 JS、走本地網絡,和蜘蛛的請求环境差別很大。

調整配置时的顺序

  1. 先把搜尋引擎蜘蛛的官方 UA 和 IP 段加入白名單,優先于其他限速和黑名單規則。
  2. 检查 WAF 規則中是否有“包含 bot 即拦截”這類宽泛條件,改成精确匹配或只拦已知恶意特征。
  3. 對已驗證的蜘蛛 IP 放宽频率限制,但保留異常突增的监控,避免影响正常防護。
  4. 如果使用 JS 挑战,给搜尋引擎蜘蛛單獨放行,不要让它們走驗證碼流程。
  5. 調整後观察 3 到 7 天日誌,確認目标 URL 是否出現抓取记錄,狀態碼是否回到 200。

驗證與复盘

改完規則後,不要只看首頁。選几個之前被拦的深层 URL,结合 CDN 日誌和源站日誌,確認請求完整到達源站並返回正常内容。如果仍然失敗,逐层排查:DNS 解析、CDN 回源、WAF 規則、源站防火墙、應用层限速。

另外,蜘蛛池或第三方抓取工具产生的流量可能触發防護規則,這本身不一定是誤拦。区分方法是看 UA、IP 和請求路径是否符合搜尋引擎公開信息。如果大部分異常請求来自非官方 IP,就不應该為了放行蜘蛛而關閉整体防護。

最後,把這次調整记錄到运维文档里,包括規則名稱、修改時間、驗證 URL 和结果。下次抓取频次下降时,可以按同样顺序快速定位,而不是從内容层面反复猜测。