在蜘蛛眼里,URL 首先是一串字符串,而不是“这个页面”。所以当同一篇内容在网上存在好几个地址时,蜘蛛不会自动帮你合并——它会分别排队、分别抓取,把原本可以集中在一个地址上的抓取次数和站内信号摊薄。
重复 URL 通常从哪几个地方冒出来
- 协议与主机名:http 与 https、带 www 与不带 www 同时可访问,且互相之间没有跳转。
- 大小写:/About/Us 和 /about/us 在多数服务器上会被当成两个不同路径。
- 结尾斜杠:/list 与 /list/ 返回同一份内容。
- 默认首页文件:/index.php、/index.html、/ 各自返回一次 200。
- 参数顺序与无用参数:?a=1&b=2 与 ?b=2&a=1;跟踪参数、会话 ID、来源标记。
- 排序与视图参数:按时间排序、按价格排序、打印页、纯文本页。
这些形态单独看都不致命,但如果站内链接、Sitemap、canonical 各用一套写法,蜘蛛拿到的就是互相矛盾的信号。
为什么值得花时间收拾
一是抓取次数分散。同一个页面的多个地址都要抓一次,服务器也要多处理几次请求,对资源有限的小站不划算。二是信号分散。外链、内链、分享链接如果指向不同形态,页面很难形成一个清晰的“主地址”。三是分析失真:日志里的 URL 形态太多,你会误判哪些页面真的被抓得少。四是维护成本,改版时改了规范形式,旧形态的跳转没跟上,就会出现新的重复。
处理顺序:先定规范,再统一,最后收敛
- 先确定唯一规范形式:选一个协议、一个主机名(www 或非 www)、统一小写、统一是否带结尾斜杠。定了就不再改。
- 站内所有出口统一:导航、列表、正文内链、分页、Sitemap、RSS、站内搜索的跳转地址,全部按规范形式生成。这一步比做跳转更重要,因为蜘蛛主要是顺着链接走的。
- 其他形式做 301:旧域名、旧路径、大写地址、带默认文件名的地址,一次性永久跳转到规范地址。避免 302 换成 301、避免跳转链一串接一串。
- 无法跳转的用 canonical:跟踪参数、排序参数这类不能直接 301 的,用规范链接标签声明主地址,同时尽量别在站内大量暴露这些参数链接。
- 核对 Sitemap:Sitemap 里只放规范 URL,不放参数版、也不放被跳转的旧地址,否则等于自己制造矛盾。
- 验证:抽查核心页面的响应,看跳转是否一步到位、状态码是不是 301、返回内容是不是规范页。
几个常见坑
- canonical 指向的地址本身被 noindex 或返回 404,等于把信号指向空处。
- Sitemap 提交的是 A 形态,内链用的是 B 形态,蜘蛛两边都要抓。
- CDN 或缓存层把大小写不同的请求分别缓存,导致同一内容有多份缓存。
- 跳转链过长,A→B→C→D,每次都要多一个往返。
- 参数页互相 canonical,最后谁也说不清主地址是谁。
怎么确认自己做对了
- 从服务器日志里按路径形态筛一遍,看是否还有大写、双斜杠、带 index 的请求被大量抓取。
- 随机抽 10 个核心页面,手动把地址改成“错误形态”,看是否一步 301 到规范地址。
- 对比 Sitemap 里的 URL 和页面内链的 URL,两者应完全一致。
- 留意新上线的功能:分页、分享、导购参数最容易带进新的重复形态。
URL 规范化不是一次性的整理,而是一条持续维护的底线:只要站点还在加功能、改结构,新的重复地址就会不断冒出来。