搜索全站
Google SEO 8 分钟阅读

Google 场景下的 robots.txt 最佳写法:允许抓取与屏蔽的平衡

robots.txt 屏蔽错了会让页面以“无摘要”形式留在索引里。本文讲清 Google 支持的指令与不受支持的指令、WordPress 站点的推荐配置、以及屏蔽 CSS/JS 会带来的实际后果。

U
UFO_PF 2020-10-10 · 阅读 8 分钟
Go GOOGLE SEO
阅读提示
本文约 3,106 字,预计阅读 8 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:屏蔽了一堆路径,结果收录更差了

很多站长写 robots.txt 的出发点是“少让爬虫抓点没用的东西,节省预算”,于是把 /wp-admin/、/wp-includes/、/wp-content/、/?s=、各类参数路径全部 Disallow。写完之后发现:页面虽然还在索引里,但搜索结果里的摘要变成了“由于此网站的 robots.txt,无法提供此网页的说明”,点击率断崖式下跌;更糟的是,Google 认为页面无法被正常渲染,排名整体下滑。

robots.txt 的真实定位是抓取指令,不是索引指令。它只能告诉爬虫“能不能来”,不能告诉 Google “能不能进索引”。想让页面不进索引,必须用 noindex。把这两个概念混用,是 robots.txt 事故的第一大来源,具体区别在 noindex 与 robots 屏蔽的区别 中有展开。

原理分析:Google 支持哪些指令

Google 官方文档明确支持的规则包括:User-agent(可用 * 通配)、Disallow、Allow、Sitemap,以及非标准的 Unnecessary?——不存在。需要注意几点:

Crawl-delay 不被 Google 支持(Bing、Yandex 支持),写了不会限速,只会让你误以为起了作用。真正要限速率,在 GSC 的「抓取统计信息」时代有速率设置,现版本主要通过保证响应速度间接影响。

Disallow 是前缀匹配,且 Allow 优先级高于同长度的 Disallow——更准确地说,Google 采用的是最长匹配优先:一个 URL 同时匹配多条规则时,字符数最多的那条生效;长度相同时 Allow 优先。

通配符 * 和 $ 被支持:* 匹配任意字符序列,$ 表示结尾。这让屏蔽参数 URL 变得可行,比如 Disallow: /*?sort=。

屏蔽 CSS/JS 是明确被劝阻的:Google 需要加载这些资源来判断页面是否正常渲染、是否是移动友好。屏蔽后,页面在 Google 眼里的“可用性”会下降。

robots.txt 必须放在根目录且返回 200。返回 404 意味着“无限制”;返回 503 会让 Google 暂停抓取;返回 5xx 会持续重试一段时间。

指令 Google 是否支持 说明
User-agent: * 支持 匹配所有爬虫
Disallow 支持 前缀匹配,空值表示全部允许
Allow 支持 最长匹配优先,同级 Allow 优先
Sitemap: 支持 与 User-agent 分组无关,写在哪都行
Crawl-delay 不支持 写了无效
Noindex: 不支持(已废弃) 必须用 meta/X-Robots-Tag

保姆级实操

步骤 1:确认文件位置与返回码。 必须是 https://example.com/robots.txt(含子域,每个子域独立),返回 200 且 Content-Type: text/plain。

步骤 2:使用下面这份 WordPress 站点的稳妥配置。 它只屏蔽真正不需要抓取的后台与程序文件,同时放开 CSS/JS 与上传目录,并声明站点地图:

User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /wp-login.php
Disallow: /wp-json/
Disallow: /*?s=
Disallow: /*?attachment_id=
Disallow: /cgi-bin/
Disallow: /wp-content/plugins/
Disallow: /wp-includes/
Allow: /wp-includes/js/
Allow: /wp-includes/css/

# 注意:不要屏蔽 /wp-content/uploads/ 与主题目录下的 css/js,
# Google 需要这些资源来渲染页面并判断移动友好性。

User-agent: Googlebot-Image
Allow: /wp-content/uploads/

Sitemap: https://www.example.com/wp-sitemap.xml

步骤 3:用 GSC 的 robots.txt 报告验证。 GSC 里「设置 → robots.txt」会显示旧版报告(对新格式可能有警告),更准确的验证方式是用 URL 检查工具:输入 URL 后看 robotsTxtState 是否为 ALLOWED。也可以用 robots.txt 测试工具(在 GSC 的设置区域)逐条验证。

步骤 4:区分「屏蔽抓取」与「不索引」。 如果你希望某个页面不出现在搜索结果里,正确的做法是:允许抓取(不写 Disallow)+ 页面输出 noindex。反过来,如果你用 robots 屏蔽了一个已被索引的页面,它会长期以无摘要形式存在,且 Google 永远读不到你的 noindex。

步骤 5:处理多子域与多环境。 每个子域需要各自的 robots.txt。测试环境建议:要么整站加 noindex(并确保 robots 允许抓取),要么用 HTTP 认证拦在服务器层——不要用 robots.txt 保护测试站,那只是君子协定。

步骤 6:改动后等待生效并主动刷新。 robots.txt 通常几小时内被读取,但有缓存。紧急情况下可以在 GSC 的 robots.txt 报告里请求更新。

常见踩坑

  1. 写 Disallow: /wp-content/。 直接屏蔽主题 CSS/JS 与图片,页面渲染判定失败。
  2. 用 robots.txt 隐藏测试站。 这不是安全措施,URL 仍可能被索引。
  3. 在 User-agent: * 之前写具体 UA 分组。 分组规则是:只应用最匹配的那一组,顺序不影响结果,但漏写 * 会让其他爬虫无任何规则。
  4. 写了 Crawl-delay: 10 以为在限速。 Google 完全忽略。
  5. Disallow: / 误留在生产环境。 WordPress 后台的「搜索引擎可见性」勾选项就是这个效果,上线前必查。
  6. sitemap 声明用了相对路径或错误协议。 必须是完整绝对 URL,且协议、主机与实际一致。
  7. 案例: 一个站点为了“节省抓取预算”,把所有带 ? 的 URL 用 Disallow: /*? 屏蔽。结果站内的规范文章页本身不带参数,但 Google 早已通过带 utm_ 的来源链接发现了带参数版本——这些版本被 robots 屏蔽后既不能抓取也无法读取 noindex,最终以无摘要形式长期留在索引里,抢走了主版本的部分展现。改为只屏蔽明确的无效参数、并给页面加自引用 canonical 后才恢复。屏蔽参数 URL 前,先想清楚 noindex 能不能被读到。

总结

robots.txt 的写法原则只有四条:只屏蔽真正不需要抓取的路径、绝不屏蔽渲染资源、不用它做索引控制、不用它做安全保护。判断配置是否健康,用两个信号验证:URL 检查工具里 robotsTxtState 为 ALLOWED,且 GSC 索引报告里没有「已编入索引但被 robots.txt 阻止」这一分组。只要这两项正常,你的 robots.txt 就是合格的——至于抓取预算,更应该靠收敛 URL 空间和提升响应速度来优化,而不是靠屏蔽。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。