在站点运营中,robots.txt 常被当成万能开关:把某个目录写进 Disallow,就以为这些页面会从搜索结果里消失。过一段时间去搜,发现页面还挂在结果里,只是摘要变得很奇怪。这不是搜索引擎失灵,而是把两个不同的动作混在了一起。
robots.txt 管的是抓取,不是索引
robots.txt 的作用是告诉蜘蛛“这一段路径可以来抓,那一段不要来抓”。它是一份抓取层面的约定,蜘蛛读到 Disallow 后,会停止对该路径下 URL 的抓取请求。
但索引是另一回事。一个 URL 只要被外部链接、站点地图、历史抓取记录等渠道暴露出去,搜索引擎就可能先把它登记在案——哪怕没有抓取到正文,也能以“仅 URL”的形式出现在结果里。这种结果通常没有正常摘要,标题可能取自外链锚文本或其他来源,看起来就像一条残缺记录。
记住一句:robots.txt 拦的是“进来读”,拦不住“被知道”。
已经被收录的页面,屏蔽之后为什么还在
- 历史索引尚未更新:蜘蛛还没来得及重新访问该 URL,旧记录仍然保留。屏蔽抓取反而让它更难被更新,因为蜘蛛读不到新状态。
- URL 被外链暴露:别的站点、论坛、评论区带着完整 URL,搜索引擎从这些地方就能知道它的存在。
- 内容被转载:同样的内容出现在其他可抓取的站点上,原页面即使屏蔽,相似内容仍可能占据结果。
- Disallow 写法和路径不匹配:目录层级、通配符用法有误,实际并没有挡住目标 URL。
想让页面真正从索引里退出,顺序要反过来
很多站点在这里踩坑:先加 Disallow,再加 noindex。结果蜘蛛根本进不来,读不到 noindex,索引记录就一直在。正确顺序大致是这样:
- 先放开抓取:把该 URL 从 robots.txt 的 Disallow 中移除,确保蜘蛛能正常请求。
- 再给出明确信号:希望尽快下线且不再恢复,用 410;页面搬到别处,用 301 指向新地址;页面还要继续服务用户但不想被搜到,加 noindex。
- 等蜘蛛重访:通过内链、站点地图或搜索后台的抓取工具促成一次访问,让它看到新状态。
- 必要时用移除工具:搜索后台一般提供临时移除功能,可加速隐藏,但它只是过渡手段,最终仍要依赖上面的状态码或指令。
- 回头核对:过一段时间再查该 URL 的索引状态,确认记录已消失或已指向新地址。
三种常见场景,处理方式并不一样
页面彻底不要了
用 410 或 404,别用 robots 屏蔽。返回状态码能被抓取的蜘蛛读到,处理速度也比“屏蔽后等”更可控。若 URL 有外链价值,可考虑 301 到相关性较高的替代页面。
页面保留,只是不想被搜到
用 noindex,同时不要在 robots.txt 里屏蔽它。这一步看起来矛盾,实际是必须的:蜘蛛进得来,才能读到 noindex。常见于会员中心、内部搜索页、活动临时页。
只是不想让蜘蛛浪费抓取
比如后台、购物车流程、大量参数组合页。这类页面可以用 robots.txt 屏蔽抓取,代价是它们仍可能以“仅 URL”的形式出现。如果连这种出现也不接受,那就该用 noindex,而不是单纯屏蔽。
上线前的几个核对点
- Disallow 的路径是否与实际 URL 完全匹配,有没有漏掉大小写、斜杠差异。
- 需要下线的页面,是否同时被 robots 屏蔽和 noindex,形成互相抵消。
- 站点地图里是否还留着已决定下线的 URL。
- 页面上的 noindex 是通过 meta 标签写入,还是仅靠 HTTP 头,二者是否一致。
把“不抓取”和“不索引”分开看待,很多看起来诡异的搜索结果就能解释清楚。屏蔽抓取是最容易加、也最容易加错的一层;判断某个 URL 该怎么处理,先问清楚目标——是删除、迁移,还是仅在站内使用,再决定用状态码、noindex 还是 robots.txt。