记录一下那天晚上的排查过程。换域名时写了一条全站跳转规则,把所有旧地址 301 到新域名对应路径。推广链接里带的 utm_source 和 from 参数在跳转后全部丢失,落地页一律回到首页,广告后台显示跳出率从 32% 涨到 91%。
刚开始盯着「跳转目标里手动拼了 ? 造成参数重复或截断」,折腾了半个多小时,排掉了。
原因不止一个,得分开看。301 的目标地址写成了固定字符串 没有把原始查询串拼回去。还有一种是rewrite 规则末尾漏了 ? 导致原参数被丢弃。
少数情况下是CDN 上的跳转规则优先于源站 参数在边缘就被丢掉。
动手时先用带参数的地址看跳转结果
curl -sI 'https://old.example.com/p/123?utm_source=bd' | grep -i location
再往下在跳转目标里保留原始参数
rewrite ^/(.*)$ https://new.example.com/$1 permanent;
接着检查规则末尾是否有丢弃参数的写法
grep -n 'return 301' /etc/nginx/conf.d/*.conf
剩下的就是清理边缘节点上的重复跳转规则
curl -X PURGE 'https://old.example.com/p/123?utm_source=bd'
怎么算真的好了,看的是同一批现象。补上参数保留后,带参链接落到正确内页,广告后台的跳出率回到三成左右,落地页转化也恢复到迁移前的水平。
提醒一点。301 只跳路径不跳参数,是迁移里最常见也最容易被忽略的细节,广告和渠道流量全靠这一段参数归因。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
