事情本身不复杂,线索都在日志里。模板改版时把 link 标签挪到了 body 顶部,Google 仍能识别,百度完全忽略,聚合页与详情页被当成两份内容,两边排名都掉了。

第一反应是「页面有两套模板,移动版把标签放对了,桌面版没有」,验证下来不成立。

排查方向其实有限,先把可能性排一排。百度只解析 head 里的 canonical,body 内的被当普通文本。还有一种是模板里 head 是异步渲染的,服务端输出时为空。

少数情况下是CDN 的 HTML 改写把 head 闭合标签提前插入了。

第一件事是确认标签所在的节点位置

curl -s https://www.example.com/tag/seo | grep -n -m1 'rel="canonical"'

随后把输出挪回 head 内

curl -s https://www.example.com/tag/seo | sed -n '1,20p'

接着检查移动版与桌面版是否一致

curl -A 'Mobile' -s https://www.example.com/tag/seo | grep -c canonical

剩下的就是对比 CDN 与源站返回的头部结构

curl -s -H 'Host: origin' https://www.example.com/tag/seo | head -20

恢复的判定其实很直接。两条路径的 canonical 都回到 head,百度侧的重复内容提示消失,聚合页与详情页各自恢复展示。

提醒一点。标签位置看着是小事,但不同引擎的容错差别很大,能在 head 里直出就别依赖前端插入。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189