noindex 和 robots.txt 到底用哪个(以及把两个都搞坏的那个坑)

noindex 阻止收录,robots.txt 阻止抓取,两者不能互换。一张决策表,讲清那个让页面被收录却没有标题和摘要的混用坑,以及如何在 Search Console 里确认修好了。

一句话先说结论: 想让一个页面从 Google 结果里消失,就用 noindex(meta 标签或 X-Robots-Tag 响应头),并且在 robots.txt保持它可被抓取。想省爬虫预算、不让 Google 在垃圾 URL 上浪费抓取,就用 robots.txtDisallow。千万别在同一个 URL 上同时加这两样:一旦 robots.txt 把页面拦了,Googlebot 就读不到 noindex,结果这个 URL 反而可能被收录,而且标题和摘要全是空的。

一句话区别

  • robots.txtDisallow 控制”能不能抓取”。它告诉爬虫别打开这个页面,但完全不管收录。
  • noindex<meta name="robots" content="noindex">X-Robots-Tag: noindex HTTP 响应头)控制”能不能收录”。爬虫必须打开页面,才能读到这条指令。

关键就在这个依赖关系上: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 抓某个私密 / 后台路径Disallownoindex(还是会被抓)
给分面 / 过滤 / 垃圾 URL 省爬虫预算Disallownoindex(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 了。结果是:

  1. Googlebot 遵守 robots.txt,根本不去抓这个页面
  2. 既然没抓,它就永远看不到 noindex
  3. 只要有任何链接指向这个 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 忽略这个页面上的链接时,才加 nofollowcontent="noindex, nofollow"。大多数”从结果里删掉”的场景,用单纯的 noindex(默认保留 follow)就好,这样站内的链接权重还能正常传递。

PDF / 图片等非 HTML 文件上的 noindex —— 设一个 HTTP 响应头(它没有 head 可改):

X-Robots-Tag: noindex

robots.txt 里的 Disallow —— 拦掉某个路径不让抓:

User-agent: *
Disallow: /admin/
Disallow: /search

怎么确认修好了

  1. 先测页面是否可抓。 在 Search Console 打开 URL Inspection,粘贴 URL,看 “Crawl allowed?” 是不是 Yes。如果显示 “No: blocked by robots.txt”,你的 noindex 永远不会生效。
  2. 确认标签真的发出去了。View Source(看源码,别看渲染后的 DOM——有些站是用 JavaScript 注入 noindex 的,Google 可能很晚才渲染到)。如果你走的是响应头路线,curl -I https://yourdomain.com/page 能看到 X-Robots-Tag 响应头。
  3. 请求收录 / 等待重新抓取。 在 URL Inspection 里点 Request Indexing。删除收录不是即时的——Google 重新抓取并把页面踢出来,可能要几天到几周。
  4. 盯着状态翻转。 一旦生效,这个 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

nofollowdisallow 是一回事吗? 不是。nofollow 是链接层面的提示(不通过这条链接传递信号)。Disallowrobots.txt 里的抓取指令。noindex 是收录指令。三个不同层面,别拿一个去替另一个。

相关阅读

标签: #SEO #Google #收录 #排查