讨论蜘蛛池时,大多數注意力都放在入口頁的标题、連結和内容上,却容易忽略一個更靠前的环节:蜘蛛在讀到第一個 HTML 字符之前,得先把域名解析成 IP、建立 TCP 连接、完成 TLS 握手。這几步里任何一步出問题,後面的内容優化都無從谈起。
蜘蛛訪問一個 URL 的完整鏈路
顺序大致是:查本地 DNS 缓存,向递归解析服務器請求,拿到 A 记錄或 CNAME 指向的 IP,建立 TCP 连接,完成 TLS 握手,發送 HTTP 請求,最後才拿到响應。入口頁常见的“抓取失敗”,有相当一部分發生在前半步,也就是解析與握手阶段,而不是内容本身。
DNS 解析:蜘蛛最终落在哪台机器
入口頁的域名可以是一條 A 记錄直连某台服務器,也可以用 CNAME 指向 CDN 或其他調度层。两種方式對蜘蛛的影响不一样:直连时,訪問稳定性取决于那台机器;走 CDN 时,蜘蛛訪問的可能是离它最近的一個邊缘节点。
- TTL 過長:更換服務器 IP 之後,蜘蛛和各地解析服務器還可能長時間訪問舊地址,表現為日誌里舊 IP 仍有請求,新机器却安静。
- TTL 過短:解析請求频繁,遇到解析服務不稳定时,反而更容易拿到失敗结果。
- 泛解析滥用:把大量域名用泛解析指向同一台机器,虽然省事,但域名的解析特征會很一致,不利于把入口站做出差异。
CDN 與 WAF:是加速還是拦门
CDN 本身不是問题,問题在于預設配置。部分防護策略會针對高频訪問、可疑 UA 或異常請求头返回驗證頁、302 跳轉或 403。蜘蛛拿到這些响應,通常不會去执行驗證脚本,只會记下一次失敗。
如果入口站開了 CDN,建议检查:回源地址是否正确、缓存規則是否把動態入口頁也缓存了、防護等級是否誤伤了正常抓取。可以先用站長平台的抓取測試或模拟請求,看看返回的是内容頁還是拦截頁。
HTTPS 證书:握手阶段的隐形门槛
證书問题通常表現為“浏览器能打開,但蜘蛛抓不到”。常见原因有三類:
- 證书域名與實际訪問的域名不匹配,尤其是泛域名證书未覆盖多級子域时。
- 證书已過期,或者只更新了部分节点,CDN 邊缘节点還在用舊證书。
- 證书鏈不完整,缺少中間證书。桌面浏览器往往能自行补全,但其他客戶端可能直接握手失敗。
几個常见的誤区
- 認為域名能 ping 通就没問题,忽略了 HTTP 层返回的狀態碼。
- 換服務器时只改 A 记錄,忘了同步證书和回源配置。
- 把抓取失敗一概归因于内容质量或權重,没有先看鏈路层日誌。
- 用多個域名指向同一台机器,却没做任何訪問入口上的区分。
排查时的建议顺序
- 先用命令行工具請求入口頁,確認狀態碼、响應头和證书信息。
- 對比不同地区、不同解析结果的返回是否一致。
- 检查服務器訪問日誌,按狀態碼分類看蜘蛛請求的分布。
- 更換 IP 或节点前,提前把 TTL 調低,切換完成後再調回。
- 把 DNS、證书、CDN 配置的變更记錄留档,方便出問题时回溯。
蜘蛛看不到的頁面,等于不存在。入口頁的第一道门不是内容,是解析與握手。
這些配置本身不复杂,但一旦被忽略,很容易让人把排查方向搞反:明明問题在 DNS 或證书,却在反复調整入口頁的文案和連結。