一句话先说结论: 想让一个页面从 Google 结果里消失,就用 noindex(meta 标签或 X-Robots-Tag 响应头),并且在 robots.txt 里保持它可被抓取。想省爬虫预算、不让 Google 在垃圾 URL 上浪费抓取,就用 robots.txt 的 Disallow。千万别在同一个 URL 上同时加这两样:一旦 robots.txt 把页面拦了,Googlebot 就读不到 noindex,结果这个 URL 反而可能被收录,而且标题和摘要全是空的。
一句话区别
robots.txt的Disallow控制”能不能抓取”。它告诉爬虫别打开这个页面,但完全不管收录。noindex(<meta name="robots" content="noindex">或X-Robots-Tag: noindexHTTP 响应头)控制”能不能收录”。爬虫必须打开页面,才能读到这条指令。
关键就在这个依赖关系上:noindex 只有在页面可被抓取时才生效。Google 官方文档说得很直白——“For the noindex rule to be effective, the page or resource must not be blocked by a robots.txt file.”(要让 noindex 生效,页面不能被 robots.txt 拦住。)拦了抓取,等于也拦掉了那条”把页面删掉”的指令。
我到底该用哪个?
| 目标 | 用这个 | 别用这个 |
|---|---|---|
| 让一个公开页面不出现在搜索结果里 | noindex(保持可抓取) | 单靠 Disallow 删不掉 |
| 彻底不让 Google 抓某个私密 / 后台路径 | Disallow | noindex(还是会被抓) |
| 给分面 / 过滤 / 垃圾 URL 省爬虫预算 | Disallow | noindex(Google 仍会抓) |
| 让 PDF、图片等非 HTML 文件不收录 | X-Robots-Tag: noindex 响应头 | meta 标签(没有 HTML head 可放) |
| 站内搜索结果页 | Disallow 即可 | — |
| 真正机密的内容 | 服务端鉴权 / 密码 | 两个都不行——它们都是公开的提示 |
记两条口诀:Disallow 管的是抓取和爬虫预算;noindex 管的是结果里显示什么。另外,robots.txt 是放在 https://yourdomain.com/robots.txt 的公开文件——永远别把 Disallow 当成安全措施。
那个坑:同一个 URL 上既 Disallow 又 noindex
这是最常见的”自相矛盾”。你给页面加了 noindex 想删掉它,然后又”为了保险”在 robots.txt 里把它 Disallow 了。结果是:
- Googlebot 遵守
robots.txt,根本不去抓这个页面。 - 既然没抓,它就永远看不到
noindex。 - 只要有任何链接指向这个 URL(站内或外链),Google 仍可能把这个光秃秃的 URL 收录进去——列出来时没有标题、没有描述,只有一个 URL 加一句 “No information is available for this page.”。
在 Search Console 里,这会出现在 Pages → Why pages aren’t indexed 下的 “Indexed, though blocked by robots.txt”。这个状态就是这个坑的指纹。而一个被正确删掉的页面,显示的是 “Excluded by ‘noindex’ tag”。
怎么修: 先想清楚你到底要什么,然后只选一个机制。
- 想让它从结果里消失? 删掉那行
Disallow,让页面可被抓取,保留noindex,然后等重新抓取。 - 想让它永远不被抓? 保留
Disallow,但要接受这并不保证删除收录——同时把这个页面从 sitemap 和站内链接里去掉,别再让任何东西指向它。
别把 noindex 写进 robots.txt 里
还有一个死胡同:一些老教程会在 robots.txt 里写一行 Noindex:。Google 已于 2019 年 9 月 1 日停止支持这种写法——现在它什么都不做。noindex 只有作为页面上的 meta 标签或 X-Robots-Tag HTTP 响应头才有效。该用哪种,见 meta robots 和 X-Robots-Tag 怎么选。
每种怎么写
HTML 页面上的 noindex —— 放进 <head>:
<meta name="robots" content="noindex">
只有在你还想让 Google 忽略这个页面上的链接时,才加 nofollow:content="noindex, nofollow"。大多数”从结果里删掉”的场景,用单纯的 noindex(默认保留 follow)就好,这样站内的链接权重还能正常传递。
PDF / 图片等非 HTML 文件上的 noindex —— 设一个 HTTP 响应头(它没有 head 可改):
X-Robots-Tag: noindex
robots.txt 里的 Disallow —— 拦掉某个路径不让抓:
User-agent: *
Disallow: /admin/
Disallow: /search
怎么确认修好了
- 先测页面是否可抓。 在 Search Console 打开 URL Inspection,粘贴 URL,看 “Crawl allowed?” 是不是 Yes。如果显示 “No: blocked by robots.txt”,你的
noindex永远不会生效。 - 确认标签真的发出去了。 用 View Source(看源码,别看渲染后的 DOM——有些站是用 JavaScript 注入
noindex的,Google 可能很晚才渲染到)。如果你走的是响应头路线,curl -I https://yourdomain.com/page能看到X-Robots-Tag响应头。 - 请求收录 / 等待重新抓取。 在 URL Inspection 里点 Request Indexing。删除收录不是即时的——Google 重新抓取并把页面踢出来,可能要几天到几周。
- 盯着状态翻转。 一旦生效,这个 URL 会从 “Indexed, though blocked by robots.txt” 移出,进入 “Excluded by ‘noindex’ tag”。这就是成功的标志。
常见问题
我加了 noindex,可页面还在 Google 里,为什么?
最可能是这个页面同时被 robots.txt Disallow 了,Googlebot 抓不到它,也就看不到标签。删掉那行 Disallow,在 URL Inspection 里确认 “Crawl allowed? Yes”,再等重新抓取。(其它原因:标签是 JS 注入的、不在原始 HTML 里;或者 Google 还没重新抓而已。)
robots.txt 里的 Disallow 能把页面从搜索里删掉吗?
不能。它拦的是抓取,不是收录。一个被 Disallow 但又有外链指向的 URL 仍可能出现在结果里——只是没有摘要。要删掉页面,用 noindex 并保持可抓取。
我小心一点,能在同一个 URL 上同时用两个吗?
不能——它们直接冲突。在抓取这一步 robots.txt 的拦截会赢,于是 noindex 永远读不到。每个 URL 只选一个机制。
怎么快速删掉收录?
紧急情况下,用 Search Console 的 Removals 工具把某个 URL 临时隐藏约 6 个月,同时让你的 noindex(并允许抓取)去做永久的活。单用 Removals 只是临时的;真正让它彻底消失的是 noindex。
nofollow 和 disallow 是一回事吗?
不是。nofollow 是链接层面的提示(不通过这条链接传递信号)。Disallow 是 robots.txt 里的抓取指令。noindex 是收录指令。三个不同层面,别拿一个去替另一个。