站点同时支持 /list/page/2/ 和 /list/?page=2 两种分页地址,两套都能打开,收录里出现了双份列表。
排查方向其实有限,先把可能性排一排。伪静态规则和查询参数同时生效,没有做跳转。还有一种是内链混用两种写法,蜘蛛两套都抓。
不容易想到的是,canonical 各指自己,没有统一。
第一件事是分别请求两套地址看返回码
curl -sI 'https://www.example.com/list/?page=2' | head -1
然后把查询参数版本 301 到伪静态
if ($arg_page) { return 301 /list/page/$arg_page/; }
末了统一内链输出格式
grep -rn '?page=' /www/wwwroot/site/wp-content/themes/
中途换过一次思路,把范围缩到最小的那一层,反而快了。
中间停过一次,把已经改的东西回滚干净,再重新来一遍。
别只看报错消失,验证要多做一步。查询参数版本全部 301,收录里只剩一套分页地址,重复列表消失,分页权重也不再被两套地址分走。
容易忽略的是,两套地址都能返回 200 是最常见的重复来源,先做跳转再谈 canonical,顺序错了收敛不干净,两套会长期并存,越拖越难处理。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。