站点运营

站点运营:URL 大小写、尾斜杠与主机名,同一页别留多个地址

http 与 https、带 www 与不带、末尾有无斜杠、大小写混用、参数顺序不同,都可能让同一篇内容出现好几个可访问地址。地址一多,权重被摊薄,抓取也更容易浪费。本文梳理这些边角情形的自查方法与统一处理顺序。

站点运营

站点运营:URL 大小写、尾斜杠与主机名,同一页别留多个地址

同一篇内容在服务器上往往可以有好几种写法被访问到:带 www 和不带 www、http 和 https、末尾有斜杠和没斜杠、大写和小写。对用户来说这些地址几乎没差别,但爬虫会把它们当成不同资源。地址一多,抓取预算被摊薄,外部链接带来的权重也会分散到几个副本上。下面聊的是 URL 规范化里那些容易被放过的边角。

一页多址的常见来源

主机名与协议

http://example.com、https://example.com、https://www.example.com 三个地址常常都能打开同一个首页。如果三者都返回 200,就等于告诉爬虫这里有不止一份内容。做法是先确定一个正式主机名,其余全部 301 到它,并且跳转一步到位,不要 301 之后再 301。

路径大小写

域名部分不区分大小写,路径部分在多数服务器上区分。写成 /Article/1 和 /article/1,可能对应两个资源,也可能一个 200 一个 404。链接里随意使用大写,同一页就会在不同位置出现两种形态。建议路径统一小写,已经存在的混用地址做 301 归并。

末尾斜杠

/about 和 /about/ 在有的配置下返回同样内容,有的则一个正常一个报错。重点不是谁对谁错,而是站内写法要统一,另一种形式 301 到正式形式,别让两种都被链接和站点地图同时引用。

默认文件名

/ 与 /index.html、/list/ 与 /list/index.php 也经常同时可访问。保留一个,其余重定向,否则首页会凭空多出一份影子地址。

端口号

不带端口、:80、:443 混用,理论上同样会产生变体。测试环境遗留在正式站上的端口地址尤其要清掉。

参数顺序与追踪参数

?a=1&b=2 和 ?b=2&a=1 在服务器看来是两个不同的字符串。再加上 utm_source、from=share 这类分享参数,一个列表页能被生成出几十个地址。处理办法有两种:用 canonical 指明主地址,或者在服务器层面忽略这些参数并 301 到干净版本。注意做规则时别误伤功能参数,比如分页和筛选。

自查可以怎么做

  1. 从服务器日志取一周数据,筛出蜘蛛的访问记录,按返回 200 的地址统计,看有多少组路径像是同一页的不同写法。
  2. 抽查站内链接:主导航、面包屑、正文内链、站点地图四处各取几个页面,比较导出链接的写法是否一致。
  3. 手动访问可疑地址,确认状态码与页面内容是否和正式地址一致。
  4. 用抓取工具批量跑几十个样本地址,记录最终落地地址,看跳转链有几跳。

处理顺序:先统一,再兜底

统一是指站内所有链接、站点地图、canonical 标签都写正式形式,让新产生的地址从一开始就是干净的。兜底是指服务器对旧形式做 301,把已经被外部引用、被用户收藏的地址也接回来。canonical 只是提示,替代不了跳转,两者一起用会更稳。

几个容易踩的坑

  • 只改了首页,内页没管,爬虫依旧从旧列表、旧外链里发现老地址。
  • 跳转规则里留了中间站,多一跳就多一次等待,移动端用户感受更明显。
  • 在区分大小写的服务器上,用不区分大小写的规则把两个真实存在的页面合并成了一个 404。
  • 给带参数的地址做 301 时写得太宽,把正常的分页、筛选参数一起挡掉。
规范化不是一次性的整理工作,而是新链接产生时就要遵守的规则。写法统一了,后面的重定向清单才不会越滚越长。

把主机名、大小写、尾斜杠、默认文件名、参数这几处的规则定下来,写进团队的内容与开发约定,比事后一批批补 301 省力得多。