站点运营

站点运营: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. 调整完成后隔一段时间复查,确认没有因为模板变更被回滚。

写在最后

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