事情本身不复杂,线索都在日志里。标签模板为了省事,把 canonical 统一输出成该标签下最新文章的地址。标签页有 2000 条,全部把权重指向 2000 篇文章,标签页本身几乎不进索引,文章页也没因此变强。
第一反应是「模板取循环第一条,没有判断当前页面类型」,验证下来不成立。
这类报错背后常见的原因有几处,逐个排除就行。canonical 写死了第一篇文章,语义完全不对。另一种情况是标签页与文章页内容差异明显,不该合并。
少数情况下是搜索引擎按 canonical 处理,直接把标签页排除。
动手时先看标签页实际输出的 canonical
curl -s 'https://www.example.com/tag/nginx/' | grep -o '<link rel="canonical"[^>]*>'
再往下确认标签页自身地址与输出值是否不同
curl -s 'https://www.example.com/tag/nginx/' | grep -o 'canonical" href="[^"]*'
模板按页面类型输出自指地址
curl -s 'https://www.example.com/tag/nginx/' | grep -o 'href="[^"]*"' | head -3
等前面都确认过,再重新抓取几个标签页观察状态
https://ziyuan.baidu.com/linksubmit/index
恢复的判定其实很直接。标签页 canonical 与自身地址一致,标签索引量从 200 条涨到 1800 条,标签带来的落地流量开始出现。
canonical 指向别的页面等于宣布自己重复,除非两页内容确实一样,否则别这么写。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
