很多站点排查抓取問题时,习惯直接翻 HTML:标题、正文、内鏈。但蜘蛛在解析 HTML 之前,先拿到的是服務器返回的 HTTP 响應头。响應头里的字段會决定蜘蛛怎么看待這個 URL:是正常頁面、跳轉,還是暂时不值得繼續讀;是 HTML 還是別的文件;能不能用缓存副本;下次什么时候再来。下面按蜘蛛的處理顺序,梳理几個值得長期關注的响應头字段。
狀態碼與 Location:第一层判断
蜘蛛拿到响應後,首先看狀態碼。200 表示可以繼續讀响應体;301、302、307、308 表示要跳轉,蜘蛛會讀 Location 字段,把新地址加入待抓队列。404 和 410 都表示頁面不存在,但 410 更明确,蜘蛛通常會更早降低重訪频率。5xx 属于服務器错誤,蜘蛛一般會保留 URL 並稍後再试,但如果连續多次 5xx,抓取频率可能被調低。
容易出問题的是“200 但没内容”的软 404,以及“302 跳首頁”的临时處理。它們不會立刻让蜘蛛放弃 URL,却會让蜘蛛反复来確認,浪費抓取次數。排查时可以按狀態碼分布拉一份日誌,看看是不是大量 URL 長期停在 302 或 200 空頁面上。
Content-Type 與字符集
Content-Type 告诉蜘蛛响應体是什么類型。常见的 text/html 表示網頁;application/json、text/plain、application/pdf 等會被当作非 HTML 處理。如果服務器把 HTML 頁面返回成 text/plain,蜘蛛可能不會按網頁解析,頁面上的連結也不會被繼續發現。
字符集同样重要。Content-Type 里的 charset 如果和頁面實际编碼不一致,中文内容可能變成乱碼,标题和正文的语义识別會受影响。建议在响應头和 HTML meta 中保持一致,避免只靠蜘蛛猜测。
X-Robots-Tag:藏在响應头里的指令
除了 robots.txt 和頁面 meta,蜘蛛還會讀 X-Robots-Tag。它可以對單個 URL、某類文件或整個目錄生效,支持 noindex、nofollow、noarchive 等值。它常被用在 PDF、图片、接口返回的頁面上,因為這些文件不方便寫 meta。
如果某個頁面明明没有寫 meta noindex,却一直不出現,可以检查服務器或 CDN 是否加了 X-Robots-Tag。反過来,临时屏蔽时用 X-Robots-Tag 比改頁面模板更集中,但要记得刪除,避免長期誤伤。
Last-Modified、ETag 與 304
Last-Modified 表示頁面最後修改時間,ETag 是内容版本标识。蜘蛛再次抓取时會带上 If-Modified-Since 或 If-None-Match,服務器如果判断内容没變,可以返回 304 Not Modified。304 响應没有响應体,蜘蛛會沿用本地缓存版本。對内容更新不频繁的站点,正确返回 304 能减少传輸,也能让蜘蛛把時間花在真正變化的 URL 上。
需要注意的是,Last-Modified 不要每次請求都變。如果動態生成的時間戳每次都不同,蜘蛛會以為頁面一直在更新,從而频繁重抓。ETag 也不要在多台服務器之間不一致,否則同一 URL 可能被反复当作新内容。
Cache-Control 與 CDN 缓存
Cache-Control 决定中間层能缓存多久。蜘蛛通常不按浏览器缓存逻辑执行,但 CDN 和反向代理會。如果缓存時間過長,蜘蛛抓到的可能是舊版本;如果缓存時間過短,源站压力會上升。更稳妥的做法是让 HTML 的缓存時間短一些,静態资源可以長一些,並在内容更新後主動刷新關键 URL 的缓存。
另外,Vary 字段如果設定不当,可能让同一 URL 因 User-Agent 不同返回不同内容。蜘蛛拿到的版本可能和用戶看到的不一样,嚴重时會被判為伪装。除非确有需要,不建议针對蜘蛛單獨返回不同 HTML。
Content-Length 與响應体截断
Content-Length 或分块传輸的完整性會影响蜘蛛能讀多少内容。如果连接提前中断、响應体被截断,蜘蛛可能只解析到一部分 HTML,後面的連結就發現不了。服務器稳定性、超时設定、压缩配置都可能造成這種情况。排查时可以對比源站返回的字节數和蜘蛛訪問日誌里的响應大小,看是否存在明顯缺口。
一個實用的排查顺序
- 先用具体 URL 請求一次,看狀態碼和 Location 是否符合预期。
- 检查 Content-Type 與 charset,確認蜘蛛按 HTML 解析。
- 確認没有被 X-Robots-Tag、robots.txt 或 meta 誤屏蔽。
- 查看 Last-Modified 和 ETag 是否稳定,304 是否正常。
- 检查 CDN 缓存與 Vary,確認蜘蛛拿到的是目前版本。
- 最後再看响應体是否完整,連結是否出現在 HTML 靠前的位置。
响應头不能直接决定排名,但它决定了蜘蛛能不能顺利讀到頁面。把這几類字段纳入日常巡检,比等到抓取量下降再去猜原因更有用。