很多人检查入口頁,只看浏览器里能不能正常打開,打得開就認為没問题。但蜘蛛拿到的並不是渲染後的画面,而是 HTTP 响應本身。响應头、字符集声明、压缩方式、缓存策略和响應時間,都會影响它能否顺畅解析、是否愿意繼續跟進頁面里的連結。
一、Content-Type 與字符集:先让蜘蛛知道這是什么
最常见的坑是 Content-Type 缺失或寫错。把 HTML 頁面返回成 text/plain,或者干脆不声明 charset,浏览器通常會猜,蜘蛛大多也能猜,但猜测就意味着不确定。如果頁面含中文,响應头寫的是 charset=gbk,實际文件却是 UTF-8,蜘蛛可能拿到一段乱碼文本,頁面里的文字和連結都失去意义。
检查方式
- 用 curl -I 查看响應头,確認返回 200 且 Content-Type 為 text/html,並带上正确的 charset。
- 响應头里的 charset 與頁面 meta charset 保持一致;两者冲突时,一般以响應头為准。
- 如果入口頁返回的是 JSON、纯文本或文件下载類型,蜘蛛不會把它当作可索引的 HTML 頁面處理。
二、压缩:省的不只是带宽,還有抓取時間
gzip 和 brotli 能明顯减小 HTML 的传輸体积。一個 200KB 的入口頁,不压缩就要完整传完才算一次抓取;開啟压缩後可能只有三五十 KB。對于入口頁數量多、抓取配額有限的池子,這是成本很低的改善。
有两点要注意:一是別對图片、视频這類已经压缩過的文件再压一遍,白耗 CPU;二是部分 CDN 或反向代理預設不開压缩,改完配置後要用實际請求驗證,而不是只看面板上的開關。
三、缓存头:它决定蜘蛛重訪时看到什么
Cache-Control、ETag、Last-Modified 名义上是给浏览器用的,蜘蛛同样會參考。常见誤区有两個方向:
- 把所有入口頁设成 no-store 或 no-cache,每次請求都重新生成。蜘蛛重訪成本高,服務器压力也大。
- 反過来设了很長的 max-age,頁面内容其實已经變了,蜘蛛拿到的還是舊版本,連結更新會明顯滞後。
如果入口頁结构稳定、只是偶尔換几條目标連結,比較稳妥的做法是保留 ETag 或 Last-Modified,让蜘蛛带着 If-None-Match / If-Modified-Since 来問,内容没變就返回 304。這样既省流量,也不容易让它拿到過期内容。
四、响應時間與超时:慢一点還能忍,超时就白来
各家蜘蛛的超时上限不同,但基本都有一個门槛。如果一個入口頁要十秒以上才返回首字节,被抓取的机會會明顯下降。常见原因包括:後端每次請求都查库、DNS 解析慢、TLS 握手耗时、CDN 回源不稳定。
把入口頁当成静態文件處理,或者做好頁面級缓存,让大多數請求在几百毫秒内返回 HTML,比事後抱怨蜘蛛不来有用得多。
五、上线前的快速检查清單
- 用 curl -I 看狀態碼與 Content-Type,確認没有異常返回。
- 對比压缩前後的响應体积,確認真實生效而不是只在配置里打開。
- 確認 ETag 或 Last-Modified 存在,且不會每次請求都變化。
- 查看首字节時間,尽量控制在 1 秒以内。
- 確認响應头没有把頁面标成 noindex,也没有返回非 HTML 類型。
- 抽查几台不同 IP 的机器,避免只有某一台配置特殊、表現不一致。
六、別指望這些能直接換来收錄
响應头、压缩和缓存属于把路修平,不是把车開過去。它們能减少蜘蛛在抓取环节遇到的阻力,但頁面值不值得被索引、連結會不會被跟進,仍取决于内容质量、連結结构和站点整体情况。這些细节的意义在于:当其他條件相差不大时,它不會成為最先掉鏈子的那一环。