做抓取日志分析时,经常会遇到一种情况:页面内容明明只有一份,日志里却出现了好几种 URL 写法,抓取次数被摊薄,内链权重也被拆散。这通常不是蜘蛛“抓错了”,而是站点自身的 URL 规范化没有统一。
一、同页多入口的常见表现
- 带尾斜杠与不带尾斜杠同时返回 200,内容一致;
- 路径大小写混用,例如 /News/ 与 /news/ 都能打开;
- http 与 https、www 与非 www 并存,且各自都能访问;
- 同一列表页被 /list、/list/、/list/index.html 三种形式命中;
- URL 中夹带 utm_、from、spm 等跟踪参数,每次分享都生成新入口;
- 中文或空格参数出现编码与未编码两种写法。
这些形态如果都能返回 200,蜘蛛会把它们当作不同资源分别抓取,同一份内容被重复消耗抓取预算。
二、影响不只是“重复”
入口分散会带来几个连锁问题:内链指向不统一,导致同一页面的内部与外部信号被拆到多个 URL 上;Sitemap 里提交的形态与页面 canonical 标注的形态不一致,让抓取调度与实际规范地址对不上;日志统计时,你很难判断某个栏目到底是抓取不足,还是被拆成了多条记录。排查孤岛页、抓取断层时,这类问题还会伪装成别的原因,让人误判方向。
三、核对顺序
- 先定唯一规范形态。确定协议、主机名、路径大小写、是否保留尾斜杠,并写成一句话规则,避免多人协作时各自理解。
- 检查服务端是否强制跳转。非规范形态应返回 301 到规范地址,而不是返回 200,也不是 302 到另一个非规范地址。
- 核对 canonical。每个页面 canonical 应指向自身规范地址,且全站写法一致,不要出现 canonical 指向一个会 302 的地址。
- 核对 Sitemap。Sitemap 中只放规范地址,避免把带参数、带尾斜杠的变体也提交进去。
- 核对内链。站内链接、面包屑、分页链接统一使用规范形态,减少一次多余跳转。
- 核对参数。只保留业务必需参数,跟踪类参数尽量在服务端 301 剥离,或至少不参与内容生成。
- 核对静态资源与接口。静态文件、图片 CDN 域名不必参与规范化,但要确认它们没有被误写入页面主链接。
容易漏掉的两个点
一是分页与筛选:列表页翻页参数顺序不同、筛选条件顺序不同,会生成大量等价 URL;二是前端拼接:JS 渲染时用当前地址拼接链接,如果当前地址本身是非规范形态,生成的内链也会跟着变成非规范形态,问题会沿链接一路扩散。
四、收敛后的验证
改完之后不要只看首页。抽取几十个典型页面,分别用规范与非规范形态请求,确认非规范形态返回 301 且落在同一最终地址,最终地址返回 200。再回看一段时间内的抓取日志,观察同一内容对应的 URL 形态数量是否下降,规范地址的抓取占比是否上升。如果日志里仍有大量变体入口,多半是某个入口没有真正走到跳转规则上。
规范化不是一次配置就结束的事,新增栏目、改版、接入新 CDN 或更换前端框架时,都可能重新引入不统一的写法,建议把它纳入上线检查项。