robots.txt 的 Disallow 告诉爬虫“不要抓这里”,noindex 告诉搜索“这个页面不要进入索引”。把页面同时 Disallow 又加 noindex,看起来双保险,实际上爬虫可能根本看不到 noindex。
01 先把 Crawling 和 Indexing 分开理解
抓取是搜索引擎访问 URL 获取内容,索引是判断内容是否进入搜索数据库。robots.txt 主要控制抓取行为,noindex 主要控制索引。
这两个阶段不同,所以不能用一个机制替代另一个。
02 Disallow 并不保证 URL 永远不出现在搜索结果
Google 当前 robots.txt 文档明确说明:被 Disallow 的页面内容无法被抓取,但 URL 仍可能在没有摘要的情况下被索引,例如外部页面大量链接到它。
如果业务目标是“这个页面不要出现在搜索”,应使用 noindex 或访问控制,而不是只写 robots.txt。

03 noindex 必须让 Google 能看到
页面通过 meta robots 或 HTTP Header 返回 noindex 后,Google 需要抓取页面才能读取指令。
如果 robots.txt 同时阻止抓取,搜索引擎可能无法发现 noindex,造成“我明明加了 noindex 为什么还在”的常见问题。
04 登录、私密和敏感内容不要靠 robots.txt 保护
robots.txt 是公开文件,任何人都能看到其中列出的目录。它不是访问控制。
真正不应被公开访问的数据应该通过登录、权限、网络限制等安全机制保护。SEO 标签不能替代信息安全。
05 测试环境要从基础设施层阻断,而不是上线前再记得 noindex
Staging 最常见事故是测试站被搜索收录,或者上线时忘记移除全站 noindex。更稳妥的是使用身份验证、IP 限制等方式。
如果确实使用 noindex,也要把“生产环境移除”加入自动化发布检查,而不是靠某个人记忆。

06 筛选和参数 URL 不要一看到多就全部 Disallow
参数页面是否应抓取与索引取决于页面价值。完全禁止抓取可能让搜索无法看到 canonical、链接和内容关系。
应先明确哪些组合有独立搜索价值,哪些只是排序、追踪或用户状态,再分别处理。
07 robots.txt 规则有作用域,子域和协议不能混用
Google 当前规范说明 robots.txt 只对同一主机、协议和端口生效。www.example.com 的规则不自动等于 shop.example.com。
大型企业多子域网站尤其需要逐个检查,不要以为根域放一份文件就覆盖全部服务。

08 上线后用实际抓取与索引报告验证,而不是只看文件内容
robots.txt 语法写对不代表业务目标达成。结合 URL Inspection、索引报告和服务器日志确认 Google 能否抓取、是否读取 noindex。
技术 SEO 最容易出问题的地方,就是配置逻辑看起来正确,却没有验证搜索引擎实际行为。
09 测试环境最常见的错误,是上线后忘记撤掉 noindex
很多团队会在预发布环境统一加 noindex,这是合理做法,但复制到正式环境后如果没有自动化检查,整站可能继续保持不可索引。反过来,只在 robots.txt 里 Disallow 测试站,也不等于页面绝不会出现在搜索结果中。
发布流程可以增加环境级检查:生产域的关键模板不允许带 noindex,测试域则必须受访问控制或明确禁止索引。把规则写进部署流程,比依赖人工记忆可靠。
10 抓取预算不是所有网站都需要优先优化的问题
中小型企业站经常看到大量参数 URL 就立刻担心“抓取预算”,但真正优先级通常是索引质量、内部链接和重复页面治理。只有大型、更新频繁或拥有海量 URL 的站点,抓取效率才更容易成为明显瓶颈。
因此 robots.txt 的目标不应该是“尽可能拦住 Googlebot”,而是让重要页面可抓取、低价值无限空间不失控,同时保留搜索引擎看到必要索引指令的机会。
常见问题
robots.txt 可以写 noindex 吗?
Google 不支持把 noindex 作为 robots.txt 指令。需要使用 meta robots 或 HTTP header。
Disallow 后页面为什么还能搜到?
因为 URL 可能通过外部链接等被发现,虽然内容没有被抓取。
同时 Disallow 和 noindex 更安全吗?
不一定,Disallow 可能阻止爬虫读取 noindex。敏感内容应使用真正访问控制。
测试站怎么防收录最好?
优先使用身份验证或网络限制,并配合环境级索引策略。
PDF 可以 noindex 吗?
可以通过 HTTP X-Robots-Tag 等方式控制非 HTML 资源索引。