先把当时的情况摆出来。面包屑模板为了统计点击,给每一级链接拼了 ?from=crumb。全站 5 万篇文章各带 3 级面包屑,蜘蛛抓到的是带参数地址,索引里同一批页面出现两套,收录量虚高 1.2 万。
这类报错背后常见的原因有几处,逐个排除就行。面包屑链接拼接了统计参数,与 canonical 地址不一致。另一种情况是参数没有被 robots 或 canonical 收敛。
不容易想到的是,站内其他位置用干净地址,形成两套入口。还有一种情况,CDN 不忽略查询串,两套地址各缓存一份。
先确认面包屑链接是否带参数
curl -s https://www.example.com/p/1 | grep -o 'href="[^"]*from=crumb[^"]*"' | head -5
然后看页面里参数出现几次
curl -s https://www.example.com/p/1 | grep -c 'from=crumb'
再往下统计带参数地址被收录的数量
site:www.example.com inurl:from=crumb
等前面都确认过,再确认 CDN 是否忽略该参数
curl -sI 'https://www.example.com/?from=crumb' | grep -i vary
恢复的判定其实很直接。面包屑链接不再带参数,带 from=crumb 的收录条目一个月内清零,索引量回落到真实页面数。
容易忽略的是,统计参数应该放在事件上报里,不要写进链接,否则等于自己造重复页。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
