搜尋抓取

蜘蛛抓取时的连接层:超时、重置和首字节時間在拖慢什么

蜘蛛能不能抓到頁面,不只取决于内鏈和 Sitemap。域名解析、建立连接、首字节時間、连接重置、响應压缩和 CDN 缓存,都在蜘蛛真正拿到 HTML 之前起作用。本文從连接层拆開看,哪些情况會让抓取變慢、變少或拿到不完整内容,以及日常该怎么排查。

搜尋抓取

蜘蛛抓取时的连接层:超时、重置和首字节時間在拖慢什么

抓取從建立连接開始

谈到搜尋抓取,多數人先看内鏈、Sitemap 和 robots.txt。這些决定了蜘蛛能不能發現 URL,但發現之後,蜘蛛還得真的把頁面拿回去。在拿到 HTML 之前,它要经過域名解析、建立 TCP 连接、完成 TLS 握手、發送請求、等待服務器返回响應头,然後才下载正文。這一段如果慢或者不稳定,前面的連結结构做得再细,也會被打折。

抓取不是無限等待。蜘蛛有自己的時間和资源安排,一個地址迟迟不返回,或者连接中途断開,它會放弃這次請求,把资源花到別處。日誌里可能只留下一條訪問记錄,甚至什么都没有。

首字节時間决定蜘蛛要等多久

TTFB(首字节時間)指的是從發出請求到收到第一個字节的間隔。它包含服務器處理請求、查询資料、拼接頁面、经過缓存层返回的時間。

  • 缓存未命中时回源慢,命中时很快,蜘蛛看到的快慢會随机波動。
  • 資料库慢查询、外部接口同步調用,會把 TTFB 拉長到几秒甚至十几秒。
  • CDN 邊缘节点到源站鏈路差,用戶感觉不明顯,蜘蛛跨地区訪問时更明顯。

單個頁面慢几秒看起来不嚴重,但蜘蛛一次抓取會發出很多請求。每個請求都多等几秒,單位時間内能抓的頁面數量就下降。對于 URL 量大、更新频繁的站点,這種下降會直接表現為新頁面被發現得更晚。

连接超时與连接重置更隐蔽

5xx 和 429 在日誌里有明确狀態碼,连接层的問题往往没有。

  • 连接超时:服務器不响應,蜘蛛等不到结果,訪問日誌里可能没有完整记錄。
  • 连接重置:握手完成後被中途断開,蜘蛛拿到不完整的响應。
  • 响應截断:正文传到一半停止,蜘蛛可能只解析到部分 HTML。

這些情况常和防火墙、限流策略、负载均衡配置、後端進程數不足有關。它們不一定會体現在狀態碼监控里,但會稳定地消耗抓取机會。排查时可以在不同網絡位置用命令行工具反复請求,观察连接阶段是否偶發失敗。

如果同一批 URL 在日誌里时有时無,先別急着改内鏈,先確認连接是不是稳定的。

响應头、压缩與内容完整性

蜘蛛拿到的内容取决于服務器怎么返回。Content-Encoding 声明了 gzip 或 brotli 压缩,Content-Length 表示長度,分块传輸則没有固定長度。如果這些头和實际内容不一致,蜘蛛可能讀到被截断的 HTML。

還有一種情况是頁面過大。正文、内联脚本和样式全部塞進一個 HTML,压缩後仍然很大,蜘蛛下载時間變長,解析也變慢。把首屏需要的结构留在 HTML 里,把不必要的部分延後加载或拆出去,對抓取更友好。

CDN 與邊缘缓存带来的差异

蜘蛛會從多個 IP 和地区訪問站点。如果 CDN 缓存策略不一致,不同节点可能返回不同版本的頁面:有的返回舊 HTML,有的返回错誤頁,有的直接回源。用戶刷新几次可能看不出来,但蜘蛛拿到的样本會互相冲突。

需要留意的是:

  • 缓存键是否包含了會影响内容的參數,避免把 A 頁面缓存给 B URL。
  • 回源失敗时邊缘节点返回的内容是不是 5xx 或伪装的 200。
  • 發布後缓存刷新是否覆盖到蜘蛛常訪問的节点。

日常可以检查的几項

  1. 用命令行工具测量 TTFB,看是稳定慢還是偶發慢。
  2. 對比不同地区或不同节点的返回头和正文是否一致。
  3. 检查服務器與 CDN 日誌里是否有大量超时、重置、截断记錄。
  4. 確認压缩配置和 Content-Length 正确,避免响應不完整。
  5. 大頁面考虑拆分,减少單次下载体积。

连接层做得好,不會直接带来收錄或排名,但它决定了蜘蛛愿不愿意、能不能顺利把頁面拿回去。内鏈和 Sitemap 负责指路,连接层负责把路走通,两者缺一段,抓取都會受影响。