同一篇文章,可能对应好几个都能正常打开的地址:带 www 的和不带 www 的、带尾斜杠和不带尾斜杠的、大写路径和小写路径、带跟踪参数的分享链接和不带参数的干净地址。对用户来说这没什么区别,但对搜索蜘蛛来说,每个可访问的地址都是独立的 URL,都要单独排队、单独抓取、单独判断内容是否相同。
一个页面裂成多个 URL,代价是什么
最直接的影响是抓取机会被摊薄。原本可以花在一个地址上的抓取次数,被分散到几个内容完全一样的地址上。其次是判断上的干扰:多个版本互相竞争,蜘蛛需要额外花时间去确认哪个才是主版本,日志里也会出现大量看起来重复的抓取记录。所以 URL 去重不是洁癖,而是让抓取和收录都更省力的一步。
常见的几种“分身”来源
尾斜杠
/a 和 /a/ 在不少服务器配置下都会返回正常内容。如果两个都返回 200,蜘蛛就会当成两条 URL 分别处理。做法是全站统一一种写法,要么全部带尾斜杠,要么全部不带,另一种用 301 收到统一版本上。麻烦的是模板和编辑器各自带一套规则,所以最好在服务端配置里一次定下来。
大小写
URL 路径在多数服务器上是区分大小写的,/News/1 和 /news/1 可能是两个不同页面。站内链接、模板变量、CMS 自动生成的路径如果大小写不一致,重复地址就会悄悄长出来。检查时可以按小写和原始写法各统计一次日志。
参数与跟踪码
utm_source、ref、from 这类参数会产生大量“同一页不同地址”。用户分享、广告投放、站内跳转都可能自动带上。它们的价值在统计,不在给蜘蛛看。常见组合是页面内用 canonical 指向不带参数的版本,同时在 robots.txt 里不鼓励抓取典型的跟踪参数。注意 robots.txt 只是不鼓励,不等于阻止,canonical 才是主要的收敛手段。
协议与 www
http 与 https、www 与裸域,最好只保留一套对外可访问,其余 301。两套同时开着且都能正常浏览,是重复地址里最容易修、也最容易被忽略的一种。
收口的几种做法
- 301 永久跳转:适合明确的重复版本,把访问和权重都干脆地收到规范地址上。
- canonical:适合参数变体、排序筛选这类不方便全部跳转的场景,在页面内声明规范地址。
- 内链统一:模板和正文里的链接一律写规范地址。蜘蛛大多是从链接发现 URL 的,链接怎么写,它就先怎么记。
- Sitemap 只放规范版本:地图里混入多个变体,等于主动告诉蜘蛛这些都值得抓。
301 和 canonical 不冲突,可以叠加使用。原则是:能跳转的优先跳转,跳转会破坏用户体验或功能的地方,再用 canonical 兜底。
参数页面:哪些该走,哪些该收
筛选、排序、分页、站内搜索结果,是参数 URL 的主要来源。判断标准可以很朴素:这个参数组合下,页面是否有独立的价值。排序参数通常只是同一批内容换个顺序,同质化严重,适合 canonical 到主版本。筛选参数如果确实组合出了有搜索需求的页面,可以留一部分,但要控制数量,避免组合爆炸。站内搜索结果页尽量不要开放给蜘蛛——它本身就是一个爬虫,让蜘蛛进去容易陷入大量无意义的地址。
定期检查的几步
- 在服务器日志里按路径统计抓取次数,找出同一份内容对应的多个地址。
- 把 Sitemap 里提交的地址与日志对照,看蜘蛛抓的是不是规范版本。
- 调整跳转和 canonical 之后观察一段时间,抓取分布会慢慢变化,不要指望立刻改观。
规范化的目标是让蜘蛛少走冤枉路,不是把 URL 数量压到越少越好。有独立内容、有搜索需求的页面,该留就留。
小结:这件事越早统一越省事。它不会直接带来排名,但能减少抓取浪费,把有限的机会留给真正需要更新和收录的页面。