站内链接里多一个问号、结尾多一个斜杠、大小写换一下,浏览器都能打开同一个页面,但对蜘蛛来说,这可能是好几条不同的 URL。抓取次数是有限的,重复地址越多,真正需要被发现的页面分到的机会就越少。
一个页面为什么会变成多个地址
变体多数不是刻意造成的,而是模板写法、第三方追踪工具和服务器配置叠在一起的结果。常见的可以归成三类。
参数类变体
- 追踪参数:utm_source、from、ref 之类被直接写进源码链接里。
- 会话与缓存参数:sessionid、sid、随机数,同一次访问生成不同地址。
- 排序与筛选:?sort=price_desc、?color=red,组合起来能生成几十上百条。
- 站内搜索:?s=关键词,用户搜什么就产生什么 URL。
- 分页与视图:?p=1 与不带参数的首页内容相同;打印页、分享页、评论跳转页各自独立。
这些地址在浏览器里是正常功能,问题出在它们被当成链接写进了页面源码,蜘蛛顺着爬就会一路展开。
格式类变体
- 大小写不同:/Product 与 /product。
- 结尾斜杠:/about 与 /about/。
- 默认首页写法:/index.html、/index.php 与 /。
- 多重斜杠或路径中的冗余符号:/news//123。
- 中文或特殊字符是否统一编码方式。
服务器往往对它们一视同仁,但 URL 字符串不同,在蜘蛛那里就是不同地址。
协议与主机名变体
- http 与 https 同时可访问。
- 带 www 与不带 www。
- 独立的移动域名与主站域名指向同一套内容。
- 源站域名与 CDN 域名都能直接打开页面。
这一类通常需要在服务器层做统一跳转,否则蜘蛛会分别建立抓取记录。
变体多了会怎样
最直接的影响是抓取份额被摊薄:同一份内容占用了多条 URL 的额度,新页面和深层页面就排在后面。其次,外链和站内信号被拆散到不同地址上,识别主版本的成本变高。日志也会变得难看,同一篇内容在报表里出现多次,容易把真实的抓取分布读错。
判断标准可以很简单:同一段内容,如果有两个以上能被蜘蛛抓到的地址,就要明确选出唯一的正式地址。
怎么收敛
- 选定唯一的规范地址,把协议、主机名、路径大小写、是否结尾斜杠都写进站点规则。
- 在服务器层用 301 把其它变体永久跳到规范地址,避免用 302 或 JS 跳转代替。
- 源码里的导航、面包屑、正文内链、相关推荐,全部只写规范版本,保持写法一致。
- canonical 指向规范地址,并且与内链、Sitemap 中的写法一致,不要三处各说各话。
- 功能性参数页(筛选、排序、站内搜索)给明确策略:限制抓取或标记 noindex,别让它们进入抓取主路径。
- 追踪参数不要出现在源码链接里,需要统计时在点击时拼接。
- 打印页、分享页、分页之间不要互相链接成环。
回头验证
从服务器日志里按路径聚合,看看同一篇内容是否有多个地址被高频抓取;用站内抓取工具扫一遍全站内链,找出仍指向非规范地址的链接;检查 Sitemap 里是否混进了带参数的 URL;再观察筛选页和站内搜索页,蜘蛛是不是顺着参数一路走了下去。
这类问题不需要一次改完。先把被链接最多、被抓取最频繁的几个变体收敛掉,日志里重复地址的占比通常就会下降。抓取总量不会因此暴涨,但会更集中地花在你希望被发现的页面上。