搜索蜘蛛发现一个新地址,起点不是“页面”,而是“字符串”。同样一个页面,只要内外链接里写成了不同的形式,对蜘蛛来说就可能是两个甚至三个独立地址。发现之后要不要抓、抓几次、算不算重复,都会跟着变。
为什么写法差异会被当成不同地址
蜘蛛没有“看懂”页面的能力,它先记录 URL 字面。URL 里的大小写、斜杠、参数顺序、编码方式只要有一处不同,队列里就是一条新的记录。站内链接不统一时,最容易出现的现象是:明明只有一篇文章,却在抓取数据里看到多个地址各抓了一次,权重也被分散。
这不只是重复抓取的问题,还会牵扯到抓取预算。蜘蛛在同一个站点的额度是有限的,把额度花在“同一页面的多种写法”上,新页面的发现自然就慢了。
最常见的几类写法差异
- 大小写:/About 与 /about 在多数服务器上是两个地址,页面上链接混用就会分裂。
- 结尾斜杠:/news 与 /news/ 是否同一页,取决于服务器规则,蜘蛛不替你判断。
- 默认文档:/about 与 /about/index.html 同时可访问时,两条都会被记录。
- 主机名:带 www 与不带 www,是彻底不同的域名级地址。
- 参数顺序:?a=1&b=2 与 ?b=2&a=1 内容一样,字面不同。
- 编码方式:中文、空格、特殊符号的百分号编码写法不一致,也会产生不同字面。
- 追踪参数:从外部渠道带进来的 utm 之类参数,会把同一页拆成很多份。
把规范形态定下来,再谈发现
做法不复杂:先确定唯一形态,再让所有出口统一指向它。
- 站内链接、导航、面包屑、分页、相关推荐,全部使用同一写法。
- Sitemap 只提交规范形态,不要把带参数或大小写混用的版本一起丢进去。
- 页面上写上 canonical,指向规范地址;canonical 与内链写法保持一致,不要互相打架。
- 其余写法用一条跳转指向规范地址,跳转层级控制在一跳,别串成长链。
规范化的目的不是“让蜘蛛少抓”,而是让它把抓取花在该花的地方。同一份内容被抓一次,就够用了。
用日志和数据核对
规则定完要验证。翻一遍服务器日志,看蜘蛛实际请求的路径里有没有大写版本、index.html 版本、带追踪参数的版本。再看抓取统计里同一个页面对应几条地址。如果发现多条,回到内链和 Sitemap 里找源头。
顺带留意服务器稳定性:如果带斜杠的地址返回 301,而原地址偶尔 5xx,蜘蛛对这条路径的判断会变得犹豫,发现节奏也会受影响。规范化和服务器反馈要一起看。
容易被忽略的两个细节
内链里的相对路径
相对链接本身没问题,但基准地址写错时,解析出的绝对地址可能多出目录层级。上线前抽查几条,确认解析结果就是规范形态。
接口与前端路由生成的地址
由 JS 拼出来的链接,写法往往不统一,还容易带上排序参数。能收敛就收敛;收敛不了,至少保证主动提交和 Sitemap 里是干净的。
URL 规范形态属于基础工程,不会带来立竿见影的效果,但它决定了蜘蛛看到的是几个地址。把这一层理顺,后面谈抓取路径、内链层级、Sitemap 申报才有共同的前提。