URL 發現正常,不代表抓取通道畅通
Sitemap 提交了,内鏈也加了,日誌里能看到蜘蛛訪問首頁或 sitemap,但目标 URL 始终没有抓取记錄。這種情况下,問题往往不在 URL 發現,而在抓取請求進入服務器之前就被拦下了。CDN、WAF、云防火墙、限速插件都可能成為這道闸门。
蜘蛛發起請求时,和普通用戶浏览器没有本质区別:同样经過 DNS、CDN 节点、WAF 規則、源站防火墙。如果其中某一层返回 403、406、429、503,或者直接断開连接,蜘蛛拿不到内容,也就不會繼續深入抓取。
常见的誤拦方式
- User-Agent 黑名單過宽:規則里寫了包含“bot”“spider”“crawler”就拦截,结果把正常搜尋引擎蜘蛛也挡在外面。蜘蛛池工具常伪造 UA,但搜尋引擎蜘蛛也有固定 UA,不能一概而论。
- IP 段未放行:WAF 只允许已知 IP 訪問,但搜尋引擎蜘蛛的出口 IP 會變化或未被及时更新。舊 IP 段失效後,新請求會被当成異常流量。
- 频率限制過低:CDN 或防火墙按 IP 限速,蜘蛛短時間内抓取多個 URL 时触發 429。抓取队列會因此降低频率,嚴重时停止訪問该目錄。
- 地域封禁:只允许國内 IP 訪問,而蜘蛛节点在海外,或者反過来。地域規則命中後直接返回 403,日誌里看不到源站记錄。
- JS 挑战與驗證碼:WAF 對疑似机器人返回挑战頁,蜘蛛無法执行 JS,只能拿到空頁面或跳轉頁,URL 後續抓取路径就断了。
怎么判断是誤拦而不是其他問题
先看 CDN 和 WAF 日誌,而不是只看源站日誌。源站日誌没有记錄,不代表蜘蛛没来,可能請求在邊缘节点就被處理掉了。重点看狀態碼分布:如果某個目錄集中出現 403、429、503,且 UA 是搜尋引擎蜘蛛,就要怀疑規則誤拦。
再看响應内容。用站長工具或日誌里的 UA、IP 做一次模拟請求,观察返回的是正常 HTML、驗證碼頁、空响應還是跳轉。如果模拟請求能拿到内容,但蜘蛛抓取记錄仍然缺失,可能是 IP 或 UA 组合被單獨限制。
不要只用浏览器打開頁面来判断。浏览器带 Cookie、执行 JS、走本地網絡,和蜘蛛的請求环境差別很大。
調整配置时的顺序
- 先把搜尋引擎蜘蛛的官方 UA 和 IP 段加入白名單,優先于其他限速和黑名單規則。
- 检查 WAF 規則中是否有“包含 bot 即拦截”這類宽泛條件,改成精确匹配或只拦已知恶意特征。
- 對已驗證的蜘蛛 IP 放宽频率限制,但保留異常突增的监控,避免影响正常防護。
- 如果使用 JS 挑战,给搜尋引擎蜘蛛單獨放行,不要让它們走驗證碼流程。
- 調整後观察 3 到 7 天日誌,確認目标 URL 是否出現抓取记錄,狀態碼是否回到 200。
驗證與复盘
改完規則後,不要只看首頁。選几個之前被拦的深层 URL,结合 CDN 日誌和源站日誌,確認請求完整到達源站並返回正常内容。如果仍然失敗,逐层排查:DNS 解析、CDN 回源、WAF 規則、源站防火墙、應用层限速。
另外,蜘蛛池或第三方抓取工具产生的流量可能触發防護規則,這本身不一定是誤拦。区分方法是看 UA、IP 和請求路径是否符合搜尋引擎公開信息。如果大部分異常請求来自非官方 IP,就不應该為了放行蜘蛛而關閉整体防護。
最後,把這次調整记錄到运维文档里,包括規則名稱、修改時間、驗證 URL 和结果。下次抓取频次下降时,可以按同样顺序快速定位,而不是從内容层面反复猜测。