搜索抓取

同一页面的多个 URL:把重复抓取收敛到规范地址

同一份内容常常对应好几个 URL:http 与 https、带不带 www、末尾斜杠、大小写、参数、打印版。它们各自被蜘蛛抓一遍,抓取量被摊薄,日志也很难读。这篇文章整理重复 URL 的常见来源、301 与 canonical 的分工、内链与 Sitemap 的统一写法,以及怎么用抓取日志验证收敛是否生效。

搜索抓取

同一页面的多个 URL:把重复抓取收敛到规范地址

同一个页面被蜘蛛抓了很多次,翻开日志却发现抓的是几个写法不同的地址——这种情况在中小站点上很常见。多数重复 URL 并不是外链带来的,而是站点自己长出来的:协议、域名前缀、参数、分页、大小写,每一样都能变出一个新地址。

重复 URL 一般从哪几个地方冒出来

  • 协议与域名前缀:http 和 https、带 www 和不带 www,几套组合如果都能正常访问,等于给蜘蛛开了好几道门。
  • 路径写法:末尾带不带斜杠、大小写混用、多余的 index.html,服务器如果不做统一跳转,就会被当成不同页面。
  • 追踪与筛选参数:来源统计参数、排序方式、每页条数、站内搜索结果页,随手一点就生成一串新 URL。
  • 功能型副本:打印版、移动版、分享预览页,如果都返回 200,就等于把同一份内容交了好几遍。
  • 分页与归档:列表翻页、标签页、年月归档,数量一大,抓取量很容易被这些页面吃掉。

为什么值得花时间收敛

重复 URL 不会直接导致什么严重后果,但它会带来三个具体的麻烦。第一,蜘蛛的抓取量是有限的,同一份内容抓五遍,新页面分到的次数就少了。第二,外链和分享散落在不同写法上,信号被拆开。第三,日志里同一个页面的数据被切成几段,排查抓取问题时很难看出真实情况。

收敛手段怎么分工

301 负责把入口统一

协议、域名前缀、末尾斜杠这类结构性差异,能用 301 就用 301,让所有写法最终落到一个地址上。这是最干净的做法,蜘蛛跟一次就记住了。

canonical 处理那些不能跳的

带参数的筛选页、打印版这类地址,有时确实需要保留给用户访问,这时用 canonical 指向规范页更合适。注意 canonical 要指向返回 200 的地址,不要指向一个本身就会跳转的 URL。

内链和 Sitemap 用同一套写法

站内链接、导航、面包屑、Sitemap、RSS 里出现的地址,最好保持一致。内链里混着两种写法,等于每天主动告诉蜘蛛“这里还有另一个地址”,前面做的跳转会被慢慢稀释。

robots 与 noindex 要慎用

对确实不需要被抓取的参数组合,可以用 robots.txt 屏蔽,但别把需要索引的页面一起挡掉。如果只想让页面不参与索引、仍允许抓取,用 noindex 更稳妥;两者混用容易出现屏蔽了抓取、noindex 又读不到的情况。

怎么确认收敛生效了

  1. 看抓取日志里同一内容的 URL 数量是否下降,尤其是带参数的地址。
  2. 抽查规范地址在页面源代码里的 canonical 是否唯一、是否自指。
  3. 在站内随便点几条链接,复制出来的地址写法是否一致。
  4. 观察抓取统计中列表页、参数页的比例有没有回落,新内容的抓取次数有没有回升。
收敛不是一次性的活。上新功能、接统计工具、改模板时都可能重新引入重复写法,建议把“新页面输出前检查 URL 写法”写进上线流程。

重复 URL 的处理优先级可以按数量排:先解决协议和域名这类会全线复制的差异,再处理参数和分页,最后收拾功能型副本。一步步来,日志会先变得好读,抓取量也会慢慢回到该去的地方。