搭建蜘蛛池时,很多人把注意力放在入口頁内容、連結和 IP 上,却忽略了一個更基础的問题:服務器返回的响應头。蜘蛛訪問一個 URL,最先拿到的不是正文,而是狀態碼和一组 HTTP 头。這些信息决定了它接下来是繼續解析、放弃,還是過段時間再来。
狀態碼:先让蜘蛛知道頁面是否正常
入口頁面向蜘蛛时,最理想的返回是 200,並且正文與狀態一致。常见問题集中在几類:
- 200 配空頁面或错誤提示:蜘蛛會当成正常頁面,但抓不到有效内容,次數多了會降低對该路径的信任。
- 404 配 200:也就是常说的软 404。入口頁已经下线,却仍返回 200,蜘蛛會反复抓取無效頁面。
- 403 或 503 频繁出現:可能是防火墙、程序異常或维護導致。蜘蛛遇到大量 403,通常會降低抓取频率,甚至暂时停止訪問。
- 跳轉鏈過長:301、302 本身没有問题,但入口頁跳目标頁、目标頁再跳一次,會增加抓取成本。能一步到位就不要多层中轉。
如果入口頁确實要下线,建议返回真實的 404 或 410,而不是繼續给 200。维護窗口則用 503,並配合 Retry-After 告诉蜘蛛多久後再来,比直接關閉服務器更友好。
缓存头:影响的是回源和负载,不是收錄開關
Cache-Control、Expires、ETag、Last-Modified 主要影响浏览器和 CDN 的缓存行為。它們不會直接决定頁面是否被索引,但會影响蜘蛛反复訪問时的回源压力。
- 入口頁内容更新不频繁,可以設定合理的 max-age,让 CDN 承担一部分重复請求。
- 不要轻易使用 no-store。它會让每次請求都回源,入口頁數量多时容易把源站拖慢。
- ETag 和 Last-Modified 配置正确时,蜘蛛再次抓取可能收到 304,减少带宽消耗。但不要為了制造 304 而随意改動時間戳。
X-Robots-Tag:批量控制时最容易誤伤
X-Robots-Tag 是在 HTTP 头里寫 noindex、nofollow 等指令的方式,适合非 HTML 资源或需要批量控制的场景。問题在于,它和頁面里的 meta robots 同时存在时,搜尋引擎通常取更嚴格的那一個。
入口頁如果依赖蜘蛛抓取和传递發現路径,就要確認响應头里没有誤加的 noindex。常见誤伤来源是:服務器全局配置、安全插件預設規則、CDN 的某些優化選項。上线前用工具看一下响應头,比事後排查省事得多。
Content-Type 與字符集:別让解析在第一步出错
入口頁應返回 text/html,並声明正确的字符集,例如 text/html; charset=utf-8。如果字符集寫错,蜘蛛可能拿到乱碼,影响它對頁面主题的判断。對入口頁来说,正文可以简單,但基础解析不能出問题。
另外,如果根據 User-Agent 返回不同内容,要留意 Vary 头和缓存策略。配置不当可能導致蜘蛛拿到给浏览器准备的版本,或者 CDN 缓存了错誤版本。
上线前後的检查清單
- 用 curl -I 或浏览器開發者工具查看入口頁响應头。
- 確認狀態碼是 200;跳轉頁確認 Location 正确,且没有鏈式跳轉。
- 確認没有意外的 X-Robots-Tag: noindex。
- 確認 Content-Type 和字符集正确。
- 抽查缓存头是否導致每次請求都回源。
- 观察服務器日誌中 5xx、403 的比例,異常升高时先查程序與防護規則。
响應头不是排名因素,但它是入口頁能否被正常抓取和解析的前提。把狀態碼、缓存和放行規則做對,比在無關细节上做伪装更實际。