事情本身不复杂,线索都在日志里。文章同时归到「服务器」和「运维」两个栏目,两个栏目列表页都把它列出来,两个列表页的 canonical 分别指向自己的栏目,蜘蛛在两份内容之间反复切换。

第一反应是「分页参数让同一批内容出现在更多列表地址上」,验证下来不成立。

排查方向其实有限,先把可能性排一排。栏目列表页内容重叠,各自的 canonical 只指向自己。还有一种是文章本身没有指定主栏目,面包屑也跟着访问路径变化。

另外,栏目页的排序参数被当成不同的规范地址。

动手时先对比两个栏目页的正文重合度

curl -s https://www.example.com/srv/ | sed 's/<[^>]*>//g' | md5sum; curl -s https://www.example.com/ops/ | sed 's/<[^>]*>//g' | md5sum

接着看栏目页的 canonical

curl -s https://www.example.com/srv/ | grep -o '<link rel="canonical"[^>]*>'

给文章指定唯一主栏目

update_post_meta(123, 'primary_category', 2);

剩下的就是把次要栏目列表页指向主栏目

add_filter('get_canonical_url', 'category_canonical_primary');

怎么算真的好了,看的是同一批现象。两个栏目页的 canonical 统一指向主栏目,重复网页条目不再增加,栏目页排名集中到一处。

提醒一点。多栏目归属本身没问题,问题是列表页互相争规范,主栏目要在数据层明确下来。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189