网站收录

robots.txt 与 noindex 冲突时:收录核对先确认哪条指令真正生效

robots.txt 管抓取、noindex 管索引,两者叠加时顺序反了就会互相抵消。本文按抓取层到索引层梳理核对顺序:先确认爬虫能否请求到页面,再看响应头与原始 HTML 里的指令,最后判断索引侧是延迟还是未生效,并列出常见误用。

网站收录

robots.txt 与 noindex 冲突时:收录核对先确认哪条指令真正生效

把页面从索引里拿掉时,很多人会同时做两件事:在 robots.txt 里屏蔽,在页面上加 noindex。结果是页面照旧出现在搜索结果里,于是怀疑指令没生效。实际上这两条指令作用在不同阶段,顺序反了就会互相抵消。

两条指令分别在管什么

robots.txt 管的是能不能抓,它决定爬虫是否去请求这个 URL;noindex 管的是能不能索引,它写在响应头或 HTML 里,必须被爬虫实际读到才会起作用。

如果 robots.txt 禁止抓取,爬虫不会请求页面,也就读不到页面上的 noindex。这时页面可能因为外链和历史信号仍留在索引中,只是缺少摘要或显示为旧快照。想让它退出索引,反而要先允许抓取。

核对顺序:从抓取层往索引层走

  1. 确认 robots.txt 是否允许该 URL 被抓取,包括是否被通配符或目录规则误伤。
  2. 确认响应头里有没有 X-Robots-Tag,它的覆盖范围和优先级常被忽略。
  3. 确认 HTML head 里的 meta robots 是否真的出现在原始 HTML 中,而不是由脚本后插入。
  4. 确认页面对爬虫返回的状态码是 200,而不是 403、503 或跳转。
  5. 最后再去看索引侧的状态,判断是刷新延迟还是指令根本没被读到。

常见的几处误用

  • 在 robots.txt 里写 noindex。robots.txt 不支持 noindex 语法,写进去只是无效文本,还会让人误以为已经处理。
  • 一边 Disallow 全站一边加 noindex。两条指令叠加后互相抵消,结果是页面既不刷新也不退出。
  • 只屏蔽某类参数 URL,却指望它们从索引消失。屏蔽只阻止后续抓取,已索引的版本需要单独处理。
  • noindex 页面仍提交在 sitemap 里。一边说别收,一边把 URL 递过去,核对时容易被这类信号带偏。
  • meta 标签由前端框架在客户端注入。渲染环节不稳定时,爬虫读到的原始 HTML 里可能什么都没有。

需要临时屏蔽目录时怎么做

测试环境、未上线栏目这类页面,如果既不想被收录也不希望被抓,一般会先用 robots.txt 屏蔽抓取。但要清楚这是以放弃索引控制为代价的:屏蔽之后,页面上写的 noindex 不再有机会被读到。如果目标是彻底移除,路径通常是先放开抓取、返回正常状态并加上 noindex,等索引侧确认移除后,再视情况恢复屏蔽或改成 410、301。

判断顺序只有一个原则:任何写在页面里的指令,都必须先被抓取到,才谈得上生效。核对时先问“爬虫有没有拿到这个响应”,再问“拿到的内容里写了什么”。

核对时可以顺手记录的东西

  • 该 URL 在 robots.txt 中的匹配规则,以及测试工具给出的判定结果。
  • 响应头完整内容,尤其是 X-Robots-Tag 与缓存相关的头部。
  • 用抓取工具以爬虫身份请求时拿到的原始 HTML,与浏览器里看到的做对比。
  • 指令修改的时间点,以及索引侧状态变化的时间点,方便判断是延迟还是未生效。

把这些记录下来,之后再遇到“加了 noindex 还在索引里”的情况,就能快速定位是抓取层没放行、指令没被读到,还是只是索引刷新还没轮到。