同一篇内容,在浏览器里可能有四五个都能打开、内容也基本一致的地址:带 www 和不带 www、http 和 https、结尾有没有斜杠、URL 里带没带一串跟踪参数。对用户来说差别不大,对搜索引擎来说却是几个不同入口。canonical 就是用来在这种情况下指明首选版本的工具,但它经常被写错,或者写了却没和内链、站点地图对齐。
重复 URL 通常从哪来
- 协议与主机名:http 与 https、www 与裸域名同时可访问,且没有做跳转收敛。
- 写法差异:大小写混用、结尾斜杠有无、index.html 与目录地址并存。
- 参数:来源跟踪参数、排序与筛选参数、分页参数、会话 ID。
- 功能页:打印版、分享版、移动版、AMP 版各自有独立地址。
- 环境残留:测试域名、旧域名、镜像站点仍然可以打开。
这些地址大多来自模板生成或者历史遗留,不会自己消失。站长需要知道哪些是真实存在的重复,而不是凭感觉猜。
canonical 的常见写法错误
canonical 是一个提示信号,不是强制指令。写错时不仅没有收敛作用,还可能让抓取方向更混乱。以下情况在巡检中很常见:
- 整站指向首页:模板里写死了一个固定地址,导致所有页面都声明首页是首选版本。
- 指向不可用地址:目标返回 404、500,或者指向重定向链中间的某一跳。
- 与页面内容不一致:A 页面声明 B 是首选,但两个页面的主体内容其实不同,属于强行合并。
- 带参自指:页面本身是干净地址,canonical 却输出了带跟踪参数的版本。
- 相对路径拼接出错:目录层级处理不当,输出成不存在的路径。
- 分页处理粗糙:列表翻页的每一页都被声明成第一页,或者反过来每一页都自指却没有区分内容。
可以照着做的一轮巡检
- 从站点地图、栏目页、内链中抽取一批代表性 URL,覆盖首页、栏目页、详情页、列表翻页、带参地址。
- 记录每个地址的返回状态、最终落地地址、页面标题与 canonical 输出值,重点看四者是否自相一致。
- 翻一段时间的服务器访问日志,看搜索蜘蛛实际抓取了哪些带参地址和重复地址,这比猜测更接近事实。
- 把内链、导航、站点地图里的写法统一成 canonical 所声明的版本,减少自己制造重复入口。
- 把已经确定的重复入口用 301 收敛,而不是只靠 canonical 声明。
- 确认模板不会因为参数、语言、终端差异而输出不同的 canonical 值。
什么情况用 301,什么情况用 canonical
如果一个地址确定不再使用,优先做 301,让访问和权重都稳定落到新地址。canonical 更适合那些无法直接重定向的场景,例如同一地址因参数不同而生成的多种组合、多域名并存期间的过渡、以及功能页与正文页的关系说明。两者并不互斥,能跳转就先跳转。
canonical 只解决“哪个是首选”的表达问题,解决不了入口泛滥本身。内链、站点地图、重定向三处不统一,canonical 写得再对,收敛效果也会打折。
容易忽略的几个细节
一是 canonical 必须指向可正常访问的地址,中途跳转或已失效的目标会让信号失效。二是多语言、多地区站点要区分清楚:同一语言的不同地区版本,和同一内容的不同副本,处理方式并不一样。三是内容本身确实有差异时,不要为了“凑干净”硬把两篇合并,用户看到的内容和声明不一致,反而更麻烦。四是移动端与桌面端如果使用不同地址,需要在两端都正确声明对应关系。
建议把 canonical 检查放进栏目的常规巡检里:新增模板、改版、换域名、加统计参数之后各跑一次。发现问题按优先顺序处理——先修指向失效的,再修整站指错的,最后清理带参自指。处理完之后,观察日志里蜘蛛对重复地址的抓取是否下降,用数据确认收敛是否生效,而不是改完就算结束。