搜索抓取

抓取路径上的开关:noindex、nofollow 与 X-Robots-Tag 怎么配合

noindex、nofollow 和 X-Robots-Tag 都写在页面上,但作用的层级完全不同。本文先区分三者的生效范围,再梳理 robots.txt 与 noindex 冲突、响应头通配、页级 nofollow 剪断内链等常见误用,最后给出一套从是否希望被抓出发的检查顺序,以及它们与 Sitemap、内链如何配合。

搜索抓取

抓取路径上的开关:noindex、nofollow 与 X-Robots-Tag 怎么配合

站点的抓取路径不只是由链接决定的。页面头部的一行 meta、HTTP 响应头里的一行 X-Robots-Tag,甚至一个链接上的 rel="nofollow",都会在蜘蛛走到这一步时改变它接下来往哪走。这些开关很小,但方向用错,影响往往比少写几条内链更大。

三个开关,作用于不同层级

先分清它们各自管什么,再谈怎么用:

  • meta robots:写在 HTML 的 head 里,只对当前这个页面生效。蜘蛛必须先把页面抓下来,读到标签才会执行。
  • X-Robots-Tag:写在 HTTP 响应头里,作用范围是这一次响应。它能覆盖 PDF、图片、视频这类没有 head 的资源,也能由服务器统一控制。
  • rel="nofollow":写在链接上,管的是这条链接要不要继续跟。它是链接级,不是页面级。

三者里,只有 nofollow 会直接影响 URL 发现——被标记的链接不再把蜘蛛带到下一个地址。noindex 管的是索引,一般不影响蜘蛛顺着页面里的链接继续往外走,除非你同时写了 nofollow。

容易踩的几个坑

noindex 和 nofollow 一起写

想让一个页面既不进索引、也不往外传链接,就写成 noindex, nofollow。实际效果常常是:蜘蛛依然要抓这个页面才能看到标签,页面里的链接照样被发现,但链接的作用被削弱。如果这个页面本身是栏目页或聚合页,等于自己把内链结构剪断了一块。

robots.txt 拦了,又写 noindex

robots.txt 里 Disallow 掉的目录,蜘蛛不会去抓,也就读不到里面的 noindex。结果是页面既没被抓取,也没被明确告知不要索引。要让页面退出索引,顺序通常是:先放开抓取,让 noindex 正常生效,确认状态之后再考虑屏蔽。

X-Robots-Tag 写成通配

有的配置会对整个目录甚至整个域名下发 X-Robots-Tag: noindex,本意是屏蔽测试环境或某类文件,结果把正式内容一起盖住了。响应头不像 meta 那样能在页面源码里一眼看到,排查时最容易被忽略。

nofollow 该给页面还是给链接

页级 nofollow 会让蜘蛛不再跟这个页面上的所有链接,等于把这一页从爬行图里摘出去。链接级 nofollow 只针对一条链接,适合评论区、用户提交内容、不想背书的第三方外链。做法上,能用链接级就不要用页级;能通过整理内链解决的,就尽量不用 nofollow 去糊。

还要注意,大量本该被发现的 URL 如果都挂在 nofollow 链接后面,等于人为减少了入口。站内主导航、面包屑、列表页里的详情链接,通常不建议加 nofollow。

一套可执行的检查顺序

  1. 先确认页面到底想不想被抓:不想被抓用 robots.txt,不想被索引用 noindex。
  2. 再看标签写在哪一层:HTML 页面用 meta,非 HTML 资源用 X-Robots-Tag。
  3. 检查有没有通配或多层叠加,尤其是响应头里的规则。
  4. 检查内链有没有被 nofollow 误伤,特别是指向详情页的固定导航。
  5. 改完之后用抓取工具或服务器日志确认蜘蛛再访时的实际行为,而不是只看配置写没写对。
屏蔽是最后手段,不是第一手段。绝大多数这个页面不该被收录的问题,靠内容整理和链接收敛就能解决。

和 Sitemap、内链放在一起看

Sitemap 负责把重要 URL 直接交到蜘蛛手上,内链负责让蜘蛛在站点里走得通,noindex 这类开关负责把不该出现在索引里的 URL 挡在外面。三者方向一致时,抓取路径才干净。如果 Sitemap 里提交的 URL 恰好被响应头 noindex 挡住,蜘蛛会反复抓取一个永远进不了索引的地址,白白占用抓取资源。