蜘蛛池知识

蜘蛛池入口頁的 HTTP 响應头:哪些字段會被蜘蛛当真

蜘蛛抓取入口頁时,最先讀到的其實是 HTTP 响應头,而不是 HTML 正文。Content-Type、Last-Modified、ETag、Cache-Control 與 X-Robots-Tag 這些字段,會直接影响蜘蛛對頁面類型和更新狀態的判断。本文梳理哪些字段值得留意、常见的配置失誤,以及一套简單的检查方法。

蜘蛛池知识

蜘蛛池入口頁的 HTTP 响應头:哪些字段會被蜘蛛当真

很多人检查蜘蛛池入口頁时,习惯打開浏览器看頁面長什么样,却很少看服務器返回的响應头。實际上蜘蛛在解析 HTML 之前,最先拿到的就是這一串头部字段,它决定了蜘蛛要不要繼續讀正文、多久之後再来、以及這一頁在它眼里算什么類型的東西。

為什么响應头值得單獨看一遍

頁面正文可以慢慢改,响應头往往由服務器配置、程序框架或者反向代理一次性决定,改起来影响面更大。一個配置失誤,可能让整批入口頁被当成非 HTML 资源處理。

更現實的問题是:响應头的問题在浏览器里通常看不出来。浏览器容错能力强,蜘蛛不一定。

几個真正會被当真的字段

Content-Type 與字符集

正常的網頁應该返回 text/html; charset=utf-8。如果寫成 text/plain 或 application/octet-stream,蜘蛛可能直接判定這不是網頁。charset 與頁面内 meta 声明不一致时容易出乱碼,正文里的連結也可能识別不出来。

Last-Modified 與 ETag

這两個字段是蜘蛛判断頁面有没有變化的主要依據。入口頁如果每次請求都返回目前時間戳,蜘蛛會認為内容一直在變,来得更勤,但抓到的其實是同一份東西;反過来,内容确實更新了而 Last-Modified 始终不動,蜘蛛可能長時間不再回訪。

Cache-Control 與 Expires

設定合理的缓存時間可以减轻重复抓取带来的压力,但 max-age 设得過長,再叠加 CDN 缓存,蜘蛛拿到的可能是過期副本。

X-Robots-Tag

這個字段相当于 HTTP 版的 meta robots。noindex、nofollow、none 寫在响應头里,效果和寫在頁面里一样。如果一批入口頁共用模板,要確認有没有人在服務器层面批量加過限制。

3xx 與 Location

入口頁做了跳轉时,要確認跳轉目标、跳轉類型(301、302、307、308)以及跳轉层數。鏈條太長,蜘蛛容易中途放弃。

日常检查做法

  • 用 curl -I 或带 -i 參數看原始响應头,而不是只看開發者工具里被简化過的版本。
  • 随机抽几台服務器、几個域名,不要只盯着主站看。
  • 把响應头與頁面正文的声明對一遍,重点看 charset、canonical 和 robots。
  • 记錄修改前後蜘蛛訪問的變化,一次只改一項,便于判断因果。

几條實用建议

  1. Content-Type 固定為 text/html; charset=utf-8,除非确實是其他资源類型。
  2. 入口頁内容没變,就別让 Last-Modified 乱跳。
  3. 谨慎使用 X-Robots-Tag,尤其是批量下發的規則。
  4. 跳轉尽量只保留一层 301,並指向最终可訪問的地址。
  5. 改完观察一段時間再下结论,蜘蛛的反應本身有延迟。
响應头不决定蜘蛛會不會来,但它會影响蜘蛛来的时候怎么理解這一頁。把這一层理顺,往往比反复調整正文更省事。