网站收录

robots.txt 屏蔽了页面,为什么还能搜到:Disallow 与 noindex 的分工

很多站长把 robots.txt 的 Disallow 和页面上的 noindex 当成同一件事,结果要么屏蔽了却还在搜索结果里看到,要么加了 noindex 却迟迟不退出索引。本文讲清两个指令分别管抓取还是管收录、执行顺序为什么不能颠倒,以及常见的配置坑和验证方法。

网站收录

robots.txt 屏蔽了页面,为什么还能搜到:Disallow 与 noindex 的分工

站长常遇到一个困惑:明明在 robots.txt 里 Disallow 了某个目录,搜索结果里却还能看到这些地址。反过来,有时候加了 noindex,页面却迟迟不退出索引。这两个指令管的根本不是同一件事,混着用就容易出现上面两种情况。

两个指令解决的是不同问题

  • Disallow:告诉蜘蛛“别来抓”。它控制的是抓取行为,属于 robots.txt 层面的约定。
  • noindex:告诉蜘蛛“别把这一页放进索引”。它控制的是收录结果,但它写在页面上,蜘蛛必须先抓到页面才能看到。
一句话记:Disallow 管“来不来”,noindex 管“留不留”。而 noindex 生效的前提,是蜘蛛能来。

为什么被 Disallow 的页面还出现在结果里

常见原因有三类,可以先对号入座:

  • URL 可以通过外链、sitemap、其他站点的引用被发现。即使蜘蛛没抓正文,也可能建立一个只有地址或标题的索引条目。
  • 页面在被屏蔽之前就已经被抓取并收录了。抓取被挡住并不会自动删除已有的索引记录。
  • 蜘蛛看到 Disallow 后选择不抓取,自然也读不到页面里的 noindex,于是“屏蔽”和“退出索引”两件事都没完成。

想让页面真正退出索引,顺序不能颠倒

  1. 先不要屏蔽抓取,确保蜘蛛能正常取到页面内容。
  2. 在页面上返回 noindex,用 meta 标签或 HTTP 响应头都可以。
  3. 等索引里的条目消失,期间保持页面可被抓取。
  4. 确认退出后,再考虑用 robots.txt 屏蔽,或者干脆让页面下线。

如果页面本身已经不需要存在,直接返回 410 或 404 通常更干净,不必绕这条链路。

几个容易踩的坑

  • 屏蔽了 JS 或 CSS,而 noindex 是由脚本渲染出来的,蜘蛛看不到这个指令。
  • 先 Disallow 再加 noindex,结果 noindex 永远没有机会生效。
  • 用 X-Robots-Tag 做控制,但只对部分 UA 返回,测试环境和线上表现不一致。
  • robots.txt 里的路径是前缀匹配,写 /private 会连带屏蔽 /private-page,需要写得更精确。
  • 屏蔽了带参数的 URL,又指望用 canonical 把权重收拢,可蜘蛛抓不到页面,自然也读不到 canonical。

怎么验证是否真的生效

  • 看索引状态:用站点维度的查询或索引报告,注意区分“已被屏蔽抓取”和“已抓取但未编入索引”两种状态,它们对应的问题完全不同。
  • 看服务器日志:如果目标目录里再也看不到蜘蛛的访问记录,说明屏蔽起了作用;如果仍有访问,多半是规则写错了位置或语法有误。
  • 单页排查:拿一个测试地址做对照,处理前后各记录一次状态,比只看总量更可靠。

和 sitemap、内链的配合

sitemap 里继续列着已经 noindex 的 URL 是自相矛盾的,确认退出索引后就应该清理。同样,站内链接如果一直指向准备下线的地址,蜘蛛会反复发现它,退出的过程也会更慢。想让一个页面安静地离开索引,除了指令本身,还要检查有没有别的地方在替它做宣传。

把“抓取”和“收录”分开想,很多问题就清楚了:要留住抓取、拿掉收录,用 noindex;要节省抓取、彻底不让来,用 robots.txt。两者顺序错了,指令就是在空转。