做蜘蛛池时,很多人會盯着入口頁的 HTML、連結和狀態碼,却忽略了一個更靠前的环节:請求還没到服務器,就被 CDN 或 WAF 拦掉了。入口頁在浏览器里能正常打開,不代表蜘蛛也能拿到同样的响應。如果日誌里長期看不到蜘蛛,或者回源日誌里只有少量請求,值得先查一查這一层。
蜘蛛在 CDN/WAF 层可能遇到什么
CDN 和 WAF 的預設策略通常是防恶意流量,而不是為搜尋引擎蜘蛛让路。常见拦截包括:
- UA 黑名單:有些安全規則會把包含“spider”“bot”“crawler”的 UA 直接拦截。正規蜘蛛的 UA 里恰好有這些词,容易被誤伤。
- IP 信誉库:蜘蛛出口 IP 如果被标记為“資料中心”或“代理”,可能触發驗證。部分 CDN 會直接返回 403 或 429。
- 速率限制:入口頁連結多、蜘蛛短時間集中抓取,可能被当成 CC 攻击。表現是前几個請求正常,後面開始超时或 429。
- JS 挑战與驗證碼:開啟浏览器完整性检查後,蜘蛛不會执行 JS,拿不到挑战结果,頁面就停在驗證頁。
- 缓存規則冲突:CDN 缓存了错誤响應,後續蜘蛛請求直接命中 403 或 5xx,源站甚至收不到請求。
怎么判断是這一层的問题
不要只看頁面能不能打開。可以用几個動作交叉驗證:
- 用 curl 带上常见蜘蛛 UA 訪問入口頁,看返回狀態碼和响應体。再用普通浏览器 UA 訪問同一個 URL,對比差异。
- 查看 CDN 或 WAF 的請求日誌,過滤蜘蛛 UA 和已知蜘蛛 IP 段,看是否出現 403、429、503 或挑战頁面。
- 检查回源日誌。如果 CDN 日誌有請求、源站日誌没有,說明請求在邊缘节点就被處理掉了。
- 看响應头里的 server、cf-ray、x-cache 等字段,判断請求经過了哪一层,以及缓存狀態。
几個容易誤伤的配置
下面這些設定本身不算错,但用在蜘蛛池入口頁上要格外小心:
- 把“spider”加入 WAF 黑名單關鍵詞,理由是“防采集”。這會把正規蜘蛛一起挡掉。
- 速率限制按 IP 算得很低,入口頁連結一多,蜘蛛连續請求就被限流。
- 强制開啟 JS 挑战,但入口頁没有做服務端渲染,蜘蛛只能看到空頁面或驗證頁。
- 只允许特定地区 IP 訪問,而蜘蛛出口 IP 不在允许范围内。
- HTTPS 證书鏈不完整,蜘蛛在 TLS 握手阶段就失敗,日誌里可能连 HTTP 狀態碼都没有。
放行蜘蛛的稳妥做法
比較稳妥的思路是“先识別,再放行,別只認 UA”。
- 维護已知蜘蛛的 IP 段白名單。搜尋引擎官方通常會公布出口 IP 列表,定期核對更新。
- 對入口頁路径單獨設定策略,降低或關閉 JS 挑战、驗證碼和嚴格速率限制。
- 不要僅凭 UA 放行,因為 UA 可以伪造;也不要僅凭 IP 拒绝,因為 IP 段會調整。
- 保留 CDN 日誌和源站日誌,方便出現抓取異常时對比。日誌保留時間尽量覆盖一個抓取周期。
- 如果用了多級 CDN 或反代,確認每一层都放行了蜘蛛,避免只放行最外层。
CDN/WAF 放行只是让蜘蛛能到達入口頁,它不解决 URL 發現效率,也不等于目标頁會被收錄。發現鏈路通了之後,内容质量、站点结构和目标頁本身的問题仍然要單獨處理。
如果你發現蜘蛛池入口頁“浏览器能開、蜘蛛不来”,不妨先按上面的顺序查一遍鏈路。很多时候問题不在模板和連結,而在請求還没到源站就被拦下了。