网站收录

robots.txt 挡住的 URL 还在索引里:抓取限制不等于收录移除

robots.txt 写了 Disallow,结果页里却还能看到那条 URL,原因通常是抓取限制和收录移除被混为一谈。本文区分两者的作用范围,说明 Disallow 与 noindex 叠加为什么会互相抵消,并给出按实际需求选择屏蔽、noindex、404 或 301 的判断顺序与观察节奏。

网站收录

robots.txt 挡住的 URL 还在索引里:抓取限制不等于收录移除

在索引报告里看到一批本该被屏蔽的 URL,回头检查 robots.txt 明明写了 Disallow,这是不少人遇到过的场景。问题通常不在于规则写错了,而在于把“不允许抓取”和“不允许收录”当成了同一件事。

抓取和收录是两条独立的线

搜索引擎处理一个 URL,大致要经过几步:发现(从外链、sitemap、内链得知它存在)、抓取(取回内容)、索引(判断是否值得进入索引)、展示(在结果页出现)。robots.txt 只作用于第二步。

它可以明确告诉蜘蛛“这个路径不要来抓”。但蜘蛛依然可能通过其他渠道知道这个 URL 存在,比如别的网站链过来、曾经被抓取过、sitemap 或其他文件里出现过。这种情况下,蜘蛛不会去取内容,却可能只凭 URL 本身和外部信号,先放一条没有摘要的索引记录进去。

结果就是:屏蔽了抓取,却在结果页里看到一条只显示 URL、没有标题和描述的条目。这不是 robots.txt 失效,而是它的作用范围本来就不覆盖收录。

Disallow 之后,noindex 为什么会失灵

更常见的一种误操作是:先在 robots.txt 里写 Disallow,再在页面里加 noindex,以为这样是双重保险。实际效果往往相反。

noindex 是写在页面 HTML 里的指令,蜘蛛必须抓到页面才能读到它。如果 robots.txt 已经禁止抓取这个路径,蜘蛛根本进不来,也就看不到 noindex。两个指令叠在一起,等于把唯一可能让页面退出索引的通道堵死了。所以想用 noindex,就必须让这个 URL 保持可抓取。

不同需求该用哪种手段

  • 只想省抓取资源、不介意是否收录:用 robots.txt。适合后台路径、无限参数组合、站内搜索结果页这类不需要进索引也无需精细控制的地址。
  • 想让页面彻底不进索引:用 noindex,并保证该 URL 可以被抓取,robots.txt 里不要屏蔽它。
  • 页面已经废弃、不再需要:返回 404 或 410,或者 301 到内容相近的新页面。这通常比 noindex 更干净。
  • 内容敏感、不能外露:不要依赖 robots.txt,它只是约定。真正的做法是权限控制或直接下线内容。

已经进了索引的 URL 怎么处理

  1. 先确认这条记录属于哪种情况:是抓取过但被判断为低价值,还是从未抓取、只有一条 URL。前者看索引报告给出的原因,后者多半是外链造成的。
  2. 如果页面还需要存在但不该被收录:去掉 robots.txt 里的 Disallow,加上 noindex,等蜘蛛重新抓取后确认状态变化。
  3. 如果页面可以彻底消失:让它返回 404 或 410,同时清理指向它的内链,避免蜘蛛反复顺着链接过来。
  4. 如果内容已经搬到新地址:301 到新地址,并更新内链和 sitemap。
  5. 观察周期按周计,不要每天反复改动指令,否则蜘蛛每次抓到的状态都不一样,反而拖慢处理。

容易忽略的几个细节

robots.txt 的规则通常是前缀匹配,“Disallow: /search” 会同时挡住 /searching 这类路径,写规则时要留意边界。同一路径下不同参数、不同大小写的地址,在 robots.txt 里未必被同一条规则覆盖,需要分别确认。

还有一点:robots.txt 本身改错或返回 5xx 时,蜘蛛可能会在短期内放宽限制去抓取。所以改完之后,建议用抓取测试工具确认一遍规则是否按预期生效,再回头观察索引报告里的变化,而不是改完就当结束。

把这几件事分开看,思路会清楚很多:robots.txt 管的是“能不能来抓”,noindex 管的是“要不要留下”,404 和 301 管的是“这个地址还存不存在”。想移除一条收录,先问自己属于哪一种,再去选对应的手段。