💡 核心摘要: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 假定没有抓取限制。401 和 403 不适合用来限制抓取速度,因为它们不会按你期望的方式让 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 编码的纯文本文件,换行可以使用 CR、LF 或 CR/LF。Google 会忽略无效行,并尽量从内容中提取可用规则;如果服务器误返回 HTML 页面,Google 也可能尝试解析其中类似 robots.txt 的有效行。
Google 对 robots.txt 文件大小有 500 KiB 限制,超过部分会被忽略。大型站点如果把每个低价值 URL 都逐条写入 robots.txt,很容易让文件膨胀并产生不可预期的截断问题。
格式底线
纯文本
UTF-8
有效换行
文件不超过 500 KiB
规则路径以 / 开头
无效行不要承载关键逻辑
💡 与其列出成千上万条 URL,不如把低价值内容收敛到可管理目录,再用少量规则控制。
六、Google 支持的字段只有少数几个
Google 支持的核心字段是 user-agent、allow、disallow 和 sitemap。字段名不区分大小写,值是否区分大小写取决于字段:user-agent 的值不区分大小写,但 allow 和 disallow 的路径值区分大小写。
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 会把 Allow 和 Disallow 的路径值与目标 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-agent、allow、disallow和sitemap,不要依赖crawl-delay。 - ✓ 规则冲突看具体程度:更具体规则优先,具体程度相同时限制更弱规则生效。
🚀 立刻行动
- 列出网站所有公开主机和协议,逐个访问
/robots.txt,确认作用范围没有遗漏。 - 用
curl -I https://example.com/robots.txt检查状态码、缓存头和内容类型,避免误返回404、403或 HTML。 - 搜索 robots.txt 中的
crawl-delay、重复 user-agent 组和超大规则块,判断是否需要清理。 - 抽查 10 个关键 URL,用规则匹配逻辑判断最终是
Allow还是Disallow。 - 对上线流程增加 robots.txt 文件大小、编码、状态码和核心路径规则测试。
来源:Google 如何解读 robots.txt 规范 | 本文为知识提炼与重新表达
RELATED / 相关推荐
接着读这些
按同一分类、系列与标签为你挑选。
robots.txt 常用规则模板与使用场景
robots.txt 规则要按场景写。本篇整理全站禁止/允许、目录和文件屏蔽、子目录放行、指定抓取器、图片控制、文件类型控制和用户代理合并模板。
Robots Meta 与 X-Robots-Tag 指南
robots meta 和 X-Robots-Tag 用于控制页面或资源的索引、摘要、图片预览、视频预览和缓存展示。它们不能替代 robots.txt,且冲突时更严格规则生效。
Google 常用抓取工具速查指南
Google 常用抓取工具不只有 Googlebot。本文梳理常见 user-agent、robots.txt 令牌、受影响产品和日志过滤要点,帮助你正确配置抓取规则。