搜索抓取

URL 变体与重复抓取:大小写、尾斜杠与编码不一致的核对清单

同一份内容被多个等价 URL 分别抓取,是抓取机会被白白消耗的常见原因。本文从大小写、尾斜杠、编码与参数四类差异入手,说明如何借助日志定位重复抓取,并给出一份可执行的核对与修复清单。

搜索抓取

URL 变体与重复抓取:大小写、尾斜杠与编码不一致的核对清单

翻服务器日志时,常会看到同一篇文章被几个只差一两个字符的 URL 分别请求。这些地址返回的是同一份内容,但抓取工具不会自动把它们合并,每一次请求都要占用一次抓取机会。问题通常出在站内链接、Sitemap、跳转规则三者的写法没有对齐。

先把“等价”判断清楚

判断两个 URL 是否等价,不看它们看起来像不像,而看三件事:协议与主机名是否统一、路径是否只有一种写法、查询参数是否稳定。只要其中一项存在多种写法,并且都能返回 200,就会形成两条独立的抓取记录。

大小写与主机名

多数服务器对路径区分大小写,但部分 CDN 和框架不区分。如果站内既有 /Article/123 也有 /article/123,且两者都返回 200,两个地址都会被当成独立入口。带 www 与不带 www、http 与 https 混用同理,需要用 301 收敛到一个版本。

尾斜杠与默认文件名

目录地址后加不加斜杠、首页写成 / 还是 /index.html,这类差异最容易在内链里同时出现。导航里用带斜杠的写法,正文里用不带斜杠的写法,就等于给蜘蛛提供了两条路。

编码、参数与锚点

中文路径、空格、括号在编码后可能存在多种等价形式;参数的顺序、追踪参数不同也会生成新地址。锚点本身一般不影响抓取,但如果前端用锚点做路由,就需要额外核对服务端返回的内容是否一致。

核对清单

  1. 从日志中筛出近一个月被抓取两次以上的路径,按去掉参数后的形式分组,看差异集中在哪一类。
  2. 检查 canonical 标签是否指向站内实际使用的主版本,而不是另一条等价地址。
  3. 检查 Sitemap 里的写法是否和内链一致,尤其是尾斜杠和大小写。
  4. 检查 301 规则是否只跳一次,避免 A 到 B 再到 C 的链式跳转。
  5. 检查参数过滤规则:确认对内容无影响的参数是被忽略,还是被处理成了独立页面。
  6. 检查前端路由生成的链接,是否在渲染后又追加了参数或斜杠。

修复后的观察方式

调整完成后,不必指望第二天日志就变干净,已有地址的抓取记录会保留一段时间。比较稳妥的做法是:

  • 每周固定抽取同一时段的日志,统计等价 URL 的请求条数占比,看趋势而不是看单日数字。
  • 把新发布的页面单独分组,确认它们的链接写法从一开始就统一。
  • 对内链模板做一次性排查,比逐页修改更省事。
等价 URL 的数量减少,通常意味着抓取机会更多地落在真正需要更新的页面上,但具体抓取频次仍由搜索引擎决定,不由站点单方面控制。

这项工作没有太多技巧,重点是保持写法一致并且长期不反复。站点规模越大,模板层面的统一越关键,靠人工逐页修改很难维持。