为什么入口页要先做 URL 规范化
蜘蛛池的入口页大多是批量生成的,同一份内容很容易对应到多个地址:带 www 和不带 www、结尾带斜杠和不带斜杠、大写和小写混着来。对外看只是「多了一个页面」,对蜘蛛来说却是若干个各自独立的 URL。抓取日志会被同一份内容反复填满,抓取预算被摊薄到多个变体上,判断重复内容时也更容易出现偏差。
规范化要解决的问题很朴素:让同一份内容只对应一个主 URL,其余形态都明确指向它。这件事做在前面,后面接资源、看日志、铺内链都会省事很多。
入口页常见的几种不规范情况
- 同一域名下 http 与 https 同时可访问,没有强制跳转;
- www 与非 www 都能打开,各自返回 200;
- 路径大小写混用,/Index 和 /index 被当成两个页面;
- 结尾斜杠不统一,/a 与 /a/ 都能访问;
- 默认首页既能用 /,也能用 /index.html、/index.php;
- URL 里挂着 utm_、sessionid、时间戳等无用参数;
- 列表页的排序、筛选、分页参数组合出大量近似地址;
- 不同批次生成的入口页命名习惯不同,最后混在一起。
这些情况单独看都不大,叠加起来就会让入口层的地址变得很乱,蜘蛛抓到的 URL 和你以为在维护的那批,往往对不上。
先选定唯一形态,再谈收敛
规范形态没有绝对标准,重点是内部统一、长期不变。常见的取舍是:
- 域名层面二选一:要么全 www,要么全非 www,另一个用 301 收过来;
- 协议统一走 https,http 一律 301;
- 路径统一小写,在生成脚本里做一次强制转换;
- 结尾斜杠二选一,目录式页面统一带,文件式页面统一不带;
- 首页只用根路径,/index.html 这类形态要么 301,要么干脆不生成;
- 参数能省则省,必要的参数固定顺序或用路径重写。
规范化最怕「今天觉得带斜杠好,明天又改成不带」。改动一次就等于把入口页的链路全部动一遍,已有的抓取记录也要重新对齐,所以规则最好在建池初期就定下来。
把信号统一到主 URL 上
- 用 301 收敛,不用 302。302 属于临时跳转,蜘蛛通常不会把索引和信号合并到目标地址。
- 加 canonical。在非规范形态的页面上指向主 URL,作为跳转之外的第二重保险。跳转目标和 canonical 要指向同一个地址,信号才不打架。
- 内链只用规范形态。入口页之间互链、指向目标页的链接,都写规范 URL。哪怕只差一个结尾斜杠,也会让蜘蛛多走一次跳转。
- sitemap 与提交接口用规范 URL。站点地图和主动提交是 URL 发现的补充渠道,如果里面塞的是变体地址,等于自己制造重复。
- 生成脚本统一出 URL。把域名、协议、斜杠、大小写的规则写进模板,别指望上线后人工逐个修。
参数类 URL 怎么处理
入口页很少完全不用参数,但可以控制范围。排序、筛选这类会生成大量组合的参数,建议固定参数顺序,或者重写成路径;跟踪参数(utm、渠道标识)不要出现在入口页的链接里;只有真正影响内容的参数才保留,其余的在生成阶段就去掉。如果确实无法收敛,至少在页面上放 canonical 指向无参数的主地址,避免蜘蛛把每个组合都当成新页面。
怎么检查是否收敛到位
- 翻抓取日志,看同一份内容是不是还对应着多个地址;
- 抽样用浏览器访问变体形态,确认返回的是 301 而不是 200;
- 把 sitemap、提交接口里的 URL 和页面上的内链做一次比对,看是否都是规范形态;
- 检查生成脚本,确认规则是在源头生效,而不是靠后期批量替换。
几个容易踩的坑
用 302 或 JS 跳转做规范化,蜘蛛往往不会按预期合并信号;把非规范形态直接 404,可能连外部已有的指向一起丢掉,301 通常更稳;已经在用的规范形态不要临时改,改之前先确认全站链路能不能同步调整。规范化本身不保证抓取或收录结果,它做的只是把入口层的地址理干净,让蜘蛛少做一些重复判断,剩下的还是取决于内容与实际站点质量。