记录一下那天晚上的排查过程。老站用的是 /?tag=nginx,新模板改成 /tag/nginx/,两套地址都能打开且内容一致。百度同时收录,标签页索引量翻倍,搜索流量没变,站长平台提示存在重复内容。

刚开始盯着「旧站内链还指向 ?tag= 形式」,折腾了半个多小时,排掉了。

把日志和配置对完,能解释这个现象的基本就这几处。两套路由都注册了,没有做互斥跳转。少数情况下是canonical 只在路径式版本输出。

少数情况下是CDN 不区分查询串,两套地址命中同一份缓存。

上来先确认两套地址的状态码

curl -s -o /dev/null -w '%{http_code} %{redirect_url}\n' 'https://www.example.com/?tag=nginx' 'https://www.example.com/tag/nginx/'

参数式地址 301 到路径式

if ($arg_tag) { return 301 /tag/$arg_tag/; }

批量替换站内旧链接

wp search-replace '?tag=' '/tag/' --all-tables

末了抽查替换后是否还有残留

grep -rn '?tag=' wp-content/themes/ | head

别只看报错消失,验证要多做一步。参数式地址全部返回 301,标签页索引量回落到单套数量,重复内容提示消失。

容易忽略的是,301 之后别急着删旧路由,保留三个月以上,外链和快照还在用旧地址。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189