robots.txt 配置指南:语法、规则与实战排查
robots.txt 是网站与搜索引擎爬虫之间的第一份"协议"。它告诉爬虫哪些路径可以抓取、哪些不要访问。配置正确,可以引导爬虫高效抓取重要内容、节省抓取预算;配置错误,可能导致整站无法被收录。这篇文章从语法基础讲到实战配置,帮你写出安全、有效的 robots.txt。
robots.txt 是什么#
robots.txt 是一个纯文本文件,放在网站根目录下,通过 https://example.com/robots.txt 可以直接访问。它遵循 Robots Exclusion Protocol(RFC 9309) 标准,是搜索引擎爬虫访问网站时最先请求的文件之一。
当 Googlebot 或其他爬虫准备抓取一个 URL 时,它会先检查该站点的 robots.txt,确认目标路径是否被允许。如果 robots.txt 明确禁止了该路径,合规的爬虫会跳过这个 URL,不发起实际请求。
工作原理#
爬虫访问 robots.txt 的完整流程:
- 请求 robots.txt:爬虫在抓取网站任何页面之前,先请求
/robots.txt。 - 缓存规则:爬虫会缓存 robots.txt 的内容(Google 通常缓存约 24 小时),不会每次抓取都重新请求。
- 匹配 User-agent:爬虫找到与自己匹配的
User-agent段落,读取其中的Disallow和Allow规则。 - 判断路径:将目标 URL 的路径与规则逐条匹配,决定是否抓取。
| robots.txt 状态 | 爬虫行为 |
|---|---|
| 正常返回 200 | 解析规则,按规则决定是否抓取 |
| 返回 404 | 视为没有限制,允许抓取所有路径 |
| 返回 5xx | 暂时跳过抓取,稍后重试;如果持续 5xx,Google 会在一段时间后视为允许全部抓取 |
| 文件过大(>500KB) | Google 只解析前 500KB,超出部分的规则被忽略 |
基本语法#
robots.txt 由一个或多个"规则组"组成,每个规则组以 User-agent 行开头,后面跟着 Disallow 和/或 Allow 指令。Sitemap 指令可以放在文件任意位置。
# 这是注释,爬虫会忽略
User-agent: *
Disallow: /admin/
Disallow: /search
Allow: /admin/public/
User-agent: Googlebot
Disallow: /tmp/
Sitemap: https://example.com/sitemap.xml
指令详解
| 指令 | 作用 | 说明 |
|---|---|---|
User-agent | 指定规则适用的爬虫 | * 表示所有爬虫;Googlebot、Bingbot 等指定特定爬虫 |
Disallow | 禁止抓取的路径 | 路径前缀匹配。Disallow:(空值)表示不禁止任何路径 |
Allow | 允许抓取的路径 | 用于在 Disallow 的范围内开放特定子路径 |
Sitemap | 声明 sitemap 地址 | 必须是完整的绝对 URL,可以有多条 |
Disallow: / 会屏蔽整个网站的所有路径。如果你在测试环境部署时意外把这条规则带到了生产环境,整站都会从搜索结果中消失。上线前务必检查。路径匹配规则#
robots.txt 的路径匹配是前缀匹配:规则路径是目标 URL 路径的前缀就算命中。Google 和 Bing 还支持两个扩展通配符:
| 符号 | 含义 | 示例 | 匹配效果 |
|---|---|---|---|
* | 匹配任意数量的任意字符 | Disallow: /*.pdf | 屏蔽所有路径中包含 .pdf 的 URL |
$ | 匹配 URL 结尾 | Disallow: /*.pdf$ | 只屏蔽以 .pdf 结尾的 URL |
当同一个 URL 同时被 Disallow 和 Allow 匹配时,Google 使用最具体的规则优先(路径更长的规则优先)。如果长度相同,Allow 优先。
User-agent: *
Disallow: /products/
Allow: /products/featured/
# /products/list.html → 被屏蔽(匹配 Disallow: /products/)
# /products/featured/new → 被允许(Allow 路径更长,更具体)
# /products/ → 被屏蔽
常见配置场景#
以下是实际项目中最常见的 robots.txt 配置需求:
屏蔽后台和管理页面
User-agent: *
Disallow: /admin/
Disallow: /wp-admin/
Disallow: /dashboard/
屏蔽搜索结果和筛选页
站内搜索结果页和大量筛选组合页是抓取预算的最大浪费源。
User-agent: *
Disallow: /search
Disallow: /*?sort=
Disallow: /*?filter=
Disallow: /*&sort=
Disallow: /*&filter=
屏蔽特定文件类型
User-agent: *
Disallow: /*.pdf$
Disallow: /*.doc$
允许所有抓取(不做限制)
User-agent: *
Disallow:
Sitemap: https://example.com/sitemap.xml
针对不同爬虫设置不同规则
# Google 可以抓取所有内容
User-agent: Googlebot
Disallow:
# 其他爬虫屏蔽私有路径
User-agent: *
Disallow: /private/
Disallow: /staging/
robots.txt 和 noindex 的区别#
这是技术 SEO 中最常被混淆的两个概念。虽然都涉及搜索引擎对页面的处理,但它们解决的是完全不同的问题。
| robots.txt Disallow | meta robots noindex | |
|---|---|---|
| 控制什么 | 爬虫是否抓取(访问)页面 | 搜索引擎是否将页面放入索引 |
| 放在哪里 | 网站根目录的 robots.txt 文件 | 页面 HTML 的 <head> 中 |
| 能否阻止收录 | 不能可靠阻止——URL 仍可能通过外链出现在搜索结果中 | 能——搜索引擎看到 noindex 后会从索引中移除 |
| 适用场景 | 节省抓取预算、阻止爬虫访问低价值路径 | 阻止特定页面出现在搜索结果中 |
决策路径很简单:
- 想节省抓取预算,把爬虫资源集中在重要页面 → 用 robots.txt
- 想让页面不出现在搜索结果中 → 用 noindex(并确保 robots.txt 不屏蔽它)
- 想让页面完全不被任何人访问 → 用密码保护或服务器访问控制
常见爬虫 User-agent#
不同搜索引擎使用不同的 User-agent 标识。了解它们有助于编写针对性规则。
| User-agent | 所属 | 说明 |
|---|---|---|
Googlebot | Google 网页搜索 | 主要爬虫,抓取网页内容 |
Googlebot-Image | Google 图片搜索 | 专门抓取图片 |
Googlebot-Video | Google 视频搜索 | 专门抓取视频 |
Bingbot | Microsoft Bing | Bing 搜索引擎爬虫 |
Baiduspider | 百度 | 百度搜索引擎爬虫 |
Yandex | Yandex | 俄罗斯搜索引擎爬虫 |
GPTBot | OpenAI | 用于 AI 训练数据抓取 |
Google-Extended | 用于 AI 训练(Gemini 等),不影响搜索索引 | |
CCBot | Common Crawl | 开放网络爬虫,数据常用于 AI 训练 |
GPTBot、Google-Extended、CCBot 等 AI 相关爬虫,同时不影响正常的搜索引擎索引。用 Google Search Console 测试#
Google Search Console 提供了 robots.txt 测试工具,可以在你修改文件之前验证规则是否按预期工作。
- 打开 Google Search Console,在左侧菜单找到"设置"→"robots.txt"(或直接通过旧版工具
search.google.com/search-console/robots-testing-tool访问)。 - 工具会显示你当前的 robots.txt 内容,并高亮解析结果。
- 在底部输入框中输入一个 URL 路径,点击"测试"。工具会告诉你该路径是被允许还是被屏蔽,以及是哪条规则命中的。
- 你可以直接在编辑器中修改规则内容进行测试,但修改不会自动保存——你需要手动更新服务器上的文件。
除了 Search Console,你也可以直接在浏览器中访问 https://你的域名/robots.txt 来检查文件是否可访问、内容是否正确。
更多详细信息参见 Google 官方文档:创建 robots.txt 文件。
常见错误#
robots.txt 语法简单,但错误后果可能很严重。以下是最常见的几类问题:
1. 意外屏蔽整站
# 这会屏蔽所有爬虫的所有路径!
User-agent: *
Disallow: /
最常见的场景:测试环境用了 Disallow: /,上线时忘记修改。
2. 屏蔽 CSS 和 JavaScript 资源
如果 robots.txt 屏蔽了 CSS 或 JavaScript 文件,Google 的渲染服务无法正确渲染页面,可能无法理解页面内容和布局,影响收录质量。
# 不要这样做——Google 需要这些资源来渲染页面
User-agent: *
Disallow: /assets/css/
Disallow: /assets/js/
3. 把 robots.txt 放在错误位置
robots.txt 必须放在域名根目录下。https://example.com/blog/robots.txt 不会被任何爬虫识别。每个子域名需要自己独立的 robots.txt(https://blog.example.com/robots.txt)。
4. 混用 robots.txt 和 noindex
前面已经详细解释了——用 robots.txt 屏蔽页面的同时又期望 noindex 生效,这是矛盾的。
5. 使用 Crawl-delay 期望控制 Google 抓取频率
Google 不支持 Crawl-delay 指令。如果你需要控制 Google 的抓取速率,应该在 Google Search Console 中进行设置。Crawl-delay 对 Bing 和 Yandex 有效。
子域名与多站点#
robots.txt 的作用范围是单个源(protocol + host + port)。这意味着:
https://example.com/robots.txt只控制https://example.com下的路径https://blog.example.com需要自己的/robots.txthttp://example.com和https://example.com是不同的源,分别需要自己的 robots.txt(但通常你已经把 HTTP 301 到 HTTPS 了)
如果一个子域名没有 robots.txt(返回 404),爬虫会视为没有限制,允许抓取所有路径。
本站的 robots.txt#
MagicSEO 是一个纯静态内容站,所有页面都希望被搜索引擎收录,因此 robots.txt 非常简洁:
User-agent: *
Disallow:
Sitemap: https://magic-seo.com/sitemap.xml
配置清单#
- robots.txt 放在域名根目录,返回 200
- 没有意外的 Disallow: / 屏蔽整站
- 没有屏蔽 CSS、JavaScript 等渲染资源
- 没有同时用 robots.txt 屏蔽和 noindex 同一页面
- Sitemap 地址使用完整的绝对 URL
- 用 GSC robots.txt 测试工具验证关键 URL
- 每个子域名有自己的 robots.txt
- 从测试环境到生产环境时检查 robots.txt 是否更新
- 定期检查,确保规则仍然符合当前网站结构
常见问题#
robots.txt 能阻止页面出现在搜索结果中吗?
不能可靠地阻止。robots.txt 阻止的是抓取,不是收录。如果其他网站链接到被 robots.txt 屏蔽的 URL,搜索引擎仍可能根据链接锚文本等信息在搜索结果中展示该 URL(虽然没有摘要)。要阻止收录,应使用 meta robots noindex 或 X-Robots-Tag: noindex,并且不要用 robots.txt 屏蔽该页面。
robots.txt 文件必须放在哪里?
必须放在网站根目录下,通过 https://example.com/robots.txt 可以直接访问。放在子目录中(如 /blog/robots.txt)无效。每个子域名(如 blog.example.com)需要自己的 robots.txt。
robots.txt 写错了会怎么样?
如果语法错误,不同搜索引擎的解析行为可能不同——有的会忽略错误行,有的可能忽略整个文件。最危险的错误是意外屏蔽了重要页面或整个网站(如根目录 Disallow: /),这会导致搜索引擎无法抓取任何内容。修改 robots.txt 后务必用 Google Search Console 的 robots.txt 测试工具验证。
Crawl-delay 指令 Google 支持吗?
Google 不支持 robots.txt 中的 Crawl-delay 指令,会直接忽略它。Bing 和 Yandex 支持。如果需要控制 Google 的抓取速率,应该在 Google Search Console 中调整抓取速度设置。