跳到主要内容
IM智引科技

研究 / SEO

Google robots.txt 解析规则实战指南

robots.txt 写对不等于 Google 一定按你想的方式解析。本篇讲清作用范围、状态码、缓存、字段语法、分组优先级、通配符和冲突规则。

智引科技增长实验室2026年5月10日7 分钟难度 进阶

💡 核心摘要:Google 按明确规则解析 robots.txt:文件只对对应协议、主机和端口生效;2xx 会解析规则,除 429 外的 4xx 通常视为没有限制,5xx 会触发临时停止抓取和缓存回退;规则路径区分大小写,支持 *$,冲突时先看更具体的路径,长度相同则选择限制性更弱的规则。


一、robots.txt 的作用范围比很多人想得窄

robots.txt 必须位于网站根目录,并且只对同一协议、主机和端口下的 URL 生效。https://example.com/robots.txt 不能控制 https://www.example.com/,也不能控制 http://example.com/。如果你的网站同时使用 www、非 www、子域名、HTTP/HTTPS 或非标准端口,就需要分别检查 robots.txt 是否存在且规则正确。

这也是很多抓取控制失效的根源:团队只在主站放了 robots.txt,却忘了图片域名、移动站、CDN 子域、文档子域或测试子域。Google 会按请求目标主机去查对应位置的 robots.txt,不会自动把一个主机的规则套用到另一个主机。

作用范围判断

https://example.com/robots.txt
适用于:https://example.com/*
不适用于:https://www.example.com/*
不适用于:http://example.com/*
不适用于:https://example.com:8443/*

💡 先列出所有会被搜索引擎访问的主机,再逐个验证 /robots.txt,比只检查主域名可靠得多。

二、HTTP 状态码会改变 Google 的抓取判断

Google 请求 robots.txt 时,服务器返回的状态码会直接影响抓取策略。2xx 表示文件可用,Google 会解析其中规则。3xx 重定向会被跟随,但重定向链不应过长,也不能依赖 JavaScript、框架或 meta refresh 这类逻辑跳转。

429 外,多数 4xx 会被理解为“没有有效 robots.txt”,也就是 Google 假定没有抓取限制。401403 不适合用来限制抓取速度,因为它们不会按你期望的方式让 Google 降速。

状态码速查

2xx:解析 robots.txt
3xx:跟随重定向,链路过长会按不可用处理
4xx:除 429 外,通常视为没有 robots.txt
429:按服务器错误类问题处理
5xx:触发停止抓取、缓存回退和重试逻辑

⚠️ 如果你误把 robots.txt 返回成 404,Google 可能会认为全站没有抓取限制。

三、5xx 会触发更保守的抓取行为

如果 Google 找到了 robots.txt,但服务器连续返回 5xx、超时、连接重置、DNS 错误或无效响应,Google 会把它当作服务器错误处理。短期内,Google 会停止抓取对应网站,并继续尝试重新获取 robots.txt。

如果之前有可用缓存,Google 会在一段时间内继续使用旧版本规则,同时持续重试。若长时间无法获取新版本,Google 会根据网站整体可访问性决定后续行为:如果网站其他部分可抓,可能按没有 robots.txt 处理;如果网站整体不可抓,则会停止抓取并定期检查 robots.txt。

💡 robots.txt 是抓取控制入口。上线、迁移、CDN 切换或 WAF 变更时,要把它列入高优先级可用性监控。

四、缓存通常最多 24 小时,但错误会延长影响

Google 通常会缓存 robots.txt 内容,缓存周期一般最多 24 小时。缓存响应可能被不同 Google 抓取工具共享,所以一次错误配置不一定只影响单个抓取器。

如果 Google 无法刷新缓存版本,例如遇到超时或 5xx,缓存生命周期可能被延长。服务器也可以通过 HTTP 缓存头影响缓存行为,但不要把 robots.txt 当作“改完立刻全网生效”的配置文件。

发布建议

上线前本地测试规则
上线后确认 /robots.txt 返回 200
检查 Cache-Control 是否符合预期
在 Search Console 中观察读取状态
重大改动后连续监控 24-48 小时

⚠️ 紧急修复 robots.txt 后,Google 重新读取和应用仍需要时间。不要把它当成实时开关。

五、文件格式有硬限制

robots.txt 必须是 UTF-8 编码的纯文本文件,换行可以使用 CRLFCR/LF。Google 会忽略无效行,并尽量从内容中提取可用规则;如果服务器误返回 HTML 页面,Google 也可能尝试解析其中类似 robots.txt 的有效行。

Google 对 robots.txt 文件大小有 500 KiB 限制,超过部分会被忽略。大型站点如果把每个低价值 URL 都逐条写入 robots.txt,很容易让文件膨胀并产生不可预期的截断问题。

格式底线

纯文本
UTF-8
有效换行
文件不超过 500 KiB
规则路径以 / 开头
无效行不要承载关键逻辑

💡 与其列出成千上万条 URL,不如把低价值内容收敛到可管理目录,再用少量规则控制。

六、Google 支持的字段只有少数几个

