外贸站做CDN加速后,如何复测ChatGPT和Perplexity相关抓取入口?

浏览进度条

外贸站做完 CDN 加速后,先不要把缓存命中或模拟 OAI-SearchBotPerplexityBot 请求返回 200 当成抓取成功。真正要复测的是同一批公开 URL 在 CDN 边缘、WAF、源站、重定向、缓存和正文层面有没有发生非预期变化。

这篇只讲 CDN、DNS 或代理层改造后的单次回归复测,不重写 CDN 配置、Cloudflare 规则、ChatGPT 爬虫区别或 PerplexityBot 基础准入。

先记录 CDN 改造改变了什么

“做 CDN 加速”可能不只是把静态文件放到边缘缓存。外贸站改动时,常见变化包括:

变化 可能影响的检查点
DNS 或代理切换 域名是否到达预期边缘,证书和 Host 是否正确
页面缓存规则 HTML 是否缓存旧版本,登录或个性化页面是否被错误缓存
WAF / Bot 规则 403、挑战、限速或安全动作是否变化
回源协议和 Host 源站返回的站点、语言或路径是否错误
HTTP/HTTPS 跳转 是否出现多跳、循环或跳到测试域名
压缩、重写和响应头 正文、canonical、robots 或内容类型是否被改坏

先把变更编号、上线时间、涉及域名和回滚负责人记下来。没有改造前的基线,改造后即使出现异常,也很难判断是 CDN 新增问题还是旧问题被发现。

固定一批回归 URL

不要只测首页。至少固定这些公开入口:

https://www.example.com/
https://www.example.com/products/
https://www.example.com/products/industrial-valve/
https://www.example.com/faq/
https://www.example.com/case-studies/
https://www.example.com/request-a-quote/
https://www.example.com/robots.txt
https://www.example.com/sitemap.xml

如果网站有德文、法文或其他主要语言,还要给每种语言保留一个产品页和一个分类页。样本的作用不是覆盖全站,而是验证 CDN 变更有没有破坏核心入口。

每个 URL 都应记录:

  • 页面类型;
  • 是否应该公开访问;
  • 改造前状态码和最终 URL;
  • 改造前响应头和正文标记;
  • 改造后状态码、缓存状态和正文标记;
  • 是否有源站日志或边缘事件线索。

先看响应头,不要只看浏览器

浏览器能打开,不等于所有请求路径都正常。先从公网边缘响应中能看到的响应头开始抽查:

PAGE="https://www.example.com/products/industrial-valve/"

curl -sSL \
  -D - \
  -o /dev/null \
  "$PAGE" |
  grep -Ei \
    '^(HTTP/|location:|content-type:|cache-control:|age:|etag:|vary:|server:|x-cache:|cf-cache-status:)'

不同 CDN 的字段不一样。CF-Cache-StatusX-CacheAge 等字段只能作为当前 CDN 处理的线索,不能假设所有站点都会返回同样的字段。

建议保存 CDN 改造前后的响应头:

PAGE="https://www.example.com/products/industrial-valve/"

curl -sSL -D "headers-after.txt" -o /dev/null "$PAGE"

对比时重点看:

项目 要确认什么
状态码 产品页是否从预期状态变成 4034295xx
location 是否跳到错误域名、登录页或首页
content-type HTML、XML、PDF 是否仍为预期类型
cache-control 是否错误缓存了本应动态或受保护的内容
缓存标记 是否命中、未命中、绕过或动态响应
vary / etag 不同请求是否可能拿到错误版本
server / 请求 ID 是否能和边缘或源站记录关联

缓存命中只说明边缘返回了缓存对象;缓存未命中也只说明这次没有直接命中缓存。都不能单独证明请求一定到达源站,或者页面已经被某个平台抓取。

对比普通请求和带 AI User-Agent 的模拟请求

可以做三组对照:

  1. 普通浏览器 User-Agent;
  2. OAI-SearchBot 字符串;
  3. PerplexityBot 字符串。

下面的命令只用于比较当前规则对不同请求头的表现:

PAGE="https://www.example.com/products/industrial-valve/"

for item in \
  "browser|Mozilla/5.0" \
  "oai-search|OAI-SearchBot/1.0" \
  "perplexity|PerplexityBot/1.0"; do
  label="${item%%|*}"
  ua="${item#*|}"

  printf '\n== %s ==\n' "$label"
  curl -sSL \
    -A "$ua" \
    -D - \
    -o /dev/null \
    "$PAGE" |
    grep -Ei \
      '^(HTTP/|location:|content-type:|cache-control:|age:|vary:|x-cache:|cf-cache-status:)'
done

-A 只是本地修改 User-Agent 字符串。它不能证明请求来自 OpenAI 或 Perplexity,也不能代替平台官方 IP、DNS 或其他身份核验。

OpenAI 的 OAI-SearchBotGPTBot 用途不同;Perplexity 的 PerplexityBotPerplexity-User 也不是同一类访问。本文只用搜索相关 User-Agent 做响应差异复测,不把模拟请求当成真实平台日志。

检查 robots.txt 和 sitemap 有没有被 CDN 缓存旧版本

CDN 上线后,robots 和 sitemap 也可能继续返回旧缓存。它们不是普通静态文件的附带检查,而是核心入口配置:

SITE="https://www.example.com"

printf '%s\n' '== robots headers =='
curl -sSL -D - -o /dev/null "$SITE/robots.txt" |
  grep -Ei '^(HTTP/|age:|etag:|cache-control:|x-cache:|cf-cache-status:)'

