不少人把 robots.txt 当成“从搜索结果里删掉页面”的开关:加一条 Disallow,就觉得这个地址会从索引里消失。跑一段时间后回头看,site: 查询里那个 URL 还在,只是标题和摘要变成了一串占位文字。这不是引擎没执行指令,而是把两件不同的事混在了一起——不让爬虫来抓,和把已收录的结果移出索引。
抓取屏蔽和索引移除是两条线
robots.txt 管的只有一件事:爬虫能不能来取这个 URL 的内容。它不负责清理已经建好的索引条目。一个 URL 被抓取并收录过之后,即便再加 Disallow,索引里通常仍会保留这个地址,因为引擎知道它存在,只是拿不到最新内容来更新标题和摘要。
反过来,真正能让页面退出索引的信号必须写在页面本身或 HTTP 响应头里,而爬虫要读到这些信号,前提是这个 URL 先被允许抓取。
结论有点反直觉:想让 noindex 生效,就不能用 robots.txt 把它挡在门外。屏蔽抓取和禁止收录同时用,会互相抵消。
几种手段各自能做什么
- robots.txt 的 Disallow:控制抓取范围和频次,适合参数页、站内搜索、后台路径。但它不等于移除索引,已收录的 URL 可能长期以无描述形式残留。
- meta robots noindex 或响应头里的 X-Robots-Tag: noindex:告诉引擎不要把这一页放进索引。适合页面还在线上、但不希望出现在搜索结果里的情况。
- 404 与 410:内容确实下线时使用。410 表示永久移除,信号更明确。注意别用 200 返回一个“内容已删除”的提示页,那是软 404。
- 移除请求工具:临时手段,主要用来争取时间,最终仍要靠上面三种之一给出稳定信号,否则到期后残留还会回来。
常见的组合错误
- 整个目录 Disallow,同时又在页面里写 noindex——指令读不到,等于没写。
- 页面已经彻底下线,却只加 Disallow,不返回 404 或 410,旧标题可能继续展示。
- 整站 Disallow 之后干等索引自然消失,结果只是把结果变成无描述的形式。
- 测试站上线时忘了删掉 Disallow,导致新页面一直进不了索引,这是收录量突然归零的高频原因。
按场景的核对顺序
- 先判断这张页面是否还需要存在。还在线上、只是不想被搜到,用 noindex,并保持可抓取。
- 内容彻底不要了,返回 410 或 404;内容只是搬到了新地址,用 301 指向新地址,而不是 Disallow。
- 只是不想被抓太多,比如排序参数、筛选组合、站内搜索,Disallow 可以用,但要接受索引里可能残留 URL 这一事实。
- 已经出现残留,先确认 robots.txt 没有挡住抓取,让 noindex 有机会被读到;情况紧急时再提交移除请求过渡。
- 改完做一次验证:用 robots.txt 测试工具跑目标路径,确认是 allow 还是 disallow,再看页面的返回码与响应头里的 X-Robots-Tag。
自查清单
- site: 查询残留 URL 是否还在,展示形式是否异常,比如无描述、标题显示为域名。
- 抓取日志里这些 URL 的状态是 200 还是 robotted,能直接反映爬虫有没有真的拿到内容。
- 页面索引报告里“已发现但未编入索引”和“已编入索引但未展示”的分布,用来判断问题出在抓取还是页面本身。
- 把“确认生产环境 robots.txt 没有误伤主目录”写进上线检查表。
robots.txt 是一把范围很大的刀,切的是抓取范围,不是索引状态。处理收录问题时,先想清楚自己要的到底是“别被抓”还是“别被收录”,再挑工具;顺序弄反,往往就是白等几个月。