搜索抓取

noindex 与抓取:不收录的页面,蜘蛛要不要走这一趟

很多站点把 noindex 当成抓取开关,结果页面照样被蜘蛛访问,只是读完不收录。本文说明 robots.txt 与 noindex 的分工,被 noindex 的 URL 为什么仍会出现在抓取路径里,以及数量大时怎样通过断链、canonical 和 Sitemap 收口,减少无效抓取。

搜索抓取

noindex 与抓取:不收录的页面,蜘蛛要不要走这一趟

站点里总有一些页面不希望出现在搜索结果里:后台入口、测试页、筛选参数页、重复的打印版。处理这类 URL 时,很多人的第一反应是写进 robots.txt。但 robots.txt 和 noindex 管的是两件事,用错了,往往既没达到目的,还让蜘蛛白跑一趟。

robots.txt 挡的是抓取,noindex 管的是索引

robots.txt 里的 Disallow,意思是蜘蛛不要去请求这个路径。既然不请求,就看不到页面里的任何指令。noindex 则写在页面内部(meta robots 或响应头 X-Robots-Tag),意思是“你可以来抓,但别放进索引”。

把 URL 写进 robots.txt 却指望 noindex 生效,是最常见的死循环:蜘蛛抓不到页面,就看不到 noindex;如果这个 URL 在别处还有链接,它依然可能被当成一个可索引的对象处理。

被 noindex 的页面,蜘蛛还会不会抓

会。noindex 不改变抓取路径,蜘蛛照样沿着内链、Sitemap、外链走到这个 URL,发出请求、读取 HTML,只是读完不收录。这意味着:

  • 它会占用抓取资源,这些请求换不来收录;
  • 页面里的链接仍可能被发现,蜘蛛会继续往下走;
  • 日志里看到的是正常的 200 响应,从状态码上看不出“已经拒收”。

所以一个站点里如果存在大量 noindex 页面,而且它们互相链接成一张大网,抓取路径会被拖得很长,真正想被发现的页面反而排在后面。

什么时候用 noindex,什么时候用 robots.txt

  1. 想保留页面可被抓取、只是不收录:用 noindex。典型是内容太薄的参数页、已下架但还想保留访问的详情页、用户个人主页。
  2. 完全不想让蜘蛛访问:用 robots.txt 或服务器端鉴权。典型是后台、接口、站内搜索结果页。
  3. 既不想抓也不想留痕:robots.txt 配合登录校验。但要意识到,别处指向它的链接会变成一个“看不到内容的入口”,这种入口多了对抓取并不友好。

抓取路径上的三种收口方式

如果 noindex 页面数量可控,直接保留、让蜘蛛抓完即可。如果数量很大,就要考虑收口:

  • 断链入口:把指向这些页面的内链去掉,改为前端交互触发,蜘蛛走不到自然就不抓。
  • 合并:多个相似 URL 用 canonical 指向一个主 URL,避免蜘蛛在参数簇里来回走。
  • 分层:Sitemap 里不列这些 URL,内链也不给,靠少量外链进来的请求可以接受。

几个容易踩的坑

  • 把 noindex 页面放进 Sitemap:等于主动请蜘蛛来抓一个不打算收录的 URL,属于典型的无效抓取。
  • 分页页全部 noindex:后续页码不索引,但蜘蛛仍会抓;内链密集时,抓取会集中在这一段。
  • 用 noindex 处理错误页:内容已经没有了,就应该返回 404 或 410,而不是 200 再挂一个 noindex 标签。
  • 忘记 X-Robots-Tag:PDF、图片等非 HTML 资源放不了 meta,只能用响应头声明。

怎么验证有没有起作用

可以看抓取日志:noindex 页面的请求量、返回码、以及蜘蛛是从哪个引用页走到它的。如果这类 URL 长期占据不小比例的抓取,同时页面本身没有什么收录价值,那就该从入口上做减法,而不是只在页面里加一个标签。

小结:noindex 是一句“可以抓、但别收录”的声明,不是抓取开关。真正决定蜘蛛会不会走这一趟的,是链接和 Sitemap 构成的路径。