入口頁内容正常、連結可訪問、狀態碼也没問题,但日誌里長期看不到搜尋蜘蛛——這種情况很多时候不是“蜘蛛不来”,而是請求在到達入口頁之前就被 CDN、WAF 或主机防火墙挡掉了。要定位問题,需要按從外到内的顺序逐层確認。
搜尋蜘蛛到入口頁之間要经過哪些层
一次抓取請求通常要穿過下面几层,任意一层返回非预期响應,蜘蛛拿到的都不是你的入口頁:
- CDN 节点:預設開啟的机器人挑战、地区限制、按 IP 的速率限制。
- WAF:UA 黑名單、請求头缺失判定、參數關鍵詞規則。
- 源站防火墙或安全组:只放行白名單 IP,其余直接丢弃或拒绝。
- 應用层:同一 IP 高频訪問触發限流,或需要执行 JS 才能通過驗證。
這几层都可能给出“看起来正常”的响應,所以單看日誌條數容易誤判。
被拦截时常见的几種表現
- 訪問日誌里几乎没有搜尋蜘蛛 UA,或者只有零星几條。
- 返回 403、406、429、503,而不是入口頁的 200。
- 返回 200,但内容是驗證碼頁、跳轉脚本或“正在检查浏览器”的中間頁。
- 同一時間你自己的浏览器能打開,用蜘蛛 UA 就失敗,說明差异来自規則判定。
- 間歇性失敗:訪問频率稍高就被限流,低频率时又能通過。
一套可操作的排查步骤
- 核對官方 IP。先從搜尋引擎官方文档获取蜘蛛 IP 段,確認日誌里出現的 IP 是否真的属于该引擎,避免把伪装爬虫当證據。
- 复現請求。用命令行請求入口頁,带上蜘蛛 UA 和常见請求头,观察狀態碼、响應头和正文長度。
- 切換對比。同一時間分別用蜘蛛 UA、浏览器 UA 和空 UA 請求,若只有蜘蛛 UA 或空 UA 被拦,基本可以鎖定 WAF 規則。
- 绕過 CDN 直连源站。用源站 IP 加 Host 头請求。直连正常、走 CDN 失敗,問题就在 CDN 侧。
- 查看拦截日誌。CDN 和 WAF 後台一般有拦截事件记錄,能看到命中哪條規則、返回什么狀態碼。
- 压一下频率。短時間内连續請求同一入口頁,看是否在某個次數後開始返回 429,用以判断限流阈值。
確認後可以怎么處理
方向取决于拦住的是哪一层。CDN 或 WAF 侧通常需要把搜尋蜘蛛的官方 IP 段加入放行名單,並關閉针對入口頁的机器人挑战與 JS 驗證;源站防火墙則要把對應 IP 段加進白名單,同时保留對其他来源的限制。频率限制建议按入口頁的實际抓取量留出余量,避免蜘蛛正常訪問就触發限流。
另外,入口頁如果用了較多静態资源或跳轉,尽量保證首屏 HTML 直接包含目标連結,不要让蜘蛛必须执行脚本才能拿到内容。多层防護同时開的时候,改完一层记得复测,否則很容易出現“改好了但没生效”的错觉。
拦截問题排查的核心是分层驗證:先確認請求到没到源站,再看响應是否符合预期。把“蜘蛛没来”和“来了被挡”分開,後續優化才有明确方向。