网站收录

robots.txt 屏蔽后页面仍在索引:移除 URL 时容易弄反的顺序

robots.txt 只拦抓取,不管索引,这是页面被屏蔽后仍出现在搜索结果里的常见原因。本文梳理抓取、索引、展示三段链路的分工,给出想移除一个 URL 时的操作顺序,以及 noindex、状态码、移除工具各自适用的场景和容易弄反的几处细节。

网站收录

robots.txt 屏蔽后页面仍在索引:移除 URL 时容易弄反的顺序

为什么屏蔽了还在索引里

经常遇到一种情况:某个页面已经在 robots.txt 里写了 Disallow,过了一段时间去搜,结果还在。于是判断「robots.txt 没用」。其实不是没用,而是用错了地方。robots.txt 管的是抓取,不管索引。当蜘蛛被挡在门外,它拿不到页面当前的内容,也读不到页面里的 noindex,只能继续沿用之前那一版快照。屏蔽得越早,旧版本留存的时间可能越长。

先把三段链路分开

  • 抓取:蜘蛛能不能把页面下载下来,受 robots.txt、服务器状态、抓取预算影响。
  • 索引:下载到的内容要不要存进索引库,受 noindex、canonical、内容质量影响。
  • 展示:用户查询时这条结果是否出现,受相关性、排序、地区语言等影响。

robots.txt 作用在第一段,noindex 作用在第二段。想让页面从索引里消失,却只在第一段动手,等于关掉了门却指望屋里的人自己走。

想移除一个 URL,推荐的操作顺序

  1. 先确认这个 URL 现在还能不能被抓取。如果已经被 robots.txt 屏蔽,第一步是把屏蔽放开,让蜘蛛能正常访问。
  2. 在页面返回 200 的前提下,加上 noindex,或者通过响应头下发 X-Robots-Tag: noindex。注意 noindex 只有被读到才生效,读不到等于没写。
  3. 保持这个状态,等蜘蛛重新抓取。期间不要反复改动指令,来回切换会让状态很难判断。
  4. 确认该 URL 从索引里消失之后,如果目的是省抓取预算,再考虑用 robots.txt 屏蔽它。
  5. 如果页面本身已经不打算保留,直接返回 410 或 404 往往比 noindex 更干脆,因为状态码本身就说明页面不存在。
  6. 需要更快处理时,可以使用搜索引擎提供的移除工具,但它通常只是临时措施,长期还是要靠页面自身的状态。

顺序的核心是一句话:先让它能被抓到,再告诉它不要索引。

robots.txt 是给抓取用的,noindex 是给索引用的,两者解决的不是同一个问题。

几种意图对应的做法

  • 页面要留着给人看,只是不想出现在搜索里:用 noindex, follow,页面可以正常访问,内链也可以继续传递。
  • 页面彻底不要了:返回 410 或 404,或者用移除工具,不要用 301 指向一个毫不相关的页面。
  • 只是不想被下载,比如某些资源文件:用 robots.txt,但要清楚它不会让已经进入索引的 URL 自动消失。
  • 参数页、筛选页这类重复版本:先确认哪个是主版本,再决定是收敛到主版本还是整体 noindex。

容易弄反的几处细节

  • 先 Disallow 再加 noindex。顺序反过来,蜘蛛进不来,noindex 永远读不到,页面就一直留着。
  • 只在 robots.txt 写 Disallow,就等着页面从索引消失。多数情况下它不会消失,只是内容变旧。
  • 加了 noindex,但页面返回 404 或 5xx。这时候 noindex 读不到,真正起作用的是状态码。
  • noindex 加在 A 版本上,实际被抓取和索引的是 B 版本,指令落空。
  • canonical 指向一个页面,noindex 又写在当前页,两个信号互相矛盾,最终结果不好预判。

核对顺序小结

遇到「屏蔽了还在索引里」,按这个顺序看一遍:抓取状态是否放行、HTTP 状态码是什么、索引指令写在页面还是响应头、当前索引状态处于哪一档、查询时是否还能展示。一层一层往下走,别跳步。多数问题不是指令没用,而是指令加在了它起不到作用的那一层。