站点里总有一些页面不希望出现在搜索结果里:后台入口、测试页、筛选参数页、重复的打印版。处理这类 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
- 想保留页面可被抓取、只是不收录:用 noindex。典型是内容太薄的参数页、已下架但还想保留访问的详情页、用户个人主页。
- 完全不想让蜘蛛访问:用 robots.txt 或服务器端鉴权。典型是后台、接口、站内搜索结果页。
- 既不想抓也不想留痕: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 构成的路径。