同一个详情页,用户从不同位置点进去时,浏览器地址栏可能长得不一样:有的带尾斜杠,有的把参数调换了顺序,有的多了一串跟踪参数。对用户来说这没什么差别,对搜索蜘蛛来说,这可能就是好几个不同的 URL。抓取日志里出现多行入口、指标对不上、页面像总也抓不完,很多时候根源就在这里。
多个入口是怎么产生的
重复入口通常不是某一处写错了,而是几个环节叠加的结果。可以按下面的顺序自查:
- 链接写法不统一:导航里写 /a,正文里写 /a/,模板里又输出 /a/index.html。
- 大小写混用:路径或参数名出现大写,服务器直接返回 200 而不是跳转。
- 参数顺序不同:foo=1 与 bar=2 谁在前,被当成两个地址。
- 跟踪参数:来源统计、广告投放、分享按钮各带一套 utm 或会话标识。
- 协议与域名:http 与 https、带 www 与不带 www 同时可访问。
- 分页或筛选参数被当成新的内容入口。
为什么值得花时间收敛
重复入口不一定直接导致问题,但会让核对变困难,也会分散抓取资源。
- 抓取日志里同一内容出现多行,覆盖率统计偏高或偏低,判断失真。
- 内链权重被拆散,同一个页面有多条入口互相竞争。
- 更新信号不一致:改了 A 入口,B 入口还停在旧内容。
- 站点地图里同时存在多个变体,抓取频次被摊薄。
怎么核对:从日志到规则表
第一步:在日志里找出疑似重复
取一周左右的抓取日志,去掉查询参数后再聚合一次,看哪些路径在去参数之后高度重合。重点关注同一路径出现 200 与 301 混合,或多条记录内容长度接近的情况。日志里的 URL 可能是编码后的形式,核对前先解码再比较。
第二步:列出规范化规则
把站点要遵守的写法写成一张表,条目越少越容易执行:
- 统一使用 https,非 https 一律跳转。
- 统一带或不带 www,只保留一种。
- 路径结尾是否带斜杠,只保留一种。
- 路径统一小写。
- 参数按固定顺序输出,无意义参数在服务端忽略并指向干净地址。
- 跟踪参数不参与内容识别,页面头部的 canonical 指向无参数地址。
第三步:分清 canonical 与 301 的分工
两者不是二选一。同一内容的不同写法,尤其是协议、大小写、尾斜杠这类可以彻底消除的差异,用 301 直接合并更干净;只是临时带参数、服务端难以完全去重的入口,用 canonical 提示。若两者指向不一致,反而会给抓取端制造矛盾信号。
核对时不要只看首页和几个重点页,模板生成的列表页、标签页、分页往往是重复入口的高发区。
几个容易忽略的细节
- 用 JavaScript 跳转代替 301,抓取端不一定执行,等于没有合并。
- 参数去重规则过宽,把真正区分内容的参数也去掉,会指向错误页面。
- 跳转链路过长,中间地址层层叠加,损耗抓取效率。
- 只改了一个环境,预发与线上规则不一致,核对结果对不上。
上线后的验证
规则调整后,用同样的方式再取一段日志,对比三个点:
- 疑似重复的入口是否还在被请求,数量是否下降。
- 旧地址是否一次就能跳到落点,而不是多次跳转。
- 站点地图与内链是否同步改成规范地址,避免旧写法继续被传播。
如果一段时间后旧入口仍有较多请求,通常是某个模板还在输出旧链接。回到模板层面查一遍,比反复提交新的地址更有效。