蜘蛛是按 URL 记账的。对搜索引擎来说,不同的 URL 就是不同的页面,哪怕它们返回的内容完全一样。当一个页面能通过多个地址打开,站点就会在抓取队列、抓取日志和权重判断上重复记账:抓取次数被摊薄,主地址的更新信号被稀释,日志里也很难看清哪些地址才是真正需要维护的。
重复 URL 通常从哪里冒出来
多数站点不是主动制造重复地址,而是若干技术细节叠出来的:
- 协议和主机名不统一:http 与 https、带 www 与不带 www 都能访问,且没有做跳转。
- 路径收尾不一致:列表页 /list 和 /list/ 都返回 200。
- 大小写混用:服务器区分大小写时,/About 和 /about 会算成两条地址。
- 渠道参数:utm、gclid、fbclid、ref 每投一次推广就生成一批新地址。
- 筛选与排序参数:sort、order、filter、price_min 组合出大量地址。
- 会话类参数:sessionid、sid、时间戳、随机数。
- 功能页面外泄:打印页、移动版、短链、站内搜索结果页被外链或分享带出去。
抓取层面的实际影响
- 抓取次数被重复消耗,新内容分到的抓取机会变少。
- 日志噪音变大,看哪些 URL 被抓过时,很难判断主地址的真实表现。
- 外链与内链权重分散到多个地址上,单个地址的链接信号被削弱。
- 回爬判断混乱:同一内容在几个地址上的更新节奏不同,蜘蛛难以确认哪个版本是最新的。
- 选错主地址:如果站点自己都没明确指向哪个版本,主地址可能不是你以为的那个。
处理顺序:硬信号在前,软信号在后
先做能让地址真正合并的动作,再做只是表态的标注。
- 能跳的一律用 301:http 到 https、非 www 到 www、带参数到不带参数,一次性跳到最终地址,避免多跳。
- 不能跳的用 canonical:指向自己确认的主地址,且主地址本身要能正常返回 200。
- 内链统一写法:站内所有链接都写成同一个形式,别在导航里用不带斜杠、正文里用带斜杠。
- 站点地图只保留主地址:把跳转地址、参数地址、重复地址从 Sitemap 里清掉。
301 是替代关系,canonical 是建议关系。能跳转的重复地址,优先用 301 收拢;实在不能跳转的,再用 canonical 说明。
可以按这个顺序自查
- 从抓取日志里统计带参数的 URL 占比,看看重复地址有没有被大量抓取。
- 用几个典型地址测试:换协议、加 www、去掉尾斜杠,看是否都跳到同一个最终地址。
- 抽查页面的 canonical 是否自指,是否指向了实际返回 200 的主地址。
- 检查内链、Sitemap、RSS 里的地址写法是否一致。
- 清理重复地址后,观察一段时间内日志中主地址的抓取比例是否上升。
几个容易踩的坑
- 用 canonical 代替 301。两者强度不同,能跳转的地址不做跳转,等于让蜘蛛自己去猜。
- 用 robots 屏蔽参数地址。规则写得太宽可能把带参数的主内容页一起挡掉,连发现都成问题。
- 把分页全部 canonical 到第一页。后续页面的内容不再被单独看待,深层链接也失去作用。
- canonical 指向的主地址本身还会跳转或返回非 200。指向一个打不开的地址,等于没有表态。
- 清理时不看日志,凭感觉删。先确认哪些地址真的被蜘蛛抓过、哪些有外链,再决定怎么处理。
重复 URL 不会立刻让站点出问题,但它会持续消耗抓取机会,也让运营者看不清站点的真实抓取情况。把地址写法收拢到一套规则上,是提升抓取效率里成本较低的一件事。