robots.txt 自查不是看“有没有写 AI 爬虫”这么简单,而是逐项确认:文件位置对不对、规则作用在哪个协议和主机、核心目录有没有误挡、敏感内容有没有用真正权限保护、公开抓取和用户触发访问有没有分开处理。
很多外贸站的 robots.txt 看起来很短,问题却很深。
比如:
User-agent: *
Disallow: /
这一行放在测试站可以理解。
上线后忘了删,公开产品页、FAQ 页、案例页、供应商介绍页都可能被挡住。
再比如:
User-agent: *
Disallow: /admin/
Disallow: /quote/
看起来像保护后台和报价页,其实 robots.txt 是公开文件,不是安全系统。真正敏感的客户资料、报价单、订单页,应该用登录、权限、密码或服务器访问控制,而不是写给 crawler 看的“请别看”。
所以,外贸网站 robots.txt AI 爬虫自查,要从基础规则一项项看,而不是上来复制几行 AI bot 配置。
第一步:先确认robots.txt到底在哪里生效
Google 官方说,robots.txt 必须放在站点根目录,而且只对同一协议、主机、端口生效。
这句话对外贸站特别重要。
你要分别检查:
curl -I https://www.example.com/robots.txt
curl -I https://example.com/robots.txt
curl -I http://www.example.com/robots.txt
curl -I https://en.example.com/robots.txt
不要以为一个 robots.txt 自动管全部。
| robots.txt 位置 | 生效范围 |
|---|---|
https://www.example.com/robots.txt |
只管 https://www.example.com/ |
https://example.com/robots.txt |
只管 https://example.com/ |
http://www.example.com/robots.txt |
只管 HTTP 版本 |
https://en.example.com/robots.txt |
只管这个子域 |
https://www.example.com/folder/robots.txt |
不是有效位置 |
如果你的外贸站有多语言子域、测试子域、独立资料站,第一步就是把这些 host 全列出来。
第二步:确认文件能正常访问
robots.txt 本身应该是公开可访问的纯文本文件。
先看状态码:
curl -sI https://www.example.com/robots.txt
再看内容:
curl -s https://www.example.com/robots.txt
你至少要排除这些问题:
| 问题 | 可能后果 |
|---|---|
返回 404 |
对 Google 来说,可能按没有 robots 限制处理 |
返回 403 |
crawler 无法正常获取规则 |
| 跳到首页 HTML | 规则无效,还容易误判 |
| 被 WAF 挑战页拦住 | crawler 读不到真实规则 |
| 不同 host 内容不一致 | www、非 www、多语言子域策略混乱 |
这一步很基础,但很多站就死在这里。
第三步:逐个看User-agent分组
robots.txt 不是“从上到下每行都叠加”那么简单。
Google 的解释是:crawler 会匹配最具体的 user-agent 组;如果同一个具体 user-agent 有多个组,这些组会合并;但具体组不会和 User-agent: * 的全局组合并。
看这个例子:
User-agent: *
Disallow: /private/
User-agent: Googlebot
Allow: /
对 Googlebot 来说,匹配的是 Googlebot 这个具体组,不是把 * 组和 Googlebot 组简单叠加。
但如果你写了两个 Googlebot 组:
User-agent: Googlebot
Disallow: /tmp/
User-agent: Googlebot
Disallow: /internal-search/
Google 会把这两个 Googlebot 组合并理解。
所以自查时不要只看有没有 User-agent: *。要把每个具体 user-agent 单独拉出来看。
第四步:检查Allow和Disallow是否互相打架
Google 对路径规则会看具体程度。更具体的路径规则优先;同等长度的 Allow 和 Disallow 冲突时,Google 会采用限制较少的规则。
比如:
User-agent: Googlebot
Disallow: /products/
Allow: /products/public/
这表示 /products/public/ 可以抓,其它 /products/ 下路径不允许抓。
但如果你写成:
User-agent: Googlebot
Disallow: /products/
Allow: /products
就容易让人读不清楚。
外贸站不需要玩复杂花样,配置越清楚越好。
建议自查时把规则按目录列出来:
| 目录 | 是否应该公开抓取 | 当前规则 |
|---|---|---|
/products/ |
是 | 是否被挡 |
/categories/ |
是 | 是否被挡 |
/case-studies/ |
是 | 是否被挡 |
/faq/ |
是 | 是否被挡 |
/request-a-quote/ 说明页 |
通常是 | 是否被挡 |
/wp-admin/ |
否 | 是否限制 |
/cart/、/checkout/ |
否 | 是否限制 |
/customer-portal/ |
否,且要权限保护 | 是否只靠 robots |
/downloads/private/ |
视内容而定 | 是否有真正权限 |
第五步:别在robots.txt里写noindex
这条要单独拎出来。
不要这样写:
User-agent: *
Noindex: /old-products/
Google 不支持通过 robots.txt 里的 noindex 来阻止索引。
如果你想让页面退出 Google 索引,应该用页面级 noindex 或 HTTP Header:
<meta name="robots" content="noindex">
或者:
X-Robots-Tag: noindex
还有一个反直觉点:Googlebot 必须能抓到页面,才能看到 noindex。如果你先用 robots.txt 把页面挡住,Googlebot 可能看不到页面里的 noindex。
所以:
robots.txt 管抓取
noindex 管索引
权限保护管安全
三件事别互相冒充。
第六步:按入口类型拆策略
外贸站做 AI 搜索准入时,可以先分三类:
| 类型 | 例子 | 自查重点 |
|---|---|---|
| 搜索相关 crawler | OAI-SearchBot、PerplexityBot、Claude-SearchBot |
是否允许公开营销页 |
| 训练相关 crawler | GPTBot、ClaudeBot |
是否符合企业内容资产策略 |
| 用户触发访问 | ChatGPT-User、Perplexity-User、Claude-User |
是否被当成普通自动 crawler 误判 |
注意,这张表只是自查视角。不同平台对 robots.txt 的解释和 user-triggered fetcher 边界不完全一样。不能把 Google robots parser 的规则泛化到所有 AI crawler。
一个相对清楚的示例:
User-agent: OAI-SearchBot
Allow: /products/
Allow: /categories/
Allow: /case-studies/
Allow: /faq/
Disallow: /downloads/private/
Disallow: /customer-portal/
User-agent: PerplexityBot
Allow: /products/
Allow: /categories/
Allow: /case-studies/
Allow: /faq/
Disallow: /downloads/private/
Disallow: /customer-portal/
User-agent: GPTBot
Disallow: /
User-agent: *
Disallow: /wp-admin/
Disallow: /cart/
Disallow: /checkout/
Disallow: /customer-portal/
Allow: /wp-admin/admin-ajax.php
Sitemap: https://www.example.com/sitemap.xml
这不是通用模板。
它只是展示一种思路:搜索相关公开页、训练抓取、后台和客户区域分开处理。
第七步:用日志核对是否真有访问
robots.txt 写完,只能说明你表达了规则。还要看 crawler 有没有访问、访问了什么、返回什么状态。
grep -Ei 'Googlebot|bingbot|OAI-SearchBot|GPTBot|ChatGPT-User|PerplexityBot|Perplexity-User|ClaudeBot|Claude-SearchBot|Claude-User' /var/log/nginx/access.log \
| awk -F'"' '{print $1, $2, $3, $6}' \
| head -n 100
重点看:
- 请求 URL 是产品页还是无意义参数页;
- 状态码是
200、301、403、404还是5xx; - 是否被跳到首页;
- 是否命中了 WAF 挑战页;
- 是否访问了不该公开的客户区或下载区。
看到某个 AI crawler 访问过,不等于它会引用。
但如果核心产品页从来没有被访问,或者每次都是 403,那准入层就有问题。
第八步:把自查结果整理成一张表
最后不要只留下配置文件。要留下可复盘记录。
| 检查项 | 合格标准 | 结果 |
|---|---|---|
/robots.txt 可访问 |
返回 200 且为纯文本 |
|
| www / 非 www 一致 | 规则不互相冲突 | |
| HTTP / HTTPS 已核对 | 迁移后不保留旧规则误伤 | |
| 多语言子域已核对 | 每个 host 都有正确规则 | |
| 产品页未误挡 | /products/ 可抓取 |
|
| 案例页未误挡 | /case-studies/ 可抓取 |
|
| FAQ 页未误挡 | /faq/ 可抓取 |
|
| RFQ 说明页未误挡 | 公开说明页可抓取 | |
| 客户数据有权限保护 | 不只靠 robots.txt | |
| 没有 robots noindex | 不在 robots.txt 写 noindex |
|
| sitemap 已声明 | 指向新规范 URL sitemap | |
| 日志已抽查 | 核心 crawler 状态码正常 |
这张表比“我感觉配置好了”有价值。
最后记住
外贸网站 robots.txt AI 爬虫自查,真正要查的是边界:
- 哪些公开推广页应该让 crawler 访问;
- 哪些敏感资源不能只靠 robots.txt;
- 哪些 AI user-agent 是搜索相关;
- 哪些是训练相关;
- 哪些是用户触发访问;
- 哪些规则只适用于 Google,不能外推给所有平台。
robots.txt 能让你的抓取策略更清楚。
但它不负责收录,不负责排名,不负责 AI 引用,更不负责数据安全。
参考资料
- Google: Introduction to robots.txt
- Google: How Google interprets the robots.txt specification
- Google: Create and submit a robots.txt file
- Google: Block Search indexing with noindex
- Google: Overview of Google crawlers and fetchers
- OpenAI: Overview of OpenAI Crawlers
- Perplexity Docs: Perplexity Crawlers
- Claude Help Center: Anthropic crawlers and robots.txt