返回博客

SEO

robots.txt 写错了会怎样,怎么检查?

轻则几个页面不被抓取,重则整站从搜索结果里消失。robots.txt 只有几行,错一个字符的代价却可能是几个月的流量。这篇讲清楚它管什么、常见的写错方式,以及怎么用 Search Console 检查。

Philo6 分钟阅读

先说答案:轻则几个页面不被抓取,重则整站从搜索结果里消失。

robots.txt 是放在网站根目录的一个小文本文件,告诉搜索引擎的爬虫哪些路径可以抓、哪些不可以。它通常只有几行,很少有人回头看。也正因为这样,写错了往往几周后才发现,那时流量已经掉下去了。

它管的是抓取

理解 robots.txt,先记住一件事:它控制的是抓取,管不到收录。

Disallow 告诉 Google 别来读这个页面的内容。但如果别处有链接指向这个页面,Google 仍然可能把这个网址收进索引,只是没读过正文,搜索结果里只显示一个网址,没有描述。Search Console 里会标为「已编入索引,尽管遭到 robots.txt 屏蔽」。

反过来也一样。想让一个页面从搜索结果里消失,用 robots.txt 屏蔽它是错的做法。正确的做法是在页面上加 noindex,并且保证 robots.txt 允许抓取这个页面。Google 必须能读到页面,才能看到那个 noindex。

写错了会怎样

按严重程度排:

  • 整站不被抓取。 新页面进不了索引,已有页面的内容不再更新,排名慢慢下滑。
  • 重要目录被误伤。 博客、产品页、某个语言版本整个不被抓取,而你以为只屏蔽了后台。
  • 页面被抓取,但渲染不完整。 屏蔽了 CSS 和 JavaScript,Google 看到的是一个排版错乱、内容缺失的页面,判断它对手机不友好,或者读不到 JavaScript 渲染出来的正文。
  • 想屏蔽的没屏蔽住。 后台、搜索结果页、带参数的重复页面照样被抓取,浪费抓取预算,也可能被收录。

常见的写错方式

上线时忘了删测试环境的规则

这是最致命、也最常见的一个。测试站为了不被收录,robots.txt 里写了:

User-agent: *
Disallow: /

意思是所有爬虫,所有路径,都不许抓。上线时把整个站点连同这个文件一起搬到正式域名,整站就对搜索引擎关上了门。

路径按前缀匹配,误伤了别的页面

robots.txt 的路径是按开头匹配的。

Disallow: /blog

这一行屏蔽的不只是 /blog,还有 /blog/、/blog-post、/blogger 这些所有以 /blog 开头的网址。只想屏蔽某个目录,末尾要加斜杠:Disallow: /blog/。

路径还区分大小写。Disallow: /Admin/ 屏蔽不了 /admin/。

通配符用错

Google 支持两个特殊符号:* 匹配任意字符,$ 表示网址到此结束。

Disallow: /*.pdf$

这一行屏蔽所有以 .pdf 结尾的网址。少了 $,/guide.pdf?download=1 这类网址也会被匹配进去,有时这正是你想要的,有时不是。写之前想清楚到底要匹配哪些网址。

屏蔽了 CSS、JavaScript 和图片

早年有人习惯屏蔽 /assets/、/static/、/wp-includes/ 这类目录,觉得爬虫不需要它们。现在 Google 会像浏览器一样渲染页面,这些文件被屏蔽,它看到的就是一个残缺的页面。

为 Googlebot 单独写了一组规则,结果覆盖了通用规则

User-agent: *
Disallow: /admin/
Disallow: /cart/

User-agent: Googlebot
Disallow: /tmp/

很多人以为 Googlebot 会同时遵守两组规则。实际上,爬虫只会遵守最符合自己名字的那一组。上面这样写,Googlebot 只看第二组,/admin/ 和 /cart/ 对它是开放的。给某个爬虫单独写规则时,要把通用规则也抄一份进去。

以为写进 robots.txt 就能生效的指令

  • Noindex: 写在 robots.txt 里,Google 从 2019 年起就不再支持。
  • Crawl-delay: Google 也不认。想降低抓取频率,要靠服务器响应本身。

文件放错了位置

robots.txt 必须放在域名根目录,比如 https://example.com/robots.txt。放在子目录里不会生效。

它还按主机名分别生效。www.example.com、example.com、blog.example.com 各自需要自己的 robots.txt。http 和 https 也是分开的。

服务器出错

robots.txt 返回 404,Google 会当作没有任何限制,所有页面都可以抓。这通常没问题。

但如果 robots.txt 返回 5xx 服务器错误,Google 会认为暂时不能确定规则,为了稳妥会暂停抓取整个站点。网站本身好好的,只是这个文件访问出错,抓取就停了。

怎么检查

1. 直接打开它

在浏览器里访问 你的域名/robots.txt。确认三件事:能正常打开,没有 Disallow: / 这种整站屏蔽,没有你不认识的规则。

2. 看 Search Console 的 robots.txt 报告

在 Search Console 的「设置」里找到「robots.txt」。它会列出 Google 最近一次抓取到的 robots.txt 文件、抓取时间、有没有抓取出错,以及文件里有没有语法问题。你刚改完文件,也可以在这里请求 Google 重新抓取。

3. 用网址检查工具查具体页面

怀疑某个页面被屏蔽,把网址放进「网址检查」。如果它被 robots.txt 挡住了,会直接显示「已被 robots.txt 屏蔽」。

4. 看「网页」报告里的未编入索引原因

在「网页」报告里,留意这两个状态:

  • 已被 robots.txt 屏蔽。 点进去看列表,确认里面没有你想被收录的页面。
  • 已编入索引,尽管遭到 robots.txt 屏蔽。 这些页面你可能想屏蔽,但它们还是被收录了。要让它们消失,改用 noindex。

5. 改之前先想一遍匹配

每加一条 Disallow,在脑子里过一遍它会匹配哪些网址。拿不准就去网址检查工具里试几个具体的网址。

一份安全的起点

大多数中小网站,robots.txt 只需要这么几行:

User-agent: *
Disallow: /admin/
Disallow: /api/

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

只屏蔽确实不该被抓取的后台和接口路径,其他全部开放,最后写上 sitemap 的地址。规则越少,出错的机会越少。

顺带一提:AI 爬虫

robots.txt 也能控制 AI 公司的爬虫,比如 OpenAI 的 GPTBot、Anthropic 的 ClaudeBot、Perplexity 的 PerplexityBot。有的网站为了防止内容被拿去训练,把它们统统屏蔽。

屏蔽之前想清楚代价。如果你希望自己的内容在 AI 搜索的答案里被引用,屏蔽这些爬虫就等于主动退出了那条渠道。Google-Extended 是个特例:它控制的是内容能否用于 Google 的 Gemini 模型,屏蔽它不影响网页在 Google 搜索里的抓取和排名。

最后

robots.txt 是网站上最短、也最容易被遗忘的文件之一。它很少需要改,但每次网站上线、迁移、改版之后,都值得花一分钟打开看一眼。一行写错的 Disallow,可能要几个月的流量才能补回来。

SEOrobots.txtSearch Console抓取Google 收录

继续阅读