搜索抓取

大小写、末尾斜杠与默认文档:URL 规范化怎样影响蜘蛛的抓取路径

同一份内容常能通过 www 与非 www、带斜杠与不带斜杠、默认文档等多个地址打开,而蜘蛛在队列里看到的只是 URL 字符串,分辨不出它们是否同源。本文梳理常见地址变体的来源,说明抓取分散、信号摊薄、日志难读等实际表现,并给出服务器跳转、内链统一、Sitemap 收敛的处理顺序。

搜索抓取

大小写、末尾斜杠与默认文档:URL 规范化怎样影响蜘蛛的抓取路径

同一个页面,在服务器上往往不止一个可访问地址。带上 www 和不带 www 都能打开,末尾加不加斜杠都返回 200,index.html 也照常显示,再加一条带追踪参数的分享链接,同一份内容就有了好几个 URL。对人来说没什么差别,对蜘蛛来说,这些是彼此独立的候选地址。

蜘蛛先看到的是字符串,不是页面

抓取队列里排的是 URL,不是内容。蜘蛛决定抓不抓、要不要把它放进队列时,手上只有这个字符串和它的来源链接。这个地址背后是不是和另一个地址同一份内容,要等到真正抓下来、解析之后才能判断。所以规范化没做干净时,被重复消耗的不只是抓取次数,还有 URL 发现这条链路上的注意力。

常见的几种地址变体

  • 协议与主机名:http 与 https、带 www 与不带 www,几种组合如果都能访问,就是几个入口。
  • 末尾斜杠:/page 与 /page/ 返回同一内容,却常被当成两个地址对待。
  • 默认文档:/page/ 与 /page/index.html 同时可以打开。
  • 大小写:/Article 与 /article 在多数服务器上指向同一目录,但可能是两条 URL。
  • 参数顺序与冗余参数:?a=1&b=2 与 ?b=2&a=1 内容相同,utm_source 之类追踪参数更会成倍复制地址。

变体多了,抓取路径会变成什么样

最直接的表现是抓取分散。本来能集中在一个地址上的抓取次数,被摊到两三个甚至更多地址上,每个都只抓到一部分,谁都不够完整。其次是信号被摊薄:内链、外链、点击分散指向不同变体时,关于“哪个才是主地址”的判断更难形成。第三是日志难读,同一内容在抓取日志里反复出现,统计页面数量和判断抓取覆盖时容易看走眼。

还有一种更隐蔽的情况:canonical 指向 A,服务器实际 301 跳到 B,站内链接又大量指向 C。三个信号互相矛盾时,蜘蛛只能自己挑一个,挑出来的结果不一定和你的预期一致。

收敛的做法

  1. 服务器层先做统一跳转:选定一个主域和协议,其余用 301 永久重定向过去;末尾斜杠按目录与文件分别定规则,全站保持一致。
  2. 内链只用规范地址:导航、面包屑、正文链接里的地址统一成最终形态。这是蜘蛛看到频率最高的信号,比事后补 canonical 更省事。
  3. Sitemap 只放规范地址:站点地图里出现变体地址,等于主动又提交了一份重复入口。
  4. canonical 当提示,别当开关:它有助于合并信号,但不会阻止蜘蛛访问被标记的地址,也替代不了跳转。
  5. 追踪参数从源头去掉:分享链接、投放链接、站内搜索产生的参数地址,尽量不让它进入可抓取的链接结构。

自查时可以按这个顺序看

先从日志里筛出访问较多的地址,把同一内容的多个变体挑出来,看它们各自被抓了多少次;再到服务器上确认每个变体的返回码,是 200 还是 301;接着检查页面里的 canonical 与实际跳转目标是否一致;最后抽查内链和 Sitemap,看还有没有残留的旧形态地址。这一圈走下来,通常能发现几处长期存在的分叉。

规范化不是一次性清理,而是每次新增栏目、调整目录、改动参数规则时顺手确认的一件事。地址统一了,抓取路径才会跟着变简单。