robots.txt 写了允许,不等于 AI 爬虫真的能拿到页面正文。外贸站常见的盲区,是 CDN、WAF、Bot 管理、限速规则在入口层先把请求挑战、拦截或返回异常状态,导致产品页、案例页、供应商介绍页明明“允许抓取”,实际却不可访问。
很多外贸站老板看 AI SEO 技术准入时,第一反应是检查 robots.txt:有没有放行 GPTBot、OAI-SearchBot、PerplexityBot、ClaudeBot、Googlebot、Bingbot。这个动作是对的,但它只检查了“站点声明”。而且不同 crawler 用途不同,比如 OAI-SearchBot 和 GPTBot 不能混成同一种 ChatGPT 搜索入口。真正的访问链路还要经过 DNS、CDN、WAF、Bot 管理、缓存、源站、应用层权限。
所以问题不是“用了 CDN/WAF 就会影响 AI 爬虫”,而是:你的入口层规则是否让目标爬虫拿到了正常的 200 OK 页面正文。
为什么robots.txt允许,WAF仍可能拦住
robots.txt 是给爬虫看的访问规则;WAF 是入口层安全系统,按请求特征做处置。二者不在同一层。
一个典型链路是:
AI crawler -> DNS/CDN edge -> WAF/Bot rules/rate limiting -> cache/origin -> HTML response
如果 robots.txt 允许访问 /products/,但 WAF 对“非浏览器行为”“高频请求”“异常 ASN”“缺少 Cookie”“命中特定国家/地区规则”的请求返回挑战页、403、429 或 5xx,那么爬虫看到的就不是产品正文。
外贸站尤其容易出问题,因为很多站会同时打开这些策略:
| 入口层策略 | 对真实用户的目的 | 对 AI 爬虫的风险 |
|---|---|---|
| JS Challenge / Managed Challenge | 拦截自动化攻击 | 爬虫可能无法通过挑战,只拿到挑战页 |
| Bot 管理 | 降低恶意爬虫消耗 | 希望放行的 crawler 被归为未知 bot |
| Rate limiting | 防止接口爆刷 | 短时间抓取产品页时被 429 限速 |
| 国家/地区拦截 | 屏蔽高风险地区 | 搜索或 AI 相关访问节点可能被误伤 |
| User-Agent 黑名单 | 拦截垃圾爬虫 | 规则写得过宽,误杀搜索 / AI crawler |
| 登录墙/询盘墙 | 保护资料或询盘入口 | 正文不可抓取,AI 只能看到空壳 |
WAF动作表:访问失败不是只有403
排查时不要只问“有没有被 block”。WAF 可能用了不同动作,日志里看到的状态也不一样。
| WAF/CDN 动作 | 常见表现 | 对 AI 爬虫意味着什么 | 外贸站处理建议 |
|---|---|---|---|
| Allow | 返回正常 HTML | 可以继续判断内容质量和索引条件 | 对公开页面应保持 |
| Block | 403 或自定义阻断页 |
无法获取正文 | 检查是否误拦目标 crawler |
| Challenge | 返回验证页 | 部分 crawler 无法完成交互 | 公开内容页避免挑战 |
| Managed Challenge | 根据风险动态挑战 | 状态可能看似正常,但正文不是页面内容 | 用日志和 curl 看实际 HTML |
| Rate limit | 429 或延迟 / 封禁 |
抓取不稳定,可能降低可访问性 | 对页面和接口分开限速 |
| Log only | 只记录不拦截 | 适合观察期 | 新规则先观察再执行 |
| Skip / Exception | 跳过部分安全规则 | 可用于可信 crawler 或关键路径 | 要精确到路径、UA、IP 验证条件 |
这里要克制:不是所有 CDN/WAF 默认都会伤害 AI SEO。真正有问题的是“规则没有区分公开内容页与敏感接口”。
外贸页面的风险优先级
不同页面的处理方式不一样。外贸站最怕把应该公开的商业信息藏起来,把应该保护的接口裸露出来。
| 页面类型 | AI 可见性价值 | 常见误拦风险 | 建议 |
|---|---|---|---|
| 首页 | 高 | 地区规则、挑战页、缓存错误 | 应返回稳定 200 和完整品牌/品类说明 |
| 产品详情页 | 高 | 参数页被限速、图片/规格异步加载失败 | 保证核心规格、用途、MOQ、材质正文可见 |
| 产品分类页 | 高 | 筛选参数触发 WAF | 主分类开放;无价值组合参数可控 crawl |
| 筛选/参数页 | 中 | URL 参数过多被当攻击 | 有搜索需求的组合保留,垃圾组合限制抓取 |
| RFQ 询盘页 | 高 | 整页登录/挑战 | 页面说明开放,提交接口保护 |
| RFQ thank-you 页 | 低 | 被索引成薄页面 | 用 noindex,无需作为搜索入口 |
| 供应商介绍页 | 高 | 国家拦截、Bot 规则 | 开放公司资质、产能、认证、出口市场 |
| 案例页 | 高 | 图片懒加载、地区限制 | 让项目背景、产品方案、行业场景可读 |
| FAQ 页 | 高 | 被当重复内容或低价值页 | 保留真实采购问题,不堆关键词 |
| 登录后台/报价系统 | 低 | 不该被抓 | 用鉴权、WAF、robots 辅助控制 |
一个好原则是:产品知识、采购决策信息、供应商可信度信息应开放;提交、登录、支付、后台、私密报价应保护。
RFQ页面:开放正文,保护提交接口
很多 B2B 外贸站把询盘页做成一个表单,页面正文几乎没有信息,甚至先弹验证码。这样既不利于普通搜索,也不利于 AI 搜索理解你的供应能力。
更合理的方式是:
/rfq/ 或 /request-a-quote/
- 页面正文公开:支持哪些产品、需要哪些参数、响应流程、文件上传说明
- 表单提交接口保护:/api/rfq-submit 或 /wp-json/forms/submit 做 WAF、验证码、限速
示例规则思路:
公开:
GET /request-a-quote/ -> 200 OK,返回完整 HTML
保护:
POST /api/rfq-submit -> WAF 校验、验证码、速率限制、垃圾询盘过滤
不要用一个全站挑战规则把 /request-a-quote/ 也挡住。自动抓取型 crawler 通常不会给你提交询盘,但它需要读懂“这个供应商可以怎么接收询盘”。
用curl快速排查入口层
先看状态码和响应头:
curl -I https://www.example.com/products/stainless-steel-valve/
模拟某个官方 crawler 的 User-Agent,看是否返回不同状态。注意,这不是身份验证,只是排查入口层是否按 UA 区分响应;User-Agent 版本号会变化,长期脚本应以官方 crawler 文档为准:
curl -A "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot" -I https://www.example.com/products/stainless-steel-valve/
检查实际 HTML 前几行,确认不是挑战页:
curl -L -A "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; OAI-SearchBot/1.4; +https://openai.com/searchbot" https://www.example.com/products/stainless-steel-valve/ | head -n 40
排查 429 限速:
for i in {1..10}; do
curl -o /dev/null -s -w "%{http_code} %{time_total}\n" https://www.example.com/products/stainless-steel-valve/
done
检查 robots.txt 是否能访问:
curl -I https://www.example.com/robots.txt
curl https://www.example.com/robots.txt
如果同一个 URL 对普通浏览器 UA 返回 200,对 crawler UA 返回 403、429、挑战页 HTML,就不是 robots 问题,而是入口层策略问题。
CDN/WAF日志要看哪些字段
只看源站日志可能不够,因为请求可能在边缘层已经被处理了。排查时尽量同时看 CDN/WAF 安全事件和源站 access log。
建议关注这些字段:
| 字段 | 用途 |
|---|---|
| timestamp | 判断是否与抓取测试时间一致 |
| host / path / query | 确认被拦的是哪个页面 |
| user_agent | 判断是否是目标 crawler 线索 |
| client_ip / ASN | 做官方 IP 验证或风险判断 |
| country / colo | 看是否被地区规则影响 |
| action | allow、block、challenge、rate limit、skip |
| status_code | 200、403、404、429、5xx |
| rule_id / rule_name | 找到触发的具体规则 |
| bot_score / verified_bot | 判断 Bot 管理是否误判 |
| ray_id / request_id | 在 CDN 与源站之间串联请求 |
| origin_status | 区分边缘层拦截还是源站返回 |
如果 CDN 日志显示 challenge,源站日志没有对应请求,说明请求根本没到网站程序。此时改 WordPress、Shopify、独立站模板都没用,要去入口层处理。
常见误判
第一,把“能打开网页”等同于“crawler 能访问”。浏览器能过 JS、Cookie、验证码,crawler 未必能。
第二,把 robots.txt 当成唯一准入开关。它只表达抓取规则,不保证 WAF 放行,也不保证页面会被引用、收录或排名。
第三,全站套同一条安全规则。公开产品页、案例页、FAQ 页和表单提交接口的风险不同,不该用同一种挑战策略。
第四,只放行 User-Agent,不验证来源。User-Agent 可以伪造。重要站点应结合官方说明、IP 验证、日志行为和路径范围处理。
第五,把 RFQ 页也做成私密入口。外贸询盘页的正文是商业解释页,不是后台接口。真正该保护的是提交动作。
一个更稳的配置思路
外贸站可以按“内容层”和“动作层”拆:
内容层:
/products/
/category/
/case-studies/
/about-us/
/faq/
/request-a-quote/
目标:
允许正常 GET 抓取,返回 200 和完整正文。
动作层:
/api/
/wp-login.php
/wp-admin/
/cart/
/checkout/
/account/
/rfq-submit/
/upload/
目标:
鉴权、验证码、WAF、限速、日志审计。
对于公开内容页,先用 WAF 的日志模式观察一段时间,再决定是否挑战或阻断。对于提交接口,可以更严格:限制 POST 频率、校验 token、开启验证码、拦截异常参数。
排查清单
robots.txt是否允许目标 crawler 访问公开目录。- 目标页面是否返回
200 OK,不是3xx循环、403、429、5xx。 - 用 crawler UA 请求时,HTML 是否包含真实产品正文。
- CDN/WAF 安全事件里是否出现 block、challenge、rate limit。
- 源站日志是否真的收到 crawler 请求。
- RFQ 页面正文是否公开,提交接口是否单独保护。
- 产品筛选参数是否有规则区分,避免有价值页面被误拦。
- 是否存在国家 / ASN / IP 黑名单误伤目标 crawler。
- 是否能通过日志字段定位具体规则,而不是凭感觉改全站。
- 是否避免承诺“放行后一定被 AI 引用”。
AI SEO 的技术准入,本质是让公开商业内容可以被稳定访问、解析和理解。CDN/WAF 是安全工具,不是 SEO 工具;用得细,它保护询盘接口,用得粗,它可能把最该被看见的产品信息挡在门外。
参考资料
- Google: How HTTP status codes affect Google’s crawlers
- OpenAI: Overview of OpenAI Crawlers
- Perplexity: Perplexity Crawlers
- Anthropic: Does Anthropic crawl data from the web, and how can site owners block the crawler?
- Cloudflare: WAF Custom rules
- Cloudflare: WAF Rate limiting rules
- Cloudflare: WAF FAQ