站内链接自动带上了 ?sessionid=abc123,Search Console 里同一个商品页出现 312 个版本,收录的是带参数那一条,原地址反而排不上。乍看像缓存或者权限的锅,追下去往往不是。
RewriteCond %{QUERY_STRING} (^|&)sessionid= [NC]
RewriteRule ^(.*)$ /$1? [R=301,L]
# 清理旧参数链接
追下去是这么回事:会话 ID 被写进 URL 而不是 Cookie,模板生成链接时没过滤,站内搜索和分页链接都带着它。canonical 又跟着当前 URL 输出,等于承认每个 sessionid 都是独立页。
「sessionid 重复收录」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
具体做法是,把 session 改存 Cookie,别再往 URL 里塞;canonical 固定输出不带参数的干净地址;对已有参数页做 301 跳回干净地址。
验收就看一点,带 sessionid 的地址 301 到干净地址,收录版本收敛到 1 个。
