给入口頁挂上 CDN 或 WAF,原本是為了挡掉掃描、采集和恶意請求。但這類防護的判断逻辑是“像不像正常用戶”,而搜尋引擎蜘蛛的行為和真人差別很大:它請求密集、並發高、不执行某些脚本、也不會去点驗證碼。配置稍微偏一点,防護拦下的第一批流量里就可能有蜘蛛。
哪些防護設定最容易誤伤蜘蛛
UA 與 IP 双向校驗過嚴
有些站点為了防伪蜘蛛,會同时校驗 UA 和来源 IP。這個思路本身没错,但 IP 段是會調整的,寫死的白名單過一段時間就可能失效;反過来,如果只看 UA,又等于放行了所有自称 Googlebot 的請求。比較稳妥的做法是以官方公布或長期维護的 IP 段為准,並且定期更新,而不是長期依赖手工整理的临时列表。
频率限制與 CC 防護阈值過低
蜘蛛抓取入口頁时往往在短時間内集中請求,尤其是入口頁數量多、連結层級浅的时候。如果 CC 防護按“單 IP 每分钟請求數”来限流,蜘蛛很容易触發阈值,之後拿到的就是 403 或 429。這類拦截在日誌里通常表現為一批狀態碼異常、時間集中的請求,而不是零散分布。
JS 挑战、驗證碼與强制跳轉
部分防護會先用一段 JS 計算出 Cookie 再放行。主流搜尋引擎蜘蛛大多不执行這段脚本,于是每次請求都會被重新挑战,最後干脆放弃。驗證碼同理。這類設定開啟後,抓取量下降往往不是内容問题,而是入口頁對蜘蛛變成了“無法通過的门”。
IP 信誉库與地区封禁
共用的 IP 段里如果有其他站点做過異常行為,整段 IP 可能被标记。蜘蛛的出口 IP 通常来自資料中心,天然更容易落在高風險分類里。地区封禁也會誤伤:搜尋引擎的抓取节点分布在不同区域,封掉某些地区,等于封掉一部分抓取来源。
怎么判断蜘蛛是不是被挡住了
- 對比回源日誌和 CDN 邊缘日誌:邊缘日誌里請求很多、回源却很少,說明流量在防護层就被處理掉了。
- 看狀態碼分布:403、429、503 集中出現,且 UA 是蜘蛛,就要怀疑防護規則。
- 用官方提供的抓取測試工具發起一次真實抓取,观察返回的是正常頁面還是挑战頁。
- 临时把防護等級調低一段時間,观察抓取量是否有明顯變化,再决定是否調整規則。
放行與排查可以先做的几件事
- 用官方 IP 段做白名單,而不是只用 UA 字符串判断。
- 给蜘蛛單獨设一條規則:不限频、不挑战 JS、不彈驗證碼。
- 把静態资源和入口頁 HTML 分開處理,入口頁不要跟着图片、脚本一起排队。
- 记錄被拦請求的 UA、IP 與狀態碼,方便後續复盘是誤伤還是真恶意。
- 調整規則後不要立刻下结论,抓取恢复通常需要几天時間观察。
防護和抓取不是二選一。多數情况下,只要把蜘蛛识別和普通訪客识別分開,两邊的目标都能兼顾,真正需要取舍的场景並不多。
需要提醒的是,放行蜘蛛並不等于抓取量一定上升,入口頁的内容质量、連結结构和服務器响應速度同样在起作用。防護只是把门打開,蜘蛛愿不愿意進来、進来之後走多遠,還要看入口頁本身。