抓取失敗有很多種原因,但有一類特別容易被忽略:頁面内容本身没問题,問题出在請求還没走到應用层。蜘蛛要先完成 DNS 解析、建立 TCP 连接、完成 TLS 握手,才轮得到服務器返回 HTML。這一步出错,訪問日誌里往往连一條记錄都不會留下,只能靠错誤日誌或者外部拨测看见超时。
浏览器對證书問题的容忍度比机器高得多。用戶看到警告可以点“繼續訪問”,搜尋引擎的抓取程序不會。所以這類問题的排查,不能只看“我自己打得開”。
值得逐項確認的六件事
證书有效期與證书鏈完整性
證书過期是最直接的一種中断。除了到期時間,還要確認中間證书有没有一起下發:有些服務器只配了站点證书,桌面浏览器靠本地缓存补上了中間證书,看起来一切正常,而抓取程序第一次訪問就會握手失敗。可以用命令行工具或在线檢測服務看一下完整鏈路。
HTTP 到 HTTPS 的跳轉鏈路
常见的寫法是 http 跳到 https,但中途经過多個域名或路径,形成两三次跳轉。跳轉本身不是错誤,但每多一跳就多一次請求開销,也更容易在某一环配置不一致时断掉。建议把 http、https、带 www、不带 www 這几種组合一次性梳理清楚,让每個入口一跳到位。
混合内容
HTTPS 頁面里嵌了 http 的图片、脚本或 iframe,浏览器會拦截或降級提示。對抓取来说,被拦截的资源不會加载,依赖這些资源渲染出来的内容就可能拿不到。用開發者工具的網絡面板或站点掃描工具過一遍,把 http 资源換成 https 或相對协议地址。
HSTS 與预加载
開啟 HSTS 之後浏览器會强制走 HTTPS,這對安全是好事,但要注意预加载列表的提交基本是不可逆的。如果同一域名下還有必须走 http 的舊路径,或者子域名證书没配齐,開啟 HSTS 會把小問题放大成整站不可訪問。
多域名證书與 SNI
一個 IP 上放多個站点、證书按域名区分时,服務器需要靠 SNI 返回正确的證书。不支持 SNI 的客戶端或老舊的抓取器可能拿到預設證书,從而校驗失敗。多站点共用一個 IP 时,值得专门测一下每個域名返回的證书是不是自己的那一張。
TLS 版本與加密套件
為了通過安全掃描而只保留最新协议,可能會挡掉一部分只支持舊版本的客戶端;反過来,為了兼容而開啟過老的协议版本,又會被判為不安全。比較稳妥的做法是保留 TLS 1.2 和 1.3,關掉更早的版本,然後在服務器日誌里观察異常中断量有没有上升。
一份可执行的自查流程
- 用命令行或檢測工具訪問首頁、栏目頁、詳情頁各一個 URL,確認證书鏈完整、無警告。
- 分別用 http、https、带 www、不带 www 四種组合請求,记錄跳轉次數和最终狀態碼。
- 抽查頁面的图片、脚本、样式,確認没有残留的 http 引用。
- 查看服務器错誤日誌,統計握手失敗、连接重置的數量。
- 配置一個外部拨测任務,定时請求几個關键 URL 並记錄證书剩余天數。
- 證书到期前留出足够續期時間,續期後立即复测,不要等到告警响起才動手。
几個常见的誤区
- “用戶能打開就没問题”:用戶用的是最新浏览器,而且可能已经手動接受了警告。
- “證书還有一個月,不急”:自動續期失敗往往不會主動通知,预留時間要比想象中更長。
- “跳轉多一次無所谓”:跳轉鏈越長,可能出問题的环节越多,排查成本也越高。
- “開了 HSTS 就一劳永逸”:開之前要先確認所有子域名的證书都已经到位。
把协议层的事情理顺,是内容能被看到的前提。它不會直接带来訪問量,但配置错了,後面所有優化都無處施展。