报错是这么冒出来的。迁移时按路径写了 301 规则,带 utm 参数的广告落地页不在匹配范围内,投放后台的链接全部落到 404,一周内白烧了两万多次点击。

中间走过弯路,把「广告链接用的是旧域名的 http 地址,多了一层协议跳转」当成主因,改完现象没变。

把日志和配置对完,能解释这个现象的基本就这几处。Nginx 的 location 精确匹配不包含查询串。另一种情况是301 规则只写了路径,重写时把参数一起丢了。

还有一种情况,CDN 缓存了 404 响应,投放期间一直命中。

第一件事是用带参地址复现跳转

curl -sI "http://www.example.com/landing/?utm_source=ad" | findstr /i "HTTP location"

再往下确认跳转后参数是否保留

curl -sI "https://www.example.com/landing/?utm_source=ad" | findstr /i location

接着重写规则里保留查询串

rewrite ^/landing/?$ https://www.example.com/new-landing/ permanent;

末了清理已缓存的 404

curl -X PURGE "https://www.example.com/landing/?utm_source=ad"

怎么算真的好了,看的是同一批现象。补上带参跳转后,落地页恢复 200,投放后台的跳出率回落到正常区间。

容易忽略的是,301 默认会保留查询串,但一旦用了重写规则或跳转脚本,参数很容易在中间被丢掉,必须用真实广告链接验证。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189