站点运营

站点运营:noindex 與 X-Robots-Tag,抓取指令別只寫在一處

頁面要不要被索引,靠的不只是 head 里那行 meta。noindex 既能寫在 HTML 里,也能通過 X-Robots-Tag 响應头投递,非 HTML 资源只能用後者。本文梳理两個投递位置的差別、常用指令的寫法,以及 robots.txt 屏蔽與 noindex 混用、前端注入等常见矛盾,並给出一份可执行的自查清單。

站点运营

站点运营:noindex 與 X-Robots-Tag,抓取指令別只寫在一處

頁面要不要被搜尋引擎索引,很多人的第一反應是去改 meta robots。這條指令确實好寫,但它的投递位置不止一個:HTML 的 head 区域可以寫,HTTP 响應头里也可以寫。两邊都能生效,也意味着两邊都可能寫错、寫冲突。

两個投递位置:HTML meta 與 HTTP 响應头

HTML 方式寫在頁面的 head 区域,形如 name="robots" content="noindex, follow"。這種方式只對 HTML 頁面有效,图片、PDF 之類的文件加不進去。

HTTP 方式寫在响應头里,形如 X-Robots-Tag: noindex, nofollow。它的優势是不挑文件類型,PDF、图片、视频、纯文本都能用,也方便在服務器或 CDN 层做统一配置。

两種方式同时存在时,一般按更嚴格的那條执行。一邊寫 index,一邊寫 noindex,结果通常是不索引。

常用指令,別一次堆满

  • noindex:不把頁面放進索引,但頁面上連結仍可被跟随。
  • nofollow:不追踪頁面上的連結,如今更多被视為一種提示。
  • noarchive:不提供網頁快照。
  • nosnippet / max-snippet:限制摘要的展示長度。
  • max-image-preview:控制搜尋结果中缩略图的尺寸。
  • unavailable_after:指定時間後不再展示,适合下架的商品頁。

多條指令之間用英文逗号分隔,名稱大小寫一般不敏感,但拼错就等于没寫。寫成 no index 這種带空格的形式,也不會被识別。

三個常见的自相矛盾

1. robots.txt 屏蔽叠加 noindex

這是最典型的一種。蜘蛛被 robots.txt 挡住,根本拿不到頁面内容,自然也讀不到里面的 noindex。结果是頁面可能仍以 URL 形式出現在结果里,指令却没起作用。想让它登出索引,應该允许抓取、用 noindex 處理,而不是一挡了之。

屏蔽抓取和請求不索引是两件事,混着做,往往两件都没做好。

2. 只在模板里寫,忘了頁面級覆盖

不少站点用统一模板輸出 meta robots,某些栏目想單獨 noindex,就得改模板的判断逻辑。改完之後要抽查几類頁面,別让全站跟着一起變。

3. 靠前端脚本注入

如果 meta 标簽是 JS 在客戶端插入的,就要確認蜘蛛拿到的首屏 HTML 里到底有没有這條指令。拿不准的时候,用响應头的方式會更稳一些。

一份简單的自查清單

  1. 列出需要 noindex 的頁面類型:站内搜尋结果頁、带參數的篩選頁、測試頁、後台入口。
  2. 確認這些頁面没有被 robots.txt 整体屏蔽。
  3. 查看頁面源碼,找到 meta robots,核對拼寫與指令是否和目标一致。
  4. 用命令行或浏览器開發者工具看响應头里有没有 X-Robots-Tag,是否與 meta 冲突。
  5. 對 PDF、图片等非 HTML 资源,只能靠响應头,單獨核對一遍。
  6. 調整完成後隔一段時間复查,確認没有因為模板變更被回滚。

寫在最後

抓取指令是少數几個能由站点自己说了算的地方,也正因為简單,才容易被随手寫、随手忘。把需要屏蔽的頁面列清楚,選好投递位置,定期抽查一遍,比在几個地方各寫一半要可靠得多。