不少站点会遇到这样一种局面:某个目录已经在 robots.txt 里写上了 Disallow,站长以为它从此与搜索无关,结果过一段时间在索引里仍能看到这些地址,甚至带着标题和摘要。于是有人反复修改 robots.txt,有人干脆再加一个 noindex,问题却一直悬着。要理清这件事,先要接受一个前提:搜索引擎对页面的处理分成「抓取」和「索引」两步,而 robots.txt 只约束第一步。
为什么「屏蔽了」和「还在索引里」能同时成立
robots.txt 的作用是告诉抓取程序「不要来取这个地址」,它并不能直接删除已经存在的索引记录。如果页面在被屏蔽之前已经被抓取并收录,那么屏蔽动作不会立刻让那条记录消失。更麻烦的是,noindex 是写在页面 HTML 里的指令,抓取程序必须先把页面取回来才能读到它;如果这个地址正好被 robots.txt 挡在外面,noindex 就永远读不到,索引里的旧记录也就无从更新。
还有一种情况是无摘要收录:抓取程序被屏蔽、拿不到页面内容,但通过外链、sitemap 等渠道拿到了这个 URL,于是只把它作为一个地址记录进索引,展示时没有标题和摘要。这种记录往往容易被忽略。
先看清索引里的形态再动手
处理之前,建议先做一次状态确认,因为不同形态对应的处理方式完全不同。
- 有标题、有摘要:说明页面此前被抓取过,屏蔽是后来才加的;
- 只有 URL、没有内容:典型的「被屏蔽但仍被发现」;
- 标题摘要是旧版本:说明屏蔽生效时间早于内容更新。
核对顺序
- 确认 robots.txt 规则真的命中了该地址。路径写法、通配符、允许与禁止的优先级都会影响结果。用一个实际 URL 去测,而不是凭印象判断。
- 检查页面里是否同时存在 noindex。如果两个限制叠在一起,抓取程序读不到 noindex,这个指令实际上等于没写。
- 判断取舍:到底想让它被收录还是不被收录。想保留收录,就把 robots.txt 里的屏蔽去掉;想彻底移除,就先放开抓取、让 noindex 生效,等索引记录消失后再考虑重新屏蔽。顺序反了,往往两头都落空。
- 看服务器返回的状态码。如果页面本身已经是 404 或 410,直接用状态码表达「不存在」通常比 noindex 更干脆;前提是这个地址仍然可以被抓取到。
- 核对内链与外链。只要页面还在被别处链接,抓取程序就会不断重新发现它。移除索引记录的同时,链接入口也该一并处理。
- 观察一段时间再判断。索引记录的更新不是实时的,状态变化需要等下一轮抓取与处理,不宜一两天没变化就推翻方案。
几个常见的误区
- 把 robots.txt 当成删除工具:它只能限制抓取,不能直接移除索引。
- 被屏蔽的页面再加 noindex:指令读不到,等于无效。
- 一边屏蔽目录,一边在 sitemap 里提交这些地址:这是给抓取程序制造矛盾信号。
- 只改一处,忘了分站、子目录或测试环境的 robots.txt 各管各的。
简单记一条规则:robots.txt 决定「能不能来取」,noindex 决定「取到之后要不要留」。两者顺序颠倒,就会卡在既删不掉又改不了的状态。
收敛做法
把想要移除的地址列成清单,先确认哪些是「只屏蔽未收录」、哪些是「已收录待清理」。对后者,先放开抓取,确认页面能正常返回并携带 noindex(或直接返回 404/410),再处理内链入口,最后再决定是否需要恢复 robots.txt 的限制。整个过程可以分批次做,每批结束都回到索引状态里核对一次,避免一次性改动过大、出问题时无从定位。
这套顺序的价值不在于快,而在于每一步都可验证。屏蔽和收录本就是两套机制,把它们混在一起讨论,问题只会反复出现。