抓取入口不可達的原因,很多时候不在 DNS、證书或 robots 文件,而在站点前面那一层安全策略。云 WAF、CC 防護、IP 频率限制、地域封鎖,任何一條規則命中搜尋蜘蛛的請求,都可能在服務器日誌里留下一個 403,或者在統計面板上表現為抓取量突然下滑,而站点本身並没有做任何改動。
先分清两種拦截表現
一種是硬拦截:返回 403、406 或 503,蜘蛛直接拿不到内容。另一種更隐蔽:返回 200,但正文是一個 JavaScript 挑战頁或驗證碼頁,蜘蛛解析後得到的是一段空壳内容,長期可能被当作低质量頁面處理。排查时要先把這两種情况分開,因為成因和處理方式完全不同。
常见的誤拦来源
- UA 黑名單正則過宽:為了挡采集程序,規則寫成包含 bot、spider、crawl 等關鍵詞就拦,结果把正常搜尋蜘蛛一並挡掉。
- CC 防護與频率限制:蜘蛛在短時間内對同一列表頁或分頁發出較多請求,触發阈值後整段来源 IP 被临时限速。
- 地域與海外 IP 封鎖:蜘蛛节点分布广泛,只放行本地訪問會拦掉相当一部分抓取来源。
- JS 挑战與驗證中間頁:開啟全站挑战後,蜘蛛無法执行脚本,拿到的是占位 HTML。
- CDN 與源站策略不一致:CDN 层放行,源站 WAF 仍拦截,日誌上看起来像随机失敗。
核對顺序建议
- 從訪問日誌中筛出蜘蛛 UA 的請求,按狀態碼和响應体大小分组,先確認是硬拦截還是空壳頁。
- 把被拦請求的時間、路径、来源 IP 與 WAF 拦截日誌對齐,找到具体命中的規則名稱。
- 用相同 URL 分別带蜘蛛 UA、普通 UA 和不带 UA 發請求,對比狀態碼與正文差异。
- 检查响應中是否包含跳轉脚本或 meta refresh,確認是否存在挑战頁中間层。
- 放行时優先按 IP 段或反向解析校驗,而不是只匹配 UA 字符串。
- 放行後只改這一項,观察一到两周的抓取量與狀態碼分布,再决定是否繼續調整其他策略。
几個容易踩的坑
第一,只白名單 UA 字符串並不稳妥,UA 可以伪造,也可能被後續規則覆盖,结合来源 IP 段做双向校驗更可靠。第二,如果把拦截响應的狀態碼寫成 503,蜘蛛會判断為临时不可用,從而拉長回訪間隔,短期抓取量下降往往比返回 403 更明顯。第三,限速規則常常作用于整個網段,蜘蛛請求分散在多個节点上,可能只有一部分节点被限制,日誌看起来是随机失敗,容易被誤判成服務器性能問题。
排查入口不可達时,先看安全层的命中记錄,再去看服務器负载,顺序反了會浪費很多時間。
把放行策略做成長期机制
建议把蜘蛛放行規則單獨成组,和面向普通用戶的防護規則分開维護;每次調整安全策略时,把搜尋抓取的狀態碼分布加入观察指标;對關键栏目頁和分頁做定期抽查,確認返回的是正文而不是挑战頁。這些動作的目的是保證入口可達、内容可解析,抓取节奏與收錄结果仍受多種因素共同影响,無法靠單一配置决定。