robots.txt 有个麻烦的特性:写错了不报错,也不通知你。唯一的表现是收录变慢、新页面进不去,而后台看不出任何异常。
2026 年 11 月我们扫了一遍自己的站点,把下面这五条逐条对照了一遍——其中一条,是我们自己中过的。第 2.5 节写了它是怎么被发现的,以及后来怎么改的。
这篇只讲三件事:哪几种写法真的会让 Google 停手、怎么在十分钟内查出来、以及你的站到底需不需要动它。
一、先判断:你的站要不要碰这个文件
WordPress 装好之后,robots.txt 其实已经在工作了。5.5 版之后,默认输出大致是这样:
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Sitemap: https://你的域名/wp-sitemap.xml
这三行规则加一行声明,对绝大多数企业站够用。真正需要你动手的,只有三种情况:
- 站内有大量搜索结果页、标签页、分页,且这些页面被大量抓取,浪费抓取预算
- 需要按爬虫分组,比如屏蔽 AI 训练爬虫,或对某个爬虫单独限速
- 站点刚迁移或改版,需要临时封禁目录
不在上面三种里,就别改。改错的代价,比改对的收益大得多。
二、五个错误,对应五个自查动作
2.1 Disallow: / ——少几个字符,就是全站封禁
# 这是整站禁止抓取
Disallow: /
# 这才是屏蔽后台
Disallow: /wp-admin/
Disallow: / 表示整站不许抓。它经常先出现在测试环境,然后被原样带到生产环境。
后果不是「排名下降」这么笼统:Google 抓不到页面,就没有新内容可以索引;已经收录的页面不会立刻消失,但会停止更新,长期可能被移除。
怎么查:打开 /robots.txt,搜 Disallow: /,看斜杠后面还有没有内容。
2.2 顺手屏蔽 CSS 和 JS
Disallow: /wp-includes/
Disallow: /wp-content/themes/
Disallow: /*.php$
这三条看起来最「安全」,实际会把 WordPress 的样式和脚本一起挡掉:wp-includes 里是区块样式的 CSS(wp-block-library),themes 里是主题的样式与脚本。Google 需要渲染页面才能判断内容质量,样式被挡住,它看到的是一张裸页。
Disallow: /*.php$ 还会挡住 admin-ajax.php。就算你另写了 Allow,最后也只有路径更长的那条生效——这一层的取词规则,和我们在 WordPress SEO 优化指南 里拆解的先后顺序是同一套逻辑:先定结构,再谈细节。
怎么查:在 Search Console 的「网址检查」里看 Google 渲染后的页面,或看「已屏蔽的资源」报告。
2.3 把正则当通配符
# 这行匹配不到任何东西
Disallow: /category/[0-9]+/
robots.txt 只认两个符号:* 表示任意字符串,$ 表示结尾。它没有正则,[0-9]+ 会被当成普通字符,一条 URL 都拦不住——你以为拦住了,其实什么都没发生。
想拦数字分类页,只能用 Disallow: /category/*/page/ 这类通配,或者在页面里加 noindex。
2.4 给 Google 写 Crawl-delay
User-agent: Googlebot
Disallow: /print/
Crawl-delay: 1
Google 的 robots.txt 规范写明只支持四个字段:user-agent、allow、disallow、sitemap,并明确说明 crawl-delay 一类字段不受支持。这一行对 Google 不起作用。
Bing 支持它,但语义不是「每次请求间隔 N 秒」,而是「N 秒的窗口内最多取一个 URL」——写 10,大约相当于每天 8,640 个页面。要给 Bing 限速,就单独给 Bingbot 写一组,不要放在 User-agent: * 下面,否则支持这个字段的爬虫会被一起限速,不支持的照旧。
2.5 用了物理文件,Sitemap 声明就没了
WordPress 的虚拟 robots.txt 会自动追加 Sitemap: 行;一旦根目录放了物理文件,这条自动声明就不再生效,得自己写。
这就是我们自己的站。2026 年 11 月自查时的情况:
- 根目录有一个物理 robots.txt,500 字节,属主
www:www - 规则写得不算少:屏蔽搜索结果页、登录页、trackback 与 feed,还按爬虫分了组
- 但 Sitemap 声明是空的
站内 xs-sitemap 已经生成了五个子图:general、product、post、case、page。五个文件都在,没有任何一条 Sitemap: 行把它们告诉搜索引擎。Google 那边靠 Search Console 提交过,问题不大;Bing 和 Yandex 就只能靠猜。这类文件的生成与核对,站点地图怎么生成 里有完整步骤。
问题不在规则写得对不对,在于物理文件这条路本身:它绕过了 WordPress 自动追加 Sitemap 行的逻辑,每改一次规则,都得自己记得补那一行。我们后来把规则搬进了后台的 robots 设置(观象台 → Robots.txt),插件在输出末尾统一补 Sitemap,物理文件删掉。
补的就是这一行,一行覆盖五个子图:
Sitemap: https://www.seo628.com/sitemap.xml
三、十分钟自查:先查,再改
| 查什么 | 怎么查 | 有问题的信号 |
|---|---|---|
| 全站是否被禁 | curl -I https://你的域名/robots.txt,看返回内容 | 出现孤立的 Disallow: / |
| 是否挡住样式脚本 | 在文件里搜 wp-includes、themes、*.php | 命中任意一条 |
| 是否写了假语法 | 搜 [、]、(、+ 这类正则符号 | 命中 |
| 是否对 Google 写了 crawl-delay | 搜 crawl-delay | 出现在 Googlebot 或 * 分组下 |
| 有没有 Sitemap 声明 | 搜 Sitemap: | 没有,或指向已失效的路径 |
查完别急着改。先在 Search Console 的 robots.txt 报告里确认 Google 最近抓到的版本——这个文件会被缓存,最长 24 小时才更新。改完 24 小时内看不到变化,是正常的。
顺序上,先修 Disallow: /(全站级),再看样式脚本(影响渲染),最后处理 Sitemap 与限速(影响发现效率)。前两类是止血,后两类是优化。
四、我们自己的写法
规则放在后台的 robots 设置里(观象台 → Robots.txt),内容是这样:
# robots.txt
User-agent: *
Allow: /
Disallow: /search/
Disallow: /?s=
Disallow: /wp-admin/
Disallow: /wp-login.php
Disallow: /*/trackback/
Disallow: /*/feed/
User-agent: Amazonbot
Disallow: /search/
Disallow: /?s=
Crawl-delay: 10
User-agent: SemrushBot
Disallow: /
User-agent: AhrefsBot
Disallow: /
User-agent: MJ12bot
Disallow: /
User-agent: DotBot
Disallow: /
Sitemap: https://www.seo628.com/sitemap.xml
几个取舍说清楚:
- 用后台设置,不用物理文件:插件负责在末尾补
Sitemap:,不用每次改规则都记着一行 - 对 SemrushBot、AhrefsBot 等工具爬虫整站屏蔽:它们抓你的站不为带来访客,只消耗服务器资源,还占日志
- 不挡 AI 爬虫:站内做了 llms.txt,本来就是想让 AI 读得更准;一边挂 llms.txt 一边封 ClaudeBot,等于门口立了牌子却不让进。代价是带宽和日志会多一点,要控就用限速,不要用封禁
/search/和/?s=都禁:WordPress 的搜索结果页是无限组合,放任抓取会吃掉大量抓取预算- Amazonbot 给了 crawl-delay:它属于「支持这个字段、但抓得比较狠」的一类,值得单独限一下
五、什么情况下不用管它
如果站点是标准企业站:没有会员、没有电商、没有多语言,页面在一百个以内——默认那三行规则够用,改它没有额外收益。
还有一点必须讲清楚:robots.txt 不是安全措施。它只是「请求爬虫不要抓」,恶意爬虫根本不看这个文件。真要挡人,靠的是服务器层面的安全配置——限流、登录保护、上传目录禁止执行 PHP,这是另一套东西。
六、什么时候该重新看一遍
三种时机会让原来的规则失效:换域名或迁移、加多语言目录、上电商功能。这三种情况下,先确认 robots.txt 有没有把新目录误挡,再去动别的地方。
至于「多久检查一次」,我们的做法是不设固定周期——只在上面三种变更发生时看。日常反复改一个本来就对的文件,风险大于收益。