处理不希望被搜索收录的页面时,很多人把 robots.txt 里的 Disallow 和页面里的 noindex 当成同一件事。两者确实都出现在“阻止收录”这条链路上,但作用的位置不同:一个决定爬虫能不能把内容抓走,一个决定抓到之后要不要放进索引。选错工具,常见的结果是“明明屏蔽了却还搜得到”,或者“屏蔽之后页面里的指令再也送不出去”。
一个管抓取,一个管索引
Disallow 写在 robots.txt 里,属于站点级别的约定。它告诉爬虫不要请求某个路径,请求一旦被拦下,页面内容、HTTP 响应头、正文里的 meta 指令都不会被读取。
noindex 则写在页面响应里,形式上可以是 HTML 里的 meta robots 标签,也可以是 HTTP 响应头里的 X-Robots-Tag。它不阻止抓取,只是表达“这个 URL 可以抓,但不要放进索引”。
关键在于顺序:noindex 要先被读到才有效,而读取的前提是页面被抓取。所以两者不是两把同时落下的锁,而是链路上前后相邻的两个环节,混用容易出现互相抵消。
几种常见的组合错误
- robots.txt 屏蔽叠加页面 noindex:屏蔽生效后爬虫不再抓取该页面,自然也看不到 noindex。结果是页面可能长期留在索引里,或者只保留一个没有摘要的 URL 条目。
- 用 robots.txt 应付单页面的索引问题:整站屏蔽范围过大,会连带影响正常页面被抓取,恢复后还需要等待重新抓取。
- noindex 与 canonical 指向互相矛盾:一边声明页面不该进索引,一边又把它当作规范版本,信号冲突时判断结果很难预测。
- 顺手屏蔽了 CSS、JS 资源目录:样式和脚本抓不到,页面渲染会受影响,正文内容可能无法被完整读取。
noindex 生效需要满足的前提
- 页面能正常抓取,返回 200,没有被 robots.txt 拦住;
- meta 指令位于 head 中且能被解析,不要依赖页面加载后由脚本延迟写入;
- PDF、图片、视频等非 HTML 文件写不了 meta 标签,需要用 X-Robots-Tag 响应头承载指令;
- 指令之间没有冲突,例如同一个页面同时出现 index 与 noindex。
不同场景下怎么选
- 临时不想让爬虫消耗抓取额度,或整站维护期间,用 robots.txt;
- 某个页面确认要留在站内供用户访问,但不希望出现在搜索结果里,用 noindex;
- 测试环境、后台入口这类本就不该被抓的路径,用 robots.txt;
- 参数页、筛选页如果不希望被索引,但仍想让链接被继续跟随,可以写成 noindex, follow。
上线之后怎么核对
配置完成后,先用抓取工具请求目标 URL,查看返回的状态码、响应头和 HTML 源码,确认指令确实送达,而不是被缓存或前端改写。过一段时间,再用站内搜索或站长工具里的覆盖率报告复查,看这些 URL 是否已从索引中消失。移除并不是即时的,节奏取决于搜索引擎重新抓取该页面的时间。
提醒:robots.txt 和 noindex 都只是表达意愿的方式,最终是否收录由搜索引擎自行判断。发现页面仍出现在结果里时,先确认指令有没有被真正读到,再判断是等待时间不够,还是配置本身写错了。
把两者分清之后,判断成本会低很多:先问自己是“不想被抓”还是“不想被索引”,再决定写下哪一条规则。顺序理清了,绝大多数“屏蔽无效”的困惑都能找到对应的原因。