上线后发现文章抓取受阻,先查正式域名根目录里的 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 一手资料。路径表属于按官方规则推导的例子,线上是否生效还需以自己站点实际提供的文件和抓取记录确认。