搜索抓取

同一页面多个 URL:末尾斜杠、大小写与参数顺序带来的重复抓取

同一个页面被写成多个 URL,蜘蛛会当成多个入口分别抓取。本文梳理末尾斜杠、大小写、默认首页、参数顺序等常见重复来源,说明它们对抓取预算和链接权重的影响,并给出 301、canonical、内链统一、Sitemap 只提交规范地址等收敛办法。

搜索抓取

同一页面多个 URL:末尾斜杠、大小写与参数顺序带来的重复抓取

很多站点在做抓取分析时会发现,日志里同一个内容对应着好几条 URL。它们并不是重复内容,而是同一个地址的不同写法。对浏览器来说差别不大,对蜘蛛来说却是几个独立的入口,每一次都要单独走一遍抓取流程。

蜘蛛只认字符串,不认页面

蜘蛛拿到一个链接,最先判断的是“这个 URL 字符串有没有抓过”。如果没有缓存记录,就排进队列。至于这个地址打开后是不是和站内另一个地址返回同样的内容,要等到抓回来、解析、比对之后才知道。也就是说,只要链接写法不同,前期的请求和下载就已经发生了,后面再发现是同一页,成本也已经付出去了。

最常见的几种“一页多址”

  • 末尾斜杠:/about 与 /about/ 在部分服务器配置下都能返回 200。
  • 大小写:/News 与 /news 是否等价,取决于服务器、CDN 与路由规则。
  • 默认首页文件:/ 、/index.html 、/index.php 同时可访问。
  • 协议与域名:http 与 https、带 www 与不带 www,各留了一份。
  • 参数顺序与冗余参数:?a=1&b=2 与 ?b=2&a=1,后面再挂一串来源标记。
  • 跟踪与展示参数:分享渠道、排序方式、每页条数,往往组合出大量地址。

代价不止是多抓一次

  • 抓取预算被摊薄:同一份内容占掉多条 URL 的抓取名额,真正需要更新的页面排队更久。
  • 链接权重被分散:站内指向同一页的链接落在不同写法上,信号被拆成几份。
  • 数据失真:日志、统计、抓取报告里同一页出现多次,判断哪些栏目被冷落时容易误判。
  • 规范地址不稳定:搜索引擎可能在几个写法之间来回切换,展示出来的地址不固定。

收敛到唯一 URL 的几个动作

  1. 选一个规范写法,其余写法统一 301 到它,并且保持长期有效。
  2. 页面上保留 canonical,指向规范地址,且与 301 的目标一致,不要互相矛盾。
  3. 内链、Sitemap、分享按钮、RSS 里的链接全部使用规范写法。内链尤其重要,它决定了蜘蛛日常走的路。
  4. Sitemap 只提交规范地址,不要同时提交带斜杠和不带斜杠两个版本。
  5. 参数页分类处理:能合并的合并,纯展示用的去掉,确实需要的保留并给出明确的规范指向或抓取指令。

归一化时尽量用 301,不要用 JS 跳转或 302 临时跳转来顶替,蜘蛛对后两者的处理不如永久跳转干脆;也不要把整类参数用 robots.txt 全部挡掉,挡住抓取的同时,URL 的发现和后续判断也一并被挡掉了。

怎么发现自己站里的重复 URL

  • 在日志里搜同一段路径,看是否存在大小写、末尾斜杠不同的抓取记录。
  • 检查站点抓取统计里,同一标题是否对应多个地址。
  • 抽查内链,尤其是模板生成的链接、面包屑、分页导航。
  • 确认服务器在补斜杠或补默认文件时,返回的是 301 还是 302。
归一化不是配置一次就结束的事。新增栏目、改版模板、接入新的统计或推广工具,都可能重新引入新的写法,隔一段时间复查一次比较稳妥。

把 URL 写法收敛好,不会立刻带来什么变化,但它能让蜘蛛的每一次访问都落在真正需要被看到的页面上,也让后续的抓取分析少掉很多噪音。