做站点运营经常会碰到一个需求:某个页面不想让它出现在搜索结果里。这时候面前通常摆着两个选项——在页面里加 noindex,或者在 robots.txt 里屏蔽。两者看起来都是"挡住",但作用的位置完全不同,顺序用错了,反而会让页面在索引里待得更久。
先把两件事拆开:抓取和索引
搜索引擎处理一个 URL,大致分两步:先由爬虫把页面抓下来,再决定要不要放进索引。robots.txt 管的是第一步,noindex 管的是第二步。
在 robots.txt 里写 Disallow,等于告诉爬虫"这个地址不用来抓"。爬虫看不到页面内容,自然也读不到页面里的 noindex 标签。noindex 反过来,它必须写在页面里,或者通过 HTTP 响应头返回,爬虫得先把页面抓下来才能看到。这就是为什么一个常见的坑是:既在 robots.txt 里屏蔽,又指望页面里的 noindex 生效,结果两边都没起作用。
robots.txt 常被误用的地方
很多人以为在 robots.txt 里屏蔽一个 URL,它就等于从搜索结果里消失了。实际并不一定。
- 如果这个 URL 之前已经被索引,屏蔽抓取并不会立刻把它清出索引,它可能继续以没有摘要的形式出现在结果里。
- robots.txt 是公开文件,任何人可以查看。不要把不想公开的路径当成保密手段。
- 不同爬虫对 robots.txt 的遵守程度不一样,屏蔽的实际范围也可能有差异。
所以 robots.txt 更适合用来控制抓取预算、减少无意义的抓取压力,而不是用来做索引清理。
noindex 生效需要满足什么
noindex 要想起作用,前提是页面能被抓取。也就是说:
- 该 URL 没有被 robots.txt 屏蔽;
- 服务器能正常返回页面,不是持续的超时或 5xx;
- 标签写在正确的位置,能被解析到。
常见的写法有两种:HTML 页面上用 <meta name='robots' content='noindex'>,非 HTML 资源比如 PDF、图片、视频,用 HTTP 响应头 X-Robots-Tag。后者容易被忽略,一份 PDF 只在文件里塞 meta 标签是没用的。
一个实用顺序:页面还没被索引、想让它别进去,可以允许抓取并加 noindex;页面已经被索引,同样先允许抓取并加上 noindex,等它从索引里消失之后,再考虑是否收紧抓取。
按场景选做法
具体用哪个,取决于页面当前的状态和你真正想达到的目的。
- 不想被搜到、也不想被索引:允许抓取,加 noindex。确认移出索引后,如果不希望继续消耗抓取资源,再改成 robots.txt 屏蔽。
- 只是不想让它占抓取预算:用 robots.txt。比如筛选参数、排序参数生成的组合页。
- 页面数量大、层次明显:先看清哪一层是真正需要收录的,把不需要的层用 noindex 或屏蔽处理,不要所有层套同一套规则。
- 已被索引且内容敏感:除了 noindex,还可以用搜索引擎提供的移除工具做临时处理,同时把页面本身删掉或改成返回 404、410。
改完之后要看什么
调整不是改完就结束,还需要核对几件事:
- 用抓取测试工具确认页面返回的是预期状态码,noindex 是否被识别;
- 观察一段时间内的索引数量变化,注意是缓慢下降还是完全没有变化;
- 检查 robots.txt 是否误屏蔽了你还需要收录的路径,尤其是测试环境的规则被带到线上;
- 如果走了删除路线,确认页面确实返回 404 或 410,而不是仍然返回 200。
简单归纳:robots.txt 决定抓不抓,noindex 决定收不收。想让一个页面从索引里出去,通常要靠 noindex 加可抓取;只想减少抓取压力,才用 robots.txt 屏蔽。把这两件事分清,很多反复处理不掉的问题就能顺着原因找到出口。