记录一下那天晚上的排查过程。老站用的是 /?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 之后别急着删旧路由,保留三个月以上,外链和快照还在用旧地址。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
