在 robots.txt 里写了 Disallow,过一阵再去搜,发现那条地址还挂在索引里,有的甚至还能看到旧标题和旧摘要。于是有人以为规则没生效,回头反复改写法。其实这是两类动作被混在一起了:robots.txt 管的是能不能抓,索引管的是这条地址要不要留在库里。
为什么屏蔽了还会出现在索引里
搜索引擎发现 URL 的渠道很多:站内链接、外链、sitemap、历史抓取记录,甚至用户主动提交。发现之后,它不需要抓取正文,也能先把这条地址记下来。robots.txt 只禁止抓取,不禁止“知道这个地址存在”。
更麻烦的是顺序问题:一旦页面被 Disallow,爬虫就抓不到内容,也就读不到页面上写的 noindex。两边同时落空——既不给抓,又拿不到移除指令,索引里便留下一条没有摘要、或者停留在旧版本的记录。
先确认屏蔽范围对不对
动手之前先花几分钟核对规则本身,因为最常见的失误是误伤。
- 规则里有没有通配符或目录级写法,把不该屏蔽的路径一起圈进去,例如一条规则盖住了整站或整个栏目。
- CMS、插件、缓存层有没有自动生成 Disallow 行,手动加的和自动加的叠在一起。
- 是否存在多份 robots.txt:测试环境、CDN 边缘节点、主域和子域各返回一份,你看到的那份未必是爬虫拿到的那份。
- 用官方测试工具验证某个具体 URL 是被允许还是被拦截,而不是凭规则字面去猜。
范围确认清楚之后,再回头看索引里的残留记录:它是完全没有摘要,还是仍挂着旧标题,还是能正常展示。形态不同,处理方式也不同。
按页面去留分成两种处理
页面不要了
- 先把该地址从 robots.txt 的屏蔽名单里移出去,让它能被抓取。
- 同步让页面返回 404 或 410,或者保持 200 并在页面上加 noindex,二选一,不要同时上。
- 确认 sitemap 里不再列出这条地址,站内指向它的链接也一并撤掉。
- 等待重新抓取,观察索引记录的变化。量大的话分批推进,别一次全放开。
顺序不能反。很多人先把 noindex 加上、又留着 Disallow,结果爬虫根本进不来,noindex 等于没写。
页面要保留,只是不想被抓
这种需求本身值得再想一遍:如果页面有价值、有内链入口、有外链指向,屏蔽抓取并不会让它从索引里消失,反而会让它以残缺形态继续存在。要么接受这个形态,要么把它改成一个允许公开抓取、但明确 noindex 的页面,让指令能被真正读到。
几个容易漏掉的入口
- sitemap 文件里还在列被屏蔽的地址,这等于主动提醒搜索引擎去发现它。
- 旧页面的跳转、站内推荐位、评论区、RSS 里残留着这些链接。
- 外链和转载把地址带到了站外,这部分你控制不了,只能靠页面自身的信号收口。
屏蔽抓取和移除索引是两件事。想让索引里不再出现,前提通常是先让它能被抓,然后由页面自己给出明确态度。
别指望改完立刻见效
索引记录不是实时同步的。改完规则就马上去搜,大概率还看得到旧结果,这类变动以天甚至周为单位。频繁改规则只会让状态更难判断。记录下每次改动的时间和内容,隔一段时间用同一批 URL 对照,比一天查三次有用得多。
把“能不能抓”和“要不要留”分开看:先核对屏蔽范围有没有误伤,再按页面去留决定动作顺序,最后清理还在往这些地址上引的入口,大多数残留记录都能理清。