Google 支持的核心字段是 user-agentallowdisallowsitemap。字段名不区分大小写,值是否区分大小写取决于字段:user-agent 的值不区分大小写,但 allowdisallow 的路径值区分大小写。

Google 不支持把 crawl-delay 当作抓取速度控制方式。想降低 Google 抓取频率,应使用前一篇教程提到的官方降速方法,而不是在 robots.txt 里写 crawl-delay

推荐基础结构

User-agent: Googlebot
Disallow: /private/
Allow: /private/public-preview/

User-agent: *
Disallow: /tmp/

Sitemap: https://example.com/sitemap.xml

⚠️ Sitemap 可以写多个完整 URL,不依赖某个 user-agent 规则组;抓取工具处理规则时会忽略它对分组的影响。

七、用户代理分组按“最具体匹配”生效

对某个抓取工具来说,Google 只会选择一个最合适的规则组。它会寻找与抓取工具 user-agent 最具体匹配的组;如果没有专门规则,才会使用 User-agent: *

如果同一个具体 user-agent 在文件中出现多个规则组,Google 会把这些组内部合并。但具体 user-agent 组不会和全局 * 组合并。这一点很重要:你不能指望 Googlebot 同时继承 * 下面的规则。

分组示例

User-agent: Googlebot-News
Disallow: /members/

User-agent: *
Disallow: /tmp/

User-agent: Googlebot-News
Disallow: /drafts/
Googlebot-News 实际规则:
Disallow: /members/
Disallow: /drafts/

不会自动继承:
Disallow: /tmp/

💡 如果希望 Googlebot 和所有其他抓取器都禁止同一路径,就在相关具体组里也写一遍,不要只依赖 *

八、路径匹配支持通配符,但规则区分大小写

Google 会把 AllowDisallow 的路径值与目标 URL 的路径部分比较。路径匹配区分大小写,非 ASCII 字符可以使用 UTF-8 字符或百分号转义形式。

Google 支持两个常用通配符:* 表示任意有效字符出现 0 次或多次,$ 表示 URL 结束。结尾的 * 通常没有额外意义,例如 /fish*/fish 的匹配效果相同。

通配符示例

Disallow: /fish
匹配:/fish、/fish.html、/fishheads、/fish.php?id=1
不匹配:/Fish.asp、/catfish、/desert/fish

Disallow: /*.php
匹配:/index.php、/folder/a.php?x=1、/a.php/file.html

Disallow: /*.php$
匹配:/index.php、/folder/a.php
不匹配:/index.php?x=1、/index.php5

⚠️ /private/Private 是不同路径。大小写不一致会造成规则漏控。

九、冲突时先看具体程度,再选限制更弱规则

当多个规则都能匹配同一个 URL,Google 会优先使用更具体的规则。具体程度通常取决于规则路径长度和匹配到的字符。如果两个规则冲突且具体程度相同,Google 会选择限制性更弱的规则,也就是 Allow 胜出。

这就是为什么 Allow 可以用来打开被大目录封锁下的少数资源,但前提是它必须足够具体。否则更长、更精确的 Disallow 仍可能覆盖它。

冲突示例

Allow: /products/public
Disallow: /products/

/products/public/page.html 可抓取,因为 Allow 更具体。
Allow: /folder
Disallow: /folder

/folder/page 可抓取,因为规则长度相同,Google 选择限制更弱的 Allow。
Allow: /page
Disallow: /*.htm

/page.htm 不可抓取,因为 Disallow 匹配更具体。

💡 写 robots.txt 时不要只看规则顺序。Google 的判断重点是匹配对象、具体程度和冲突规则,而不是谁写在前面。


📌 核心收获

  • 作用范围按协议、主机和端口隔离:一个 robots.txt 不会自动控制所有子域或协议。
  • 状态码会改变抓取策略4xx 通常视为无限制,5xx 会触发停止抓取和缓存回退。
  • Google 通常缓存 24 小时:错误和超时可能延长旧规则影响。
  • 只支持有限字段:核心是 user-agentallowdisallowsitemap,不要依赖 crawl-delay
  • 规则冲突看具体程度:更具体规则优先,具体程度相同时限制更弱规则生效。

🚀 立刻行动

  1. 列出网站所有公开主机和协议,逐个访问 /robots.txt,确认作用范围没有遗漏。
  2. curl -I https://example.com/robots.txt 检查状态码、缓存头和内容类型,避免误返回 404403 或 HTML。
  3. 搜索 robots.txt 中的 crawl-delay、重复 user-agent 组和超大规则块,判断是否需要清理。
  4. 抽查 10 个关键 URL,用规则匹配逻辑判断最终是 Allow 还是 Disallow
  5. 对上线流程增加 robots.txt 文件大小、编码、状态码和核心路径规则测试。

来源:Google 如何解读 robots.txt 规范 | 本文为知识提炼与重新表达

NEXT ACTION / 下一步

继续系列:Google robots.txt 管理抓取指南

把读到的方法变成一个小行动,完成后再回来迭代。

继续

RELATED / 相关推荐

接着读这些

按同一分类、系列与标签为你挑选。