網站收錄

X-Robots-Tag:寫在响應头里的索引指令,什么时候比 meta 更合适

meta robots 只能放在 HTML 頁面里,而 X-Robots-Tag 挂在 HTTP 响應头上,能覆盖 PDF、图片、视频等非 HTML 资源,也适合按路径批量下發指令。這篇文章讲清两者的差別、常见指令含义、更适用的场景,以及 noindex 與 robots.txt 冲突、指令未覆盖全部响應等容易踩的坑。

網站收錄

X-Robots-Tag:寫在响應头里的索引指令,什么时候比 meta 更合适

meta robots 寫在頁面里,X-Robots-Tag 寫在 HTTP 响應头里。两者能表達的指令大部分重叠,但适用场景並不一样。当你要给一批非 HTML 文件、或者整個目錄统一加索引指令时,响應头通常比逐頁改模板更省事。

响應头與頁面标簽的關键差別

  • 作用對象不同:meta 只能出現在 HTML 頁面的 head 中;X-Robots-Tag 可以挂在任意 HTTP 响應上,包括 PDF、图片、视频、安装包和 JSON 接口返回。
  • 生效范围不同:meta 是頁面級的,响應头可以在服務器、反向代理或 CDN 层按路径批量下發,一次配置影响一批 URL。
  • 改動方式不同:meta 往往要改模板再發布;响應头改配置即可,但別忽略 CDN 缓存,否則线上可能還留着舊指令。
  • 可以定向到某個爬虫:响應头支持寫成「爬虫名: 指令」的形式,只對指定 UA 生效。

常见指令都表達什么

  • noindex:請求不要把该 URL 放進索引。
  • nofollow:不追踪该响應里出現的連結,多用于接口或非 HTML 资源。
  • noarchive / nosnippet:限制快照和摘要展示,属于展示层控制,不改變索引本身。
  • max-snippet、max-image-preview:给摘要長度和图片预览设上限。
  • unavailable_after:给有时效的頁面标注一個時間点,之後不再展示。

语法上就是一行响應头,多個指令用逗号分隔:X-Robots-Tag: noindex, noarchive。要只针對某個爬虫,寫成 X-Robots-Tag: googlebot: noindex。在 Nginx 里通常是一條 add_header,挂在對應的 location 或文件類型上。

什么时候用它比 meta 更合适

  • 非 HTML 资源:PDF、图片、视频文件里塞不進 meta,只能用响應头。
  • 整目錄统一處理:測試子域、临时下载目錄、内部搜尋頁,按路径一次性下發。
  • 按爬虫区別對待:同一份资源想對不同爬虫给出不同指令,頁面标簽做不到。
  • 由基础设施统一控制:站点由多個团队维護、模板不统一时,在網關层收口更可靠。

几個容易踩的坑

  1. 响應头里的 noindex 要先被抓到才生效。如果该路径同时被 robots.txt 禁止抓取,爬虫拿不到响應,自然也讀不到指令。同一個 URL 上尽量不要同时用這两種方式處理。
  2. noindex 和 canonical 同时出現會互相矛盾。一個说不進索引,一個说以另一個 URL 為准,最好只保留一個明确信号。
  3. 指令没有覆盖所有响應。同一路径有时带指令有时不带,或者被 CDN 缓存成不同版本,表現會不稳定。改完记得刷新缓存並复查。
  4. 把它当成移除開關。响應头主要影响後續抓取时的處理,對已经進入索引的 URL,通常還需要配合其他方式,而且不一定立刻生效。
  5. 忽略各家爬虫的支持差异。展示類指令的支持程度並不一致,別預設所有搜尋引擎行為相同。

上线前的自检

  1. curl -I 或浏览器開發者工具查看响應头,確認指令真的下發了,而不是只寫在配置文件里。
  2. 確認返回该资源的不同狀態响應都带一致的指令,避免同一路径出現两種行為。
  3. 小范围驗證几天,观察索引报告里對應 URL 的狀態是否按预期變化。
  4. 记錄改動時間和影响范围,方便後續排查與回滚。

说到底,X-Robots-Tag 是一個配置层面的開關。它解决的是「指令该寫在哪儿」的問题,不解决「頁面值不值得收錄」的問题。把低质量頁面挡在索引之外,前提仍然是内容本身有存在的理由。