先分清是“進不来”還是“進来了没抓”
站点运营中遇到抓取量下滑,很多人的第一反應是内容不够、内鏈太少。但排查顺序里更靠前的一步,其實是確認蜘蛛的請求有没有真正到達服務器。如果請求在邊缘节点或防火墙那一层就被挡掉,後面關于内容质量、栏目结构、更新节奏的讨论都没有意义。
判断方法不复杂:打開訪問日誌,按蜘蛛的 UA 和来源 IP 段篩選,看最近几天有没有對應记錄,以及返回的狀態碼是什么。403、429、503 這類狀態碼集中出現,通常說明問题出在“放行”环节,而不是内容环节。
常见的几類拦截来源
WAF 與安全規則
安全防護預設是宁可错杀,這對正常訪客影响不大,對蜘蛛却可能是致命的。容易被忽略的几種情况:
- 規則誤伤:URL 带較長查询參數、含特殊字符,或路径形似注入语句时被直接拦下;
- 频率阈值:單位時間内同一 IP 請求數過多,触發限速,返回 429;
- UA 黑名單:早期為了挡采集加的規則,後来把搜尋蜘蛛一起挡住了;
- 地域限制:只對特定地区開放,而蜘蛛节点恰好不在放行范围内。
CDN 與云防護的机器人管理
不少 CDN 預設開啟了机器人识別與人机校驗,普通訪客看到的是一個驗證頁,蜘蛛看到的可能是 403 或一段空的 JS 頁面。這類拦截在日誌里往往表現為狀態碼正常、但响應体很小、内容為空,需要抓包或直接模拟請求才能看出来。
源站侧的连接限制
除了安全层,源站自身也可能成為瓶颈:连接數上限偏低、Keep-Alive 配置過短、並發线程不足,都會让並發抓取變成大量超时。這類問题在高频抓取时更明顯。
维護窗口與計划内變更
运维動作對抓取的影响经常被低估。下面這些场景里,蜘蛛拿到的不是内容,而是一次失敗請求:
- DNS 切換後 TTL 尚未過期,新舊解析並存,部分請求打到已经停止服務的舊 IP;
- 證书過期或配置错誤,TLS 握手失敗,连接根本建立不起来;
- 迁移期間只留了内網入口或临时提示頁,外部訪問直接返回 502、503;
- 資料库备份、全量重建索引占满资源,响應時間被拉長到超时。
维護本身不是問题,問题在于维護期間正好有一批新 URL 上线,却没有任何一個爬虫能訪問到它們。
减少誤伤的几個處理思路
- 先驗證再放行。對声称是搜尋蜘蛛的請求做来源驗證,比如反向 DNS 解析,確認後再加入白名單,比直接按 UA 字符串放行可靠得多。
- 把重要路径單獨加規則。站点地图、列表頁、詳情頁這類需要被發現的路径,可以從嚴格的频控策略里排除。
- 维護時間避開内容發布。大版本發布、栏目調整尽量安排在流量低峰,並保證维護期間返回的是明确的 503 加 Retry-After,而不是空白頁。
- 變更後做一次可用性回归。用不带 Cookie、不带登入態的請求,從外部網絡訪問几個關键 URL,確認狀態碼與内容都正常。
- 订阅證书與域名到期提醒。這類故障没有征兆,但影响范围往往最大。
把“可訪問性”当成日常指标
抓取量、狀態碼分布、响應時間,這几項資料放在一起看,比單看收錄數字更能說明問题。蜘蛛能稳定地進来、拿到完整内容,是所有 URL 發現手段的前提。安全策略、CDN 配置和运维計划各自獨立,但它們共同决定了這個前提是否成立,值得在站点运营的例行检查里占一個固定位置。