很多站点在需要“不让某个页面出现在搜索结果里”时,第一反应是打开 robots.txt 加一行 Disallow,或者给页面加个 noindex。这两个指令看起来目标一致,实际作用的环节完全不同:一个拦在抓取之前,一个作用在抓取之后。用错了组合,常见的结果是——你屏蔽了抓取,页面却仍然带着 URL 留在索引里。
一个管抓取,一个管索引
把爬虫处理一个 URL 的过程拆开看:发现 URL、抓取页面、解析内容、决定是否编入索引。robots.txt 只在“抓取”这一步之前起作用,它告诉爬虫这个路径不要抓。既然页面没被抓取,爬虫也就读不到页面里的 noindex,更无从判断内容质量。
noindex 是页面被成功抓取、解析之后才生效的指令,表达的是“可以看,但不要收录”。因此两者的观察位置也不一样:
- robots.txt 的效果体现在抓取日志里,表现为对该路径的请求减少或消失;
- noindex 的效果体现在索引状态里,页面可能仍被抓取、被读取,但不进入可搜索集合。
两者叠在一起时会发生什么
如果同一个 URL 既被 robots.txt 屏蔽,又带着 noindex,实际结果通常是:爬虫不抓页面内容,只凭外链锚文本或历史信息保留一个“仅有 URL”的条目。用户搜到它,看到的是标题和链接,没有摘要——这往往不是站点想要的状态。
想让页面从索引中消失,先让它可被抓取;想减轻抓取压力,才用 robots.txt。同一时间通常只需要其中一个。
按需求选,而不是按习惯选
希望页面彻底不出现在搜索结果里
允许抓取,加上 noindex;对非 HTML 资源则用 X-Robots-Tag 响应头。页面被抓到后,爬虫读到指令,在后续的索引更新中移除。已经收录的页面不会立刻消失,需要等下一次重新抓取与处理。
只是不想让爬虫反复消耗资源
用 robots.txt 屏蔽路径,比如后台、站内搜索结果页、大量参数组合。这类页面本来也不指望被收录,重点是别让它们占用抓取配额。
页面已经收录,现在要下架
顺序上先放开抓取,再确认 noindex 生效。如果页面本身要删除,配合 404 或 410 会更直接。只加 noindex 却不放开抓取,移除过程会被拖长。
希望保留链接关系、只去掉内容展示
robots.txt 可以让页面不被抓取,但指向该 URL 的外链依然可能使它留在索引里。如果接受“只留 URL、不留内容”,这是一种折中;如果不接受,还是要走可抓取加 noindex 这条路。
几个容易踩的细节
- canonical 与 noindex 同时出现容易互相矛盾。一个说“用另一个版本代表我”,一个说“不要收录我”,爬虫需要自行判断,结果不稳定。
- 被其他页面 canonical 指向的 URL,其 noindex 可能被忽略。动手前先确认是否存在这类关系。
- HTML 之外的资源用不了 meta 标签。PDF、图片、视频要靠 HTTP 响应头里的 X-Robots-Tag。
- robots.txt 是公开文件。不要在里面写任何不希望被看到的路径说明。
- 指令的效果需要时间。不同搜索引擎的处理节奏不一样,改动后要留出观察周期,不要凭一两天的日志下结论。
怎么确认设置真的生效了
- 用 URL 检查类工具看该地址当前是否可被抓取,以及页面实际返回的指令是什么。
- 用站点查询看目标 URL 是否还在结果中,注意“仅有 URL”条目的存在。
- 看服务器日志里该路径的抓取记录,判断 robots.txt 是否真的减少了请求。
- 改动后间隔一段时间复查,避免在同一天内反复调整指令。
把“不想被看到”和“不想被收录”分开表述,是这类设置里最容易做对、也最容易做错的一步。先想清楚要拦在哪一个环节,再决定写哪一行。