做收录检查时,常会遇到一种情况:某个页面明明只有一份内容,但用不同写法访问都能打开,搜索索引里也留下了不止一条记录。问题往往不在内容,而在 URL 本身——同一份内容对应了多个地址写法,蜘蛛把它们当成不同页面分别处理了。
同一页面的多种写法是怎么来的
绝大多数变体不是有人故意造的,而是技术细节自然产生的:
- 协议与主机名:http 与 https、带 www 与不带 www,如果两边都能打开又没有跳转,就等于两套地址。
- 结尾斜杠:/about 和 /about/ 在部分服务器上返回同一页面,在另一部分服务器上却是两个不同结果。
- 字母大小写:/Product 与 /product,在区分大小写的环境下常被当作两个路径。
- 默认文件名:/category/ 与 /category/index.html。
- 中文与特殊字符编码:浏览器地址栏显示为中文的路径,实际传输时是百分号编码,两种写法有可能都被记录。
- 参数顺序与无意义参数:?a=1&b=2 与 ?b=2&a=1,或分享链接里自带的一串跟踪参数。
抓取和收录不是一回事,变体会让两者都被放大
被抓取不等于会被收录,蜘蛛抓到页面后还要判断内容质量、是否重复、以哪个地址为准。但一个页面如果存在四个可访问地址,蜘蛛就有机会抓四次、留下多条记录,把本该集中在一处的信号分散开。收录层面的表现是:索引里出现多份相似内容,规范地址可能不是你希望的那一个;抓取层面的表现是,蜘蛛的时间被重复路径占掉一部分。
先盘点,再决定保留哪个地址
- 从服务器日志里按路径去重,找出返回 200 且内容相同的地址组。
- 对比 sitemap、内部链接、外链中实际使用的写法是否一致。
- 为每组确定保留地址,优先选已经有外链、相对稳定的那个,不要频繁更换。
- 其余写法用 301 永久跳转到保留地址,而不是让两边都保持可访问。
规范信号要统一,而不是各说各话
服务器层
用 301 把 http 到 https、非 www 到 www、错误大小写到正确形式、index.html 到目录地址这类变体收口。跳转链尽量只有一跳,避免 A 跳到 B 再跳到 C。
页面层
canonical 写保留地址的绝对 URL,并且要和内链、sitemap 里的写法完全相同。如果页面 canonical 指向 A,而导航链接全指向 B,蜘蛛收到的信号就是矛盾的。
其他入口
分享出去的历史链接、合作方页面上的链接、邮件模板里的地址,也会被蜘蛛沿路发现。改版时能同步更新的就更新,不能更新的靠 301 兜底。
几个容易忽略的细节
- 大小写问题在本地开发环境常被掩盖,上线到区分大小写的服务器才暴露出来。
- 中文路径建议统一以百分号编码写入 sitemap,避免不同工具解析出两种写法。
- 分页、筛选这类确实需要多个地址的场景,要么把规范指向主列表页,要么控制抓取,按页面性质选择。
- 调整规范设置后,索引里的旧记录不会立刻消失,需要时间重新评估。
URL 变体本身不算错误,把它当成多个页面分别维护才是问题。规范化的目标是让同一份内容在外面只有一个稳定的代表地址。
落地时可以先挑访问量较高的一小段路径做实验,观察日志里的抓取路径是否收敛、索引中的重复记录是否减少,再决定要不要推广到全站。