排查抓取問题,很多人的顺序是從頁面開始的:标题、内鏈、Sitemap。但蜘蛛在拿到第一個 HTML 字节之前,還有一段它必须先走完的鏈路——DNS 解析、建立连接、TLS 握手。這一段里任何一环失敗,服務器訪問日誌里可能连一行记錄都不會留下,你也就很难意识到問题出在頁面之外。
DNS:蜘蛛得先找到你的服務器
DNS 是最容易被忽略的一层,因為它平时几乎不出問题。但在几種情况下,它會让抓取變得不稳定:
- A 记錄與 AAAA 记錄不一致:站点同时配置了 IPv6,但 IPv6 鏈路實际不通。部分抓取节点會先在 IPv6 上尝试、超时,再回退到 IPv4,每次抓取都多花一段時間。
- CNAME 指向 CDN:解析鏈路變長,局部节点解析異常时,就會出現“某些地区能抓、某些地区抓不到”的現象。
- 地域解析:如果按地区返回了不可用的 IP,或者對某些地区直接返回空结果,蜘蛛拿到的就是错誤地址。
- TTL 過長:換服務器、換 CDN 之後,TTL 設定得過長會让一部分节点仍然指向舊 IP,抓取表現會在一段時間内忽好忽坏。
TLS 握手:證书問题不會顯示在頁面上
證书過期是最常见也最容易被漏掉的一項。浏览器里看着正常,可能是因為你訪問的是另一個域名,或者本地還留着舊缓存,而蜘蛛訪問的恰好是那個已经過期的域名。
- 證书鏈不完整:只部署了站点證书,没有带上中間證书。浏览器有时會自動补全,但部分抓取节点的握手會直接失敗。可以用 openssl s_client 之類的命令查看返回的證书鏈是否完整。
- 缺少 SNI 支持:同一 IP 上托管多個站点时,如果服務器不支持 SNI,蜘蛛可能拿到預設站点的證书,握手對不上域名,請求被拒。
- HTTP 與 HTTPS 同时可訪問:两套版本都能打開,就會有两套 URL 被分別發現和抓取。規范标簽只是提示,並不能阻止抓取。
HTTP 协议版本與连接方式
协议版本不决定能不能抓,但會影响抓取效率。HTTP/1.1 下,同一域名的並發连接數是有限的,蜘蛛需要排队取资源;HTTP/2 支持在一條连接上多路复用,同一時間段内能取回的 URL 數量通常更多。
另外要留意反向代理或 WAF 是否把請求降級處理,以及服務器對 HEAD 請求的响應是否正常。有些环境對 HEAD 返回 405,或者返回 200 但不带有效头部,會影响抓取前的校驗环节。
WAF 與限流:被誤伤的正規蜘蛛
按 User-Agent 拦截、按 IP 频率限流,是很多站点的預設配置。蜘蛛收到 403 或 429 之後,通常不會立刻停止,但抓取节奏會下降。持續返回 429 或直接重置连接,效果和“服務器不稳定”是一样的。換過 CDN 或接入過安全防護之後,建议確認爬虫防護規則有没有把正規蜘蛛一起挡在门外。
一個可执行的排查顺序
- 從站外节点發起一次完整請求,確認能否正常拿到 HTML。
- 检查證书到期時間與證书鏈是否完整。
- 用不同 User-Agent 請求同一 URL,對比狀態碼與响應内容。
- 查看服務器與 CDN 日誌,確認蜘蛛的连接是否真正到達。
- 核對防火墙、WAF、限流規則與訪問频率阈值。
- 確認 www 與非 www、HTTP 與 HTTPS 的規范版本一致。
抓取失敗的原因,一部分在頁面里,一部分在頁面之前。花几分钟確認鏈路通不通,往往比改動十處内鏈更有效。
這些检查不需要天天做,但在几種节点上值得按顺序過一遍:新站刚上线、抓取量突然下降、更換服務器或 CDN、證书临近到期。鏈路是抓取的地基,地基出問题时,頁面层面的優化很难看出效果。