EN 中文
← 博客列表

技术 SEO

robots.txt 与 noindex 有什么区别?抓取与索引别混用

理解 robots.txt、noindex 元标签与 X-Robots-Tag 的用途,避免阻止抓取后爬虫读不到索引指令,并按步骤验证实际配置。

ZevSEO Technical Team 12 分钟阅读
允许抓取网页、读取 noindex 指令,再决定是否进入搜索索引的流程示意
允许抓取网页、读取 noindex 指令,再决定是否进入搜索索引的流程示意

你不希望某个页面出现在 Google,于是把它写进 robots.txt。过了一段时间,搜索结果里却还能看到这个 URL。你又补上 noindex,仍然没有看到预期变化。

问题可能出在这两个配置的组合上:爬虫被阻止访问页面,也就读不到你希望它执行的指令。

robots.txt 用于管理支持这些规则的爬虫访问,noindex 用于控制可访问内容的索引,私密内容则需要身份验证和访问控制。 先明确目标,再选择对应机制。

下面用一个假设 SaaS 网站说明配置与验证方法。代码和情形都是教学示例,不是客户站点的实测记录。

一、抓取与索引,是两个不同的决定

爬虫需要先取得资源,才能读取页面上的索引指令。搜索引擎再决定如何处理资源,以及是否将其纳入索引。

Google 在 robots.txt 入门说明中指出,它用于管理爬虫访问;如果通过其他途径发现 URL,即使抓取被禁止,URL 仍可能出现在搜索结果中。

你的目标 可以采用的起点 不能据此认定什么
减少某些路径被抓取 对相应爬虫配置 robots.txt 页面已从索引删除
公开 HTML 页面可以访问,但不进入搜索 页面上的 noindex 元标签 别人无法打开这个 URL
排除可访问的 PDF 等资源 HTTP 响应中的 X-Robots-Tag 别人无法下载文件
保护客户内容或测试环境 身份验证和访问控制 robots.txt 本身能够保护内容
让公开产品页参与搜索 允许访问,移除意外的索引限制 一定会收录或获得排名

爬虫必须先能抓取页面,才能读取页面上的 noindex 指令

图 1:页面被禁止抓取时,其中的 noindex 可能无法被读取。此图为机制示意。

二、目标是管理抓取时,用 robots.txt

示例站点可以有这样一条简单规则:

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

它要求遵守规则的爬虫避免抓取相应站点上的这段路径。它不能直接删除已收录 URL,也不能限制普通访客打开页面,更不能把内容变成私密内容。

文件应放在站点的 robots.txt 入口。核对实际主机名、协议和端口:生产站点的文件,不会自动控制另一个子域名。范围与匹配行为可查看 Google 的 robots.txt 规则说明。

初次核查时,先选一个爬虫、一条 URL 路径和对应规则。如果有多个 User-agent 分组、通配符或相互重叠的 Allow 与 Disallow,应按官方匹配规则核对,不要认为「文件里最先出现的一行一定生效」。

三、公开页面不该进入搜索时,用 noindex

假设一个公开的提交成功页需要供用户查看,但没有必要成为搜索入口。对于 HTML,可以在 head 中设置:

<!doctype html>
<html lang="zh-CN">
<head>
  <meta charset="utf-8">
  <meta name="robots" content="noindex">
  <title>已收到你的请求</title>
</head>
<body>
  <p>我们已收到你的请求。</p>
</body>
</html>

标题和文字是示例内容。只对目标页面或指定页面类型添加标签,避免误放进生产环境所有页面共用的布局。

如果是 PDF,或不适合添加 HTML 元标签的资源,可以在实际响应中使用:

HTTP/1.1 200 OK
Content-Type: application/pdf
X-Robots-Tag: noindex

这个标头必须出现在 HTTP 响应头里,写进 HTML 正文或 PDF 文本没有同样的作用。具体机制可参考 Google 的 robots 元标签与 X-Robots-Tag 说明。

无论采用哪种方法,都要核实爬虫能取得目标响应并读到指令。添加 noindex,不代表 Google 已有的索引记录会立即更新。

四、不要让抓取限制挡住自己的索引指令

假设 robots.txt 中写了:

