為什么證书問题會直接影响抓取
搜尋蜘蛛訪問入口頁,走的是一次普通的 HTTPS 請求。如果握手阶段就失敗——證书過期、證书鏈不完整、域名不匹配、服務器不支持客戶端使用的 TLS 版本——蜘蛛拿不到任何 HTML,入口頁在它眼里等同于不存在。很多人只關注頁面内容寫了什么,却把這一层当成預設没問题,结果池子里的域名換了一批又一批,抓取量還是不见起色。
證书本身要查的四件事
有效期與續期
免費證书通常 90 天有效。批量管理几十上百個域名时,最容易出現的情况是某個域名證书悄悄到期,而日誌里只表現為一批抓取失敗,很难一眼定位。建议把所有域名列成表,记下到期時間並提前一周續期;續期之後要實际訪問一次確認新證书已经生效,而不是只看到“申請成功”的提示就結束。
域名覆盖范围
如果用泛域名證书,注意它只覆盖同一級的子域。www 和裸域要不要同时使用、子域是否在證书范围内,都要在部署前確認清楚。證书與訪問域名不匹配时,浏览器會报警告,蜘蛛那邊同样會握手失敗。
證书鏈完整性
只装域名證书、不装中間證书,在部分客戶端上會驗證不通過。建议用两三個在线檢測工具交叉查看,它們的判断标准不完全一致,多测几個能覆盖更多客戶端情况。
协议版本
把服務器配置到支持 TLS 1.2 及以上,同时保留 TLS 1.2。有些較老的抓取客戶端對新协议支持不完整,只開 TLS 1.3 反而會挡掉一部分正常請求。
從 HTTP 到 HTTPS 的跳轉別做成死循环
常见做法是 HTTP 返回 301 跳到 HTTPS。要注意 CDN、WAF、源站三處都寫了跳轉規則时,容易出現来回跳或跳轉层數過多的情况。层數越多,蜘蛛拿到最终頁面需要的時間越長,遇到超时就直接放弃。建议只在一层做强制跳轉,其他地方保持直通,並且用“带尾斜杠”和“不带尾斜杠”两種形式各测一遍,確認不會跳到两個不同的地址上。
HSTS 打開之前先確認全站确實都能走 HTTPS,一旦誤開而且包含子域,後續回退會比較麻烦。
响應头里容易被忽略的几項
- X-Robots-Tag:這是與 meta robots 作用類似的服務端指令。批量部署时如果模板里带了 noindex,頁面内容再正常也不會被索引,而且排查时容易只看頁面源碼,漏掉响應头這一层。
- Content-Type 與字符集:缺少 charset 或寫成错誤的编碼,中文标题可能顯示成乱碼,影响蜘蛛對頁面主题的判断。
- Set-Cookie 與跳轉:入口頁给每個訪客種 cookie 並據此跳轉,蜘蛛第一次訪問拿到的往往是跳轉前的空壳頁面。
- Server、X-Powered-By:這類头本身不影响抓取,但几十個域名返回完全一致的组合,容易让整批站点看起来像同一套東西。
首字节時間與传輸压缩
蜘蛛的耐心有限。服務器响應慢、頁面体积大、没有開啟压缩,都會让單次抓取的性價比下降。開啟 gzip 或 brotli、把入口頁的 HTML 体积控制在合理范围、给資料库查询加缓存,這些都属于老办法,但對抓取成功率的帮助往往比再買一批域名更直接。
一份可执行的检查清單
- 列出全部域名及其證书到期時間,指定专人盯續期。
- 抽查證书的域名覆盖范围與證书鏈完整性。
- 確認只在一层做 HTTP 到 HTTPS 的强制跳轉。
- 检查响應头里的 X-Robots-Tag 與 charset 設定。
- 關掉入口頁基于 cookie 的自動跳轉。
- 開啟压缩,並记錄首字节時間的前後變化。
證书和响應头属于“不出問题就没人看”的部分,但它們决定蜘蛛能不能進门。池子越大,越值得用一張表格把這几項固定下来定期核對。