搜尋抓取

WAF、限速與蜘蛛抓取:站点防護誤伤爬虫时怎么排查

蜘蛛請求被 WAF 或限速規則拦掉时,日誌里可能只留下 403 和 429,抓取量却悄悄下滑。本文整理誤伤的常见来源、如何驗證来訪者是否是真蜘蛛,以及按 IP 段放行时的注意事項和放行後该观察哪些信号。

搜尋抓取

WAF、限速與蜘蛛抓取:站点防護誤伤爬虫时怎么排查

很多站長排查抓取問题时,會把注意力放在 Sitemap、内鏈和响應時間上,却忽略了一個更前置的环节:請求根本没到站点程序,就被 WAF、限速或防火墙拦掉了。蜘蛛拿到的是 403 或 429,而你在應用日誌里什么都看不到。

被拦截时的典型表現

  • 服務器訪問日誌里,来自已知爬虫的請求大量返回 403、429,或者干脆没有记錄,只在 WAF 日誌中出現;
  • 某個時間点起抓取频次断崖式下降,但站点内容和内鏈结构並没有改動;
  • 抓取統計與自家日誌對不上,Sitemap 長時間停留在“已提交未抓取”;
  • 只有带參數的 URL 被拦,首頁和静態頁正常,這類情况通常是規則命中了查询字符串。

誤伤一般来自這几個地方

WAF 的通用規則集

多數 WAF 預設規則會拦截含 SQL 關键字、脚本片段、超長參數或特殊字符的請求。而站点的篩選參數、搜尋頁 URL、老版本 CMS 的路径里,恰好可能包含這些字符串,蜘蛛抓到這些 URL 时就會被一並拒掉。

频率限制與 CC 防護

蜘蛛抓取本身就是短時間内的大量請求。如果限速策略只按 IP 計數、不区分来源,专业爬虫很容易被当成攻击流量。反過来,有些站点為了“防采集”把阈值調得极低,正常訪客滑動列表也會触發拦截。

User-Agent 黑名單

UA 字符串可以被任意伪造,用黑名單去拦爬虫既拦不住恶意采集,又容易誤伤:部分防護产品的 UA 库更新不及时,會把新版爬虫标识当成可疑對象。而用 UA 做白名單同样不可靠,攻击者複製字符串就能绕過。

先確認是不是真蜘蛛,再谈放行

不要只看 UA。更稳妥的做法是核對請求来源 IP 是否属于搜尋引擎官方公布的 IP 段,或者對 IP 做反向 DNS 查询,確認主机名归属後再正向解析回去,两者能對上才可信。同时把 WAF 日誌、服務器訪問日誌和抓取統計資料放在一起對照,看被拦的路径是否集中在某几類 URL 上。

放行之前先驗證身份,放行之後保留其他防護——按 UA 白名單開口子,等于给所有伪造者開门。

放行时要注意的几件事

  1. 按官方 IP 段放行,而不是按 UA 字符串放行,並定期更新 IP 段列表,搜尋引擎偶尔會調整出口地址。
  2. 對已驗證的爬虫單獨設定限速阈值,與普通訪客、可疑流量分開計數,避免一锅端。
  3. 只對確認為誤伤的規則做例外,不要為了让蜘蛛通過而整体關閉 WAF。
  4. 保留 403、429 的日誌记錄,出問题时才能回溯是哪條規則先動的。

放行之後观察什么

調整後不要马上認為問题解决。接下来几周留意三個信号:訪問日誌中爬虫請求的狀態碼分布是否回到以 200 為主;抓取總量是否逐步回升而不是一次性暴涨;Sitemap 與重点目錄的抓取频次是否恢复。如果抓取量回来了,但深层頁面仍然很少被訪問,那問题可能已经不在防護层,而要回到内鏈结构和抓取路径上繼續排查。

站点防護和蜘蛛抓取並非天然對立。把驗證做扎實、把放行范围收窄到可確認的身份上,既能挡住恶意流量,也不會把自己的抓取通道一起堵掉。