User-agent: *
Disallow: /thank-you/

而 /thank-you/ 页面又包含 noindex。Googlebot 如果遵守抓取限制,就无法取得页面,也就读不到这个标签。

如果目标是让一个公开的提交成功页退出搜索,应让这个特定 URL 可以被抓取,再返回 noindex。同时检查更宽泛的目录规则与爬虫专属分组:删掉一行,不一定就消除了实际阻止。Google 在 noindex 实施指南中明确说明了可抓取要求。

如果页面包含私密信息,继续用访问控制保护它。不要为了让爬虫读取索引指令,就把私密内容公开。

示例配置 可能发生什么 下一步
允许抓取,noindex 可以读取 Google 能够处理排除指令 核对响应,之后检查索引状态
禁止抓取,noindex 只在页面里 排除指令可能无法读取 对公开内容解决抓取冲突
禁止抓取,没有 noindex 从其他地方发现的 URL 仍可能出现在搜索中 按真实目标选择机制
需要身份验证 匿名访问者不能读取受保护内容 保留访问保护,另行评估之前的公开曝光

也不要把 Noindex: 写进 robots.txt 就认为它能生效。Google 不支持这种写法,同一份 noindex 指南也对此作了说明。

五、先核对实际响应,再核对 Google 记录

配置部署后,应检查真正希望控制的 URL,包括经过跳转后到达的最终地址。

  1. 检查访问。 目标公开页面是否能打开,还是发生跳转、要求登录或返回错误?
  2. 查看对应 robots.txt。 找到目标爬虫分组与实际作用于该路径的规则。
  3. 检查响应。 同时查看 HTML head 和 HTTP 响应头。CMS、应用和代理都可能影响最终返回的索引指令。
  4. 使用 URL 检查。 对照当前访问情况、索引版本与最近记录的抓取信息。
  5. 等待处理后复核。 当前页面测试通过,不表示 Google 的索引已经更新。

Google 的 URL 检查工具说明区分了索引版本信息与实时测试。变更日志里也应该将两者分别记录。

从明确目标开始,依次检查访问、爬虫规则、页面指令和已记录索引状态的验证流程

图 2:已部署配置与搜索引擎记录的状态,需要分别验证。

与开发人员沟通时,可以保存这张简表:

字段 记录什么
URL 与目标 公开但排除搜索、管理抓取,还是私密访问
实际响应 时间、状态码、跳转与最终 URL
爬虫访问 对应 robots.txt 分组和规则
索引指令 实际元标签或响应头
Google 信息 分别记录索引版本发现与实时测试发现

六、按工具的实际能力使用检测结果

ZevSEO robots.txt 工具可以获取文件,帮助查看简单路径规则。先从一条不复杂的规则和相应爬虫开始。

当前检测器属于基础规则检查,不能完整复现 Google 对全部分组、通配符与优先级组合的处理。它也不会读取目标页的 noindex,更不能证明页面当前是否已收录。复杂情况应结合官方规则文档和 URL 检查工具核对。

这样就不会把一个绿色的「允许抓取」结果,直接当成「页面可以进入索引」。它们回答的是不同问题。

常见问题

Disallow 能让已经收录的页面退出索引吗?

不要依赖它完成删除。先决定资源应公开但不进搜索、需要访问保护,还是应该删除,再选择对应机制并核实结果。

noindex 一定要与 nofollow 一起使用吗?

两者表达不同指令。为了排除当前页面,本文只使用 noindex;不要在没有明确目标时顺手加上其他指令。

移除 noindex,页面就一定能获得排名吗?

不是。还要核对访问、抓取规则和页面内容。移除一道限制,不代表保证收录或获得某个排名。

测试站只用 robots.txt 保护,可以吗?

不可以。测试环境应使用身份验证或其他合适的访问限制。公开可读的 robots.txt 文件,无法保护列出路径中的内容。

先确定目标,再修改规则

公开页面需要退出搜索,就让对应索引指令能够被读取;需要管理抓取,就配置目标爬虫与路径的规则;涉及私密内容,就落实访问控制。

可以先用 ZevSEO 查看 robots.txt,再核对页面响应和 Google 记录,最后判断问题是否真正解决。