robots.txt 规则误拦排查实战指南

上线后发现文章抓取受阻,先查正式域名根目录里的 robots.txt,尤其是有没有把测试环境的 Disallow: / 一起发布。修改规则前,先分清三个目标:允许爬虫读取、阻止搜索收录、限制用户访问。它们需要不同的处理方式。

  • Disallow: 留空与 Disallow: / 含义不同,后者会匹配整个站点的路径。
  • Googlebot 有专属分组时,不会再叠加通用 User-agent: * 分组的规则。
  • "结构与语法未发现问题"只表示通过当前工具的检查,不能证明业务页面没有被误拦。

下面用 Google 搜索爬虫解释具体匹配结果;其他爬虫应按各自公开文档确认。配置中的 example.com 及目录均为演示,部署前要换成真实站点和实际路径。

空 Disallow 和斜杠到底差在哪

如果网站允许遵守该规则的爬虫抓取所有路径,可以使用:

text 复制代码
User-agent: *
Disallow:

空路径的规则不构成抓取限制。它也不是一条能覆盖同组其他禁令的"全部放行"命令;若同组另有非空 Disallow,仍需继续检查。

下列配置则相反,它要求匹配此分组的爬虫不要抓取任何路径,不要把它当作正式公开站点的默认模板:

text 复制代码
User-agent: *
Disallow: /

如果部署后整站出现 robots 抓取限制,应先核对实际提供的文件。不要只检查仓库里准备发布的版本,因为域名路由、部署目录或缓存可能让访问者仍然拿到另一份内容。

屏蔽一个目录,怎样避免把相似路径一起挡住

假设网站公开文章位于 /articles/,而 /drafts/ 是不希望被抓取的草稿目录。以下示例还明确限制不带末尾斜杠的 /drafts 地址:

text 复制代码
User-agent: *
Disallow: /drafts$
Disallow: /drafts/

$ 表示地址结束。按 Google 的路径匹配方式,这组规则的推导结果如下;它不是在线工具自动返回的抓取判定:

请求路径 这组规则是否禁止抓取 原因
/drafts 是 匹配 /drafts$
/drafts/first-note 是 匹配 /drafts/ 前缀
/draftsmanship 否 不匹配这两条规则
/articles/first-note 否 不在禁止范围内
/Drafts/first-note 否 路径大小写不同
/drafts?sort=date 否 查询参数使它不再以 /drafts 结束,也不含 /drafts/ 前缀

最后一行说明,规则需要覆盖实际 URL 形态。如果站点确实存在带参数的 /drafts 页面,就要另行设计对应规则或统一该入口,不能直接宣称"草稿入口全部屏蔽"。单写 Disallow: /drafts 虽然覆盖更广,也会同时匹配 /draftsmanship 这类可能无关的地址。

路径前缀、大小写、通配符和规则优先级以 Google 的 robots.txt 解释文档 为依据。需要放行禁止目录中的例外时,例如 /drafts/public-guide,可以在同组写更具体的 Allow,但要同时列出其他实际地址验证影响范围。

Googlebot 专属分组为什么没有继承通用规则

下面这份配置乍看像是"所有爬虫避开草稿,Googlebot 额外避开内部搜索",但对 Googlebot 并非如此:

text 复制代码
User-agent: *
Disallow: /drafts/

User-agent: Googlebot
Disallow: /search/

Googlebot 选中专属组后,不与 * 组叠加,因此 /drafts/ 没有被其适用规则禁止。如果确实需要两项限制,应明确写在专属组中:

text 复制代码
User-agent: *
Disallow: /drafts/

User-agent: Googlebot
Disallow: /drafts/
Disallow: /search/

这份示例只针对带末尾斜杠的两个路径前缀。若所有爬虫的策略相同,直接用一个通用组更容易维护;只有确实需要不同规则时才拆组。

另外,同一 Google 爬虫对应多个同等匹配的专属组时,Google 会合并适用规则,不是"最后一组覆盖前面"。在线工具会保留重复组并提示,不能仅为消除提示而随意删组。上述分组行为同样见 Google 文档中的 User-agent 优先级说明。

怎样在线检查现有 robots.txt

