很多站点在清理页面时,会同时做两件事:在 robots.txt 里加一条 Disallow,再在页面上加一个 noindex。看起来是双保险,实际效果往往相反——页面没被抓取,却可能仍然留在搜索结果里,展示成一条没有标题描述的空壳。要避免这种情况,先要把这两个工具各自管哪一段分清楚。
两者作用的环节不一样
蜘蛛访问一个 URL,大致经历发现、抓取、解析、判断是否入索引几个阶段。robots.txt 和 noindex 分别卡在不同的位置。
- robots.txt:作用是告诉蜘蛛“这个路径不要来抓”。它在抓取之前生效,蜘蛛看到规则后通常不会请求页面内容。它本身不表达“不要收录”的意思。
- noindex:写在页面里(meta 标签或 HTTP 响应头),只有页面被真正抓取并解析后才会被读到。它的意思是“内容可以抓,但不要放进索引”。
- canonical:解决的是“多个地址指向同一份内容”的问题,属于规范化,和上面两个不是同一类开关。
一句话概括:robots.txt 拦的是抓取,noindex 拦的是收录。要拦住收录,前提是页面得先能被抓到。
最容易踩的几种组合
用 robots.txt 来阻止收录
这是最常见的误用。路径被 Disallow 之后,蜘蛛拿不到页面内容,也就读不到 noindex。如果这个 URL 之前已经被索引过,或者有足够多的外链指向它,它有可能继续留在索引里,只是展示信息不完整。想让它退出索引,正确做法是先放开抓取,保证 noindex 能被读到,等页面从索引里消失后,再决定要不要重新屏蔽抓取。
noindex 页面同时被 robots.txt 屏蔽
和第上面是同一种问题的另一种表现。两个开关叠加,反而让 noindex 失效。如果确实不想让蜘蛛消耗抓取额度,可以用 X-Robots-Tag 响应头,但要确认蜘蛛能请求到这个响应头所在的那一层。
noindex 与 canonical 指向自己以外
页面一边写 noindex,一边用 canonical 指向别的地址,两个信号会互相打架。规范的做法是:想让这个地址退出索引,就只留 noindex;想把它合并到另一个地址,就用 canonical,不要额外加 noindex。
把 robots.txt 当成隐私或权限控制
robots.txt 是公开文件,任何访问者都能读取,被屏蔽的 URL 也仍然可能出现在其他地方。真正的敏感内容应该放在登录之后,而不是靠 robots.txt 挡住。
处理下架页面的推荐顺序
- 先确认页面是否还需要被抓取。如果需要退索引,就放开 robots.txt 对该 URL 的屏蔽。
- 在页面或响应头中加上 noindex,确认返回的是正常状态码,不是 404 或跳转。
- 等页面从索引中退出,这个过程可能需要数周,具体取决于抓取频率。
- 退出之后,如果不想继续被抓取,再考虑重新加回 Disallow;如果页面已经删除,返回 404 或 410 同样能让它逐步退出。
- 整个过程中用站点地图的收录状态、URL 检查工具或索引报告观察变化,不要凭感觉判断。
上线前后怎么自查
- 抽查页面的 HTML 源码,确认 noindex 出现在正确的位置,且没有被模板条件判断漏掉。
- 打开 robots.txt,逐条核对 Disallow 的路径是否覆盖了本来打算收录的目录。
- 测试环境加过 noindex、上线后忘了去掉,是批量漏收录的常见来源,发布流程里最好留一道检查。
- 对重点页面做一次抓取视角的验证,确认蜘蛛拿到的是最终版本,而不是中间层的临时规则。
把抓取和收录当成两个独立的开关来管理,比把它们捆在一起更省事。多数“屏蔽了却还在”“没屏蔽却不收录”的问题,都能在这两个开关的先后顺序里找到原因。
最后提醒一点:无论用哪种方式,索引状态的更新都需要时间,也不会因为提交了某个指令就立刻生效。定期复查规则的残留,比临时补救更有用。