同一段内容,如果可以通过多个 URL 打开,搜索引擎会把它们当成不同页面分别处理。结果往往是:收录数量看着不少,但每条都单薄,权重被摊薄,页面改版或下线时还会留下散落的旧地址。问题通常不在内容本身,而在 URL 没有归一化。
常见的几类 URL 变体
- 大小写:/About 与 /about,服务器若都返回 200,就是两条记录。
- 尾斜杠:/news 与 /news/,很多框架默认两者都能访问。
- 协议与主机:http 与 https、带 www 与不带 www,四种组合都可能被分别抓取。
- 参数顺序与冗余参数:?a=1&b=2 与 ?b=2&a=1 内容一样;加上 utm 追踪参数后又多出一批地址。
- 路径细节:/index.html、重复斜杠 //a、编码后的中文与空格。
为什么这会拆散收录
蜘蛛按 URL 去重,不按页面内容去重。只要服务器对每个变体都返回 200,就等于告诉搜索引擎这是多份独立副本。canonical 是提示而非强制指令,它可以在一定程度上帮助收口,但前提是这些变体本身能被稳定抓取到,且信号一致。
更常见的隐患来自内链:导航、面包屑、列表页里混用带斜杠和不带斜杠的地址,蜘蛛就会沿着这些链接持续发现新变体,收录被越拆越细。
收敛顺序:从服务器到内链
- 先统一主机与协议。选定一个唯一形式,其余全部 301,注意重定向链尽量不要超过一跳。
- 定一个尾斜杠策略。目录式 URL 带斜杠、文件式不带,全站保持一致,不要按页面随意决定。
- 大小写强制统一。服务器层或框架层把小写作为唯一形式,其余 301 过去。
- 参数做减法。必要参数保留,位置无关的参数按固定顺序输出,追踪类参数在服务端剥离或屏蔽抓取。
- 内链、站点地图、分页只输出规范形式。这是最容易被忽略、也最容易反复制造变体的一环。
- canonical 作为兜底。在无法做 301 的场景(比如参数页)标注,指向规范地址,且与内链指向保持一致。
自查可以从三个地方入手
- 日志:看被高频抓取的 URL 里有没有同一路径的大小写、斜杠变体。
- site: 查询与站长后台的网址检查:抽样看收录的是哪一种形式。
- 服务器响应:随机抽几条变体,确认返回的是 301 还是 200。
判断标准很简单:如果两个 URL 打开后内容完全一致,而它们都不是重定向关系,那基本可以认为其中一条是多余的。
几个容易踩的坑
一是只改了前端链接,旧地址仍然 200,等于没收敛。二是重定向链太长,A 跳 B 跳 C,抓取效率会打折。三是表单或筛选产生的 GET 参数被大量链接引用,最好配合 robots.txt 或参数处理规则限制。四是改版迁移时只处理了首页级 URL,深层路径的变体被遗漏。
URL 归一化不会直接带来收录增长,它做的是减少无效副本、让信号集中。这件事越早做越省事,越晚做,需要清理的旧地址就越多。