想把某个页面从搜索结果里拿掉,很多人的第一反应是去 robots.txt 写一条 Disallow,或者在页面头部加 noindex。这两个动作看起来都指向“别收录”,但作用的位置完全不同。更麻烦的是,当它们被同时使用,往往会得到和预期相反的结果。
抓取和索引,是两道不同的门
搜索引擎处理一个 URL 大致分两步:先抓取,把页面内容取回;再判断是否值得放进索引,放进索引后才有出现在搜索结果里的可能。
- 抓取由蜘蛛完成,robots.txt 里的 Disallow 影响的就是这一步。
- 索引由搜索引擎的内容系统决定,页面里的 noindex 标签影响的是这一步。
关键点在于:noindex 是写在页面里的,蜘蛛必须先把页面抓下来,才有机会读到它。如果抓取这一步已经被挡住,noindex 就没有机会被看到。
三种组合,结果差别很大
只加 noindex
蜘蛛可以正常抓取页面,读到 noindex 后,通常会把已有的索引条目移除。这是让页面退出索引比较直接的方式,代价是蜘蛛仍会时不时来抓,因为规则上它没被禁止访问。
只加 Disallow
蜘蛛不会抓取该 URL,也就读不到页面上的任何指令。已经进入索引的页面,可能因为长期抓不到更新而停留在旧状态,甚至继续以旧标题、旧描述出现在结果里。对于尚未被收录的 URL,Disallow 能让它大概率不被抓取和收录,但它并不是一个“保证删除已有索引”的操作。
两个一起加
这是最容易出问题的一种。Disallow 挡住了抓取,noindex 没机会被读取,于是已经收录的页面可能长期挂在索引里,你却以为已经处理完了。常见表现是:改完一两个月,搜标题还是能找到,结果里的摘要停留在改动之前。
简单记:想让页面从索引里消失,先放开抓取,让 noindex 被读到;确认条目减少后,再考虑是否需要用 robots.txt 减少抓取。
那么该用哪一个
- 只是不想让它被搜到,页面本身还有用:用 noindex,别 Disallow。
- 站内搜索页、筛选用页,数量巨大且没有收录价值:可以先用 noindex 收口,再评估是否需要限制抓取频率。
- 后台、临时目录、接口地址:这类不需要被外部访问的路径,用 robots.txt 阻挡抓取更合适,同时确认它们本来就不该有外链和站内入口。
- 已经收录、想彻底移除:优先 noindex,等索引条目减少后,再按需调整 robots 规则;不要反过来操作。
改完之后怎么验证
- 用搜索引擎提供的 URL 检查类工具,看当前页面的抓取状态和索引状态是否一致。
- 查看页面返回的 HTML 源码,确认 noindex 是否真的在 head 里,以及是否依赖 JS 后置注入而可能读不到。
- 观察服务器日志,确认蜘蛛是否还能正常访问该 URL。
- 索引条目的更新通常不是即时的,给它一段观察期,不要一天一改规则。
最后提醒一句:noindex、Disallow、canonical、301 各自解决的是不同问题。动手之前先说清楚目标是“别抓”还是“别收”,再选工具,比一次性堆上四五种规则要有效得多。