站点运营

站点运营:抓取被挡住时,先查防火墙、CDN 與维護窗口

搜尋蜘蛛抓不到頁面,未必是内容和連結的問题。WAF 規則、CDN 的机器人管理、频率限制,以及計划内的维護窗口,都可能让請求在到達源站前就被拦掉。本文按排查顺序梳理常见拦截来源、日誌自查方法,以及降低誤伤的處理思路。

站点运营

站点运营:抓取被挡住时,先查防火墙、CDN 與维護窗口

先分清是“進不来”還是“進来了没抓”

站点运营中遇到抓取量下滑,很多人的第一反應是内容不够、内鏈太少。但排查顺序里更靠前的一步,其實是確認蜘蛛的請求有没有真正到達服務器。如果請求在邊缘节点或防火墙那一层就被挡掉,後面關于内容质量、栏目结构、更新节奏的讨论都没有意义。

判断方法不复杂:打開訪問日誌,按蜘蛛的 UA 和来源 IP 段篩選,看最近几天有没有對應记錄,以及返回的狀態碼是什么。403、429、503 這類狀態碼集中出現,通常說明問题出在“放行”环节,而不是内容环节。

常见的几類拦截来源

WAF 與安全規則

安全防護預設是宁可错杀,這對正常訪客影响不大,對蜘蛛却可能是致命的。容易被忽略的几種情况:

  • 規則誤伤:URL 带較長查询參數、含特殊字符,或路径形似注入语句时被直接拦下;
  • 频率阈值:單位時間内同一 IP 請求數過多,触發限速,返回 429;
  • UA 黑名單:早期為了挡采集加的規則,後来把搜尋蜘蛛一起挡住了;
  • 地域限制:只對特定地区開放,而蜘蛛节点恰好不在放行范围内。

CDN 與云防護的机器人管理

不少 CDN 預設開啟了机器人识別與人机校驗,普通訪客看到的是一個驗證頁,蜘蛛看到的可能是 403 或一段空的 JS 頁面。這類拦截在日誌里往往表現為狀態碼正常、但响應体很小、内容為空,需要抓包或直接模拟請求才能看出来。

源站侧的连接限制

除了安全层,源站自身也可能成為瓶颈:连接數上限偏低、Keep-Alive 配置過短、並發线程不足,都會让並發抓取變成大量超时。這類問题在高频抓取时更明顯。

维護窗口與計划内變更

运维動作對抓取的影响经常被低估。下面這些场景里,蜘蛛拿到的不是内容,而是一次失敗請求:

  • DNS 切換後 TTL 尚未過期,新舊解析並存,部分請求打到已经停止服務的舊 IP;
  • 證书過期或配置错誤,TLS 握手失敗,连接根本建立不起来;
  • 迁移期間只留了内網入口或临时提示頁,外部訪問直接返回 502、503;
  • 資料库备份、全量重建索引占满资源,响應時間被拉長到超时。
维護本身不是問题,問题在于维護期間正好有一批新 URL 上线,却没有任何一個爬虫能訪問到它們。

减少誤伤的几個處理思路

  1. 先驗證再放行。對声称是搜尋蜘蛛的請求做来源驗證,比如反向 DNS 解析,確認後再加入白名單,比直接按 UA 字符串放行可靠得多。
  2. 把重要路径單獨加規則。站点地图、列表頁、詳情頁這類需要被發現的路径,可以從嚴格的频控策略里排除。
  3. 维護時間避開内容發布。大版本發布、栏目調整尽量安排在流量低峰,並保證维護期間返回的是明确的 503 加 Retry-After,而不是空白頁。
  4. 變更後做一次可用性回归。用不带 Cookie、不带登入態的請求,從外部網絡訪問几個關键 URL,確認狀態碼與内容都正常。
  5. 订阅證书與域名到期提醒。這類故障没有征兆,但影响范围往往最大。

把“可訪問性”当成日常指标

抓取量、狀態碼分布、响應時間,這几項資料放在一起看,比單看收錄數字更能說明問题。蜘蛛能稳定地進来、拿到完整内容,是所有 URL 發現手段的前提。安全策略、CDN 配置和运维計划各自獨立,但它們共同决定了這個前提是否成立,值得在站点运营的例行检查里占一個固定位置。