printf '%s\n' '== robots body =='
curl -sSL "$SITE/robots.txt" |
  sed -n '1,160p'

printf '%s\n' '== sitemap headers =='
curl -sSL -D - -o /dev/null "$SITE/sitemap.xml" |
  grep -Ei '^(HTTP/|content-type:|location:|age:|cache-control:|x-cache:|cf-cache-status:)'

对比内容时,检查:

  • 是否还出现测试域名、旧域名或旧目录;
  • 公开产品、FAQ、案例和 RFQ 说明页是否被新规则误挡;
  • sitemap 是否混入 404、测试 URL、参数 URL 或非规范 URL;
  • XML 或 robots 文本是否被缓存成旧版本;
  • 语言版本是否跳到了错误的主机或路径。

如果只是刚发布的配置没有在边缘更新,不要直接全站关闭 CDN。先确认缓存键、刷新范围、源站文件和变更记录,再做最小范围的刷新或回滚。

判断异常发生在边缘、缓存还是源站

这一步只服务于本次 CDN、DNS 或代理改造的前后对照,不重新讲 WAF 规则配置。把同一个 URL 的公网响应、缓存状态、重定向和源站记录放在一起看:

观察结果 回归复测时要确认
公网返回 4034295xx 是改造后的边缘响应,还是源站原本就这样
公网显示缓存命中,源站没有对应新请求 是否仍在返回改造前的旧对象
源站收到请求,但公网内容或状态不同 是否存在回源、Host、重写或响应处理差异
产品页返回首页 200 是否发生错误 Host、重写或软错误

Cloudflare 等平台可能在日志中提供边缘、缓存和源站响应线索,但字段、覆盖范围和可用性取决于当前服务配置。记录本次变更前后的请求 ID、时间和 URL即可,不要把某个仪表盘没有记录理解成“没有请求”。

如果你有授权的源站测试入口,可以做边缘与源站对照:

PUBLIC_URL="https://www.example.com/products/industrial-valve/"
ORIGIN_URL="https://origin.example.internal/products/industrial-valve/"

printf '%s\n' '== public edge =='
curl -sSL -D - -o /dev/null "$PUBLIC_URL" |
  grep -Ei '^(HTTP/|location:|content-type:|cache-control:|age:|x-cache:|cf-cache-status:)'

printf '%s\n' '== authorized origin check =='
curl -sSL -D - -o /dev/null "$ORIGIN_URL" |
  grep -Ei '^(HTTP/|location:|content-type:|cache-control:|server:|x-request-id:)'

origin.example.internal 是占位符。该命令只适用于企业已提供、允许直接访问且已配置正确 Host/SNI 的源站测试入口。源站直连结果不能单独证明 CDN 到源站的真实回源行为,也不能作为绕过 CDN 或访问控制的方法。不要把源站地址、证书信息或内部响应头放到公开文章和共享工单里。

检查返回的是正文,不是挑战页或旧页面

状态码正常还不够。对产品页、FAQ、案例页和 RFQ 说明页抽查正文标记:

PAGE="https://www.example.com/products/industrial-valve/"
BODY="/tmp/cdn-regression-page.html"

curl -sSL "$PAGE" -o "$BODY"

grep -Ein \
  'industrial valve|model|material|pressure|application|rfq|request a quote' \
  "$BODY" |
  sed -n '1,40p'

if grep -Eqi \
  'access denied|challenge|enable javascript|checking your browser|origin error' \
  "$BODY"; then
  printf 'ANOMALY\tchallenge_or_error_marker\t%s\n' "$PAGE"
fi

关键词需要替换成实际页面中的型号、材质、应用和询盘说明。一个产品页返回 200,但正文是挑战页、默认模板或首页内容,仍然属于回归异常。

用复测表收口

URL,页面类型,请求标记,状态码,最终URL,Content-Type,缓存状态,正文标记,边缘事件,源站日志,异常,处理结果
https://www.example.com/products/industrial-valve/,产品页,浏览器,待检查,待检查,待检查,待检查,待检查,待检查,待检查,,
https://www.example.com/products/industrial-valve/,产品页,OAI-SearchBot字符串,待检查,待检查,待检查,待检查,待检查,待检查,待检查,,
https://www.example.com/products/industrial-valve/,产品页,PerplexityBot字符串,待检查,待检查,待检查,待检查,待检查,待检查,待检查,,
https://www.example.com/robots.txt,robots,浏览器,待检查,待检查,待检查,不适用,规则文本,不适用,不适用,,
https://www.example.com/sitemap.xml,sitemap,浏览器,待检查,待检查,XML,不适用,URL范围,不适用,不适用,,

如果 CDN 改造后出现异常,按“定位层级、保存证据、最小修复、同样本复测、必要时回滚”的顺序处理。不要因为一个模拟 User-Agent 返回异常,就直接全站关闭 WAF 或开放所有 AI 爬虫。

CDN 加速后的 AI 抓取入口复测,验证的是当前访问链路:边缘有没有错误缓存,WAF 有没有非预期动作,源站是否收到请求,公开页面是否返回正确正文。它不等于 ChatGPT 或 Perplexity 已经抓取、索引、引用或带来询盘。

参考资料

内卷越来越激烈,再不做好独立站,就真的晚了!

添加微信咨询

扫描二维码添加微信客服

联系我们

  • 微信同号: 13077312120
  • Email: service@wphuo.com
  • 地址: 工业设计城智点汇7楼701 佛山市顺德区工业大道32号