网站收录

robots.txt 挡不住收录:屏蔽抓取和让页面退出索引是两件事

很多人在 robots.txt 里加了 Disallow,过段时间一搜,页面还在索引里,就以为屏蔽没用。其实 robots.txt 管的是抓取,noindex 管的是索引,两者作用层级不同,顺序用反了还会互相抵消。本文说明两种指令的区别、常见的错误组合,以及让页面退出索引的正确操作顺序、时间预期和自查清单。

网站收录

robots.txt 挡不住收录:屏蔽抓取和让页面退出索引是两件事

发现某个页面不该被搜到时,很多人的第一反应是在 robots.txt 里加一条 Disallow。过几周再去搜,页面还在,于是判断“屏蔽无效”。其实问题往往不在屏蔽本身,而在于用错了顺序,或者把两件不同的事当成了一件。

robots.txt 管的是抓取,不是索引

robots.txt 的作用是告诉爬虫:这个 URL 不要来抓。它属于抓取层面的限制。而页面是否进入索引,取决于搜索引擎是否已经抓到了这个页面,并判断它值得保留在索引中。

一个已经被抓取并收录的页面,即使随后被 robots.txt 屏蔽,搜索引擎不会因为抓不到就立刻把它移出索引——它手里还留着之前抓到的内容副本。更麻烦的是另一种情况:页面从没被抓过,你用 robots.txt 把它挡在外面,爬虫永远读不到页面里的 noindex 标签,也就无从知道你想让它退出。如果这个 URL 通过外链、站点地图或其他途径已经被搜索引擎知道,它仍可能以仅有 URL 的形式出现在结果里。

几种常见的错误组合

  • 页面已经被收录,只在 robots.txt 里加了 Disallow,页面上没做任何处理。
  • 同时用了 robots.txt 屏蔽和 noindex 标签。noindex 因为页面抓不到而无法被读取,等于白写。
  • 测试站或测试环境用整站 Disallow,上线后忘了删,导致已有页面的更新长期无法被抓取。
  • 只对部分 UA 做屏蔽,另一类爬虫照常抓取,状态判断因此出现偏差。
  • noindex 和 canonical 同时把页面指向别处,两个信号互相冲突。

想让页面退出索引,顺序应该是这样

  1. 先确认页面当前状态:是已经收录,还是仅有 URL 被索引。
  2. 让页面重新可以被抓取:删掉或放开 robots.txt 中针对该页面的 Disallow。
  3. 在页面上加 noindex,可以通过 meta robots 标签,也可以通过 X-Robots-Tag 响应头。
  4. 等待搜索引擎重新抓取该页面,确认 noindex 已经生效,页面逐步从索引中消失。
  5. 确认消失之后,如果还想减少无意义的抓取消耗,再考虑用 robots.txt 屏蔽抓取。

这个顺序的关键只有一句:noindex 必须先被抓取才能被读到,所以开放抓取是前置条件,不能反过来。

已经收录的页面多久会消失

没有固定时间。它取决于页面被重新抓取的频率、站点整体情况、页面本身的重要程度等。能做的加速动作是:在站长工具里提交移除请求作为短期处理,同时用 noindex 做长期处理;减少指向该页面的内链和外链,降低它在站内的权重传递。

不要指望提交一次就立刻消失。搜索引擎需要重新抓取并处理,中间存在时间差,几周甚至更久都有可能。

批量下线时的注意事项

整站改版、批量下线栏目的场景,顺序更要注意。如果直接把 robots.txt 写成 Disallow: /,搜索引擎抓不到页面,也就看不到你的 noindex 或者 404、410 状态,已有的收录可能长期留在索引里,形成“明明下线了还能搜到”的结果。

比较稳妥的做法是:先保持页面可抓取,让页面返回 410 表示永久删除,或者加上 noindex;等大部分页面从索引中消失后,再整体屏蔽抓取。如果站点只是临时维护,用 503 而不是 404,避免把正常页面误标成已删除。

自查清单

  • 用站点查询或 URL 检查工具,确认页面现在到底在不在索引里。
  • 打开 robots.txt,确认目标 URL 没有被自己误屏蔽。
  • 确认页面 HTML 或响应头里确实有 noindex,而不是靠 JS 后置注入。
  • 确认 noindex 页面没有被 canonical 指向别处,避免信号打架。
  • 在服务器日志里确认爬虫近期是否真的抓取过这个页面。

把这几个环节分开看,很多“屏蔽了却还在”的问题都能解释清楚。robots.txt 是抓取开关,noindex 是索引开关,两者不能互相替代,用错顺序还会互相抵消。