站点运营

站点运营:canonical 自查,别让同一篇内容存在多个版本

同一篇内容在站内出现多个可访问地址,是站点运营里很常见的问题。canonical 标签用于指明首选版本,但它只是建议,需要和内链、Sitemap、重定向配合才有效。本文梳理重复地址的常见来源、canonical 的典型误用与自查清单,以及它和 robots、301、noindex 之间的分工,帮助你在不大改站点的前提下逐步收敛重复地址。

站点运营

站点运营:canonical 自查,别让同一篇内容存在多个版本

做站点运营时,最容易被忽略的一类问题是:同一篇内容在站点里存在好几个可以访问的地址。用户看不出区别,蜘蛛却会把它当成多个页面分别处理。canonical 标签就是用来解决这个问题的,但用错了反而会添乱。

同一篇内容为什么会有多个地址

常见的来源包括:

  • 带参数的地址,比如列表翻页、排序、来源追踪参数;
  • www 与非 www、http 与 https 混用;
  • 带尾斜杠与不带尾斜杠同时可访问;
  • 打印页、移动版独立地址、专题聚合页;
  • 内容被搬到站内其他栏目,留下了两份。

这些地址如果都返回 200 且都能被抓取,就等于把同一份内容重复投喂给搜索引擎。

canonical 在说什么

canonical 是写在页面 head 里的一个链接标签,作用是告诉蜘蛛:这一组相似页面里,哪一个是我认可的正式版本。

它是一条建议,不是强制指令。搜索引擎会参考,但如果页面上的其他信号(内链、Sitemap、重定向)与它互相矛盾,它很可能被忽略。

所以 canonical 要和内链、Sitemap、robots 放在一起看,单独设一个标签解决不了所有问题。

自查时容易踩的坑

1. 指向了不可访问的地址

canonical 指向的 URL 如果是 404、被 robots 屏蔽,或者本身还有重定向,这个标签基本失效。指向的地址自己要先能正常打开。

2. 页面之间互相指向

A 页写 canonical 到 B,B 页又写 canonical 到 A,形成循环。这种情况蜘蛛通常两边各按各的处理,等于白写。

3. 全站批量写死同一个地址

有些模板为了省事,把 canonical 统一写成首页地址。结果是所有内页都在说“我不是正主”,对收录非常不利。

4. 分页页面处理不当

分页的第二页、第三页不要 canonical 到第一页。它们各自是不同的内容列表,正确做法是保留自身地址,并做好上一页、下一页的关系说明。

5. 和重定向混着用

如果旧地址已经做了 301 到新地址,旧地址就不必再写 canonical。两者同时存在容易让信号混乱。

一份简单的自查清单

  1. 随机抽 20 个内页,查看源码中的 canonical 地址,确认能正常打开并返回 200;
  2. 确认 canonical 地址与页面实际 URL 的主机名、协议、尾斜杠写法一致;
  3. 检查是否存在 A 指向 B、B 指向 A 的循环;
  4. 检查列表页、筛选页是否误写了 canonical 指向首页或栏目首页;
  5. 对照 Sitemap,确认提交的地址与 canonical 指向的是同一个;
  6. 确认被 canonical 掉的地址没有被大量内链指向,否则信号会打架。

和 robots、重定向怎么分工

  • robots.txt:控制蜘蛛能不能抓,不直接控制能不能收录,适合屏蔽无意义的参数地址;
  • 301 重定向:地址永久搬家,权重与收录跟着走,适合改版和栏目合并;
  • canonical:几个地址都能访问,内容高度相似,用来指定首选版本;
  • noindex:明确不想要这个页面出现在结果里。

四者用途不同,别拿一个去替代另一个。

落地建议

站点规模不大时,可以先把 canonical 的模板逻辑固定下来:默认指向当前页面的规范地址,只在确实存在重复内容时才做特殊处理。改完之后,观察服务器日志里这些地址的抓取频次和状态码变化,往往比盯着一两个页面的标签更有用。

重复内容不是一夜之间出现的问题,解决它也不需要一次性全站推倒重来。按栏目分批梳理,先把明显重复的地址处理掉,再逐步收紧模板,是更稳妥的做法。