打开 robots.txt 生成与校验器,选择"粘贴并解析",将前面完整配置放进"现有 robots.txt",点击"解析并载入"。核对分组数量、每组的 User-agent、规则路径和输出文本,再处理校验提示。

它能提示规则写在 User-agent 之前、重复分组、未知指令等问题,也可复制或下载生成结果。它不会访问你的站点,不提供输入某个 URL 后自动判定允许或禁止的功能;因此仍需按规则逐条核对文章中的路径表。

看到未知指令时,先查目标爬虫是否支持。比如工具可以编辑 Crawl-delay,但 Google 不支持该字段,不能靠填写秒数来限制 Googlebot 速度。未知行可能保留在输出里,下载成功也不代表每行都会被爬虫执行。

禁止抓取后,为什么 URL 仍可能出现在搜索结果

robots.txt 管理的是抓取请求。Google 仍可能从外部链接发现被禁止抓取的 URL,并显示一个缺少正文摘要的结果;这不等于它读到了页面内容。

对可以公开访问、但不希望进入 Google 搜索结果的 HTML 页面,应让 Google 能够抓取到页面,并在页面 <head> 中设置 noindex:

html 复制代码
<meta name="robots" content="noindex">

这是页面标签,不应写进 robots.txt。若先在 robots.txt 禁止该页抓取,爬虫就可能看不到新加的 noindex;也不要把调整后立即消失当成保证,处理需要重新抓取。具体要求见 Google noindex 使用说明。

如果内容本来就不应公开,应使用登录认证和访问授权。不要为了让搜索爬虫看到 noindex 而公开敏感内容;robots.txt 中列出目录也不会限制普通用户访问。

发布规则后还要检查什么

将 UTF-8 纯文本文件部署到目标站点根目录的 /robots.txt。直接访问真实地址,确认看到的是规则正文,没有变成登录页面或应用首页。还要分别核对使用中的协议、子域名和端口,不能假设一份文件控制所有站点入口。

现象 优先检查 修复方向
公开文章整体被拦 是否发布了 Disallow: / 按实际目录恢复公开抓取策略
相似名字的公开目录被拦 前缀规则是否过宽 列出具体地址,缩小匹配范围
Googlebot 抓了通用组禁止的目录 是否存在专属分组 在实际生效的组中明确所需限制
设置 Crawl-delay 后 Googlebot 未按预期降速 目标爬虫是否支持 使用 Google 文档支持的抓取管理方式
校验无提示,线上仍被拦 文件部署、缓存或实际匹配是否不同 对照线上文件与目标页面的站长平台检查结果
禁止抓取后仍有搜索结果 是否混淆抓取与索引 根据公开访问要求选择 noindex 或访问控制

本文于 2026-09-11 核对 cc-tools 0.1.0 的解析与生成实现,并查阅以上 Google 一手资料。路径表属于按官方规则推导的例子,线上是否生效还需以自己站点实际提供的文件和抓取记录确认。

相关推荐
打工仔折腾 AI5 小时前
工业场景下时序库与实时计算一体化架构选型实践对比
java·开发语言·后端·python·性能优化·架构·ai agent 实战
蜗牛互联网5 小时前
长任务多Agent共享文件系统的Manifest交接模式
java·人工智能·后端
苏supper7 小时前
Spring Boot多环境配置与打包运行
spring boot·后端·spring
geovindu7 小时前
rust: Composite Pattern
开发语言·后端·设计模式·rust·组合模式
SearchMan8 小时前
还有人不知道&和&&的区别?
后端
想用offer打牌8 小时前
Personal Agent爆火 - 它到底是个什么
人工智能·后端·ai编程
IT_陈寒8 小时前
Vue的v-if和v-for混用居然是个天坑
前端·人工智能·后端
打工仔折腾 AI10 小时前
从Attention到BERT:双向预训练语言模型到底解决了什么问题
人工智能·后端·python·深度学习·语言模型·bert
lizhongxuan11 小时前
Agent Sandbox: Firecracker 任务生命周期
后端
YYYing.11 小时前
【设计模式系列 (七) 】桥接模式
c++·后端·设计模式·桥接模式