做站点运营时,常会遇到这样的情况:一个内容页,索引里却出现了好几个地址形式——有的是末尾多了斜杠,有的是把路径里的大写字母换成了小写,还有的把 /a/ 和 /a/index.html 都收了一遍。它们指向的其实是同一份内容,但搜索引擎会把它们当成不同的 URL 来处理,权重被拆散,索引量也显得虚高。
这类问题的处理,关键不在于“改得多快”,而在于先把变体分类,再按顺序收口。
一、先判断这些地址是不是同一个资源
常见的 URL 变体大致有这几类:
- 协议与主机名:http 与 https、带 www 与不带 www。
- 大小写差异:/Article/1 与 /article/1,取决于服务器是否区分大小写。
- 末尾斜杠:/topic 与 /topic/,两种写法都可能返回 200。
- 默认文件名:/topic/ 与 /topic/index.html、/topic/default.aspx 之类。
- 路径细节:重复斜杠、路径中的 /./、端口号显式写出、编码形式不同(如中文路径的编码写法)。
判断标准不是“长得像不像”,而是服务端对每一种写法返回了什么。如果变体已经 301 到主地址,问题基本已经解决;如果变体照样返回 200 且页面内容一致,那才是真正的重复入口。
二、按这个顺序核对
- 先定一个规范形式:域名用哪个、协议用哪个、路径是否带末尾斜杠、大小写风格怎么统一。这一步要先定下来,否则后面每改一处都在摇摆。
- 看日志里实际被访问和被抓取的形式:哪些变体真的有人在爬、有内链指向。只存在于理论中的变体,优先级可以放低。
- 抽样看索引里出现的形式:不用追求一次看全,先找出重复最集中的那几类。
- 确认服务端响应:对每个变体直接访问,记录状态码。是 200、301 还是 404,决定了后面能不能用最省事的方式处理。
- 统一入口来源:内链、导航、面包屑、sitemap、分享出去的链接、以及外部合作方给的链接,都要跟着改。只改服务端不改入口,变体会被重新带进来。
三、几种处理手段的边界
301 优先于 canonical
如果服务端能把变体 301 到规范地址,这是最干净的做法。canonical 是一个提示信号,不是替代品——服务端照旧返回 200、内链照旧混着写,只靠 canonical 兜底,效果往往不稳定。
内链和 sitemap 要一起收
站内链接是最容易被忽略的一环。导航、相关推荐、分页、旧文章里的引用,如果还写着变体形式,搜索引擎会认为这个变体仍然值得抓。sitemap 里只保留规范地址,能减少一部分无效抓取。
谨慎用 robots 屏蔽
用 robots.txt 屏蔽变体路径,看起来省事,但被屏蔽的地址仍可能因为外部链接而出现在索引里,甚至只显示一个空标题。相比之下,301 是更明确的选择。
四、容易踩的几个坑
- 一次同时改大小写、斜杠和默认文件名,出问题后很难定位是哪一处引起的。
- 只改了一部分模板的内链,另一部分模板还在生成旧写法。
- 把“site 查询里看不到变体”当作已经处理完,但外部链接和日志里仍有访问。
- 对本来就不返回 200 的变体也做 301,实际上服务端已经是 404,属于多此一举。
处理 URL 变体,本质是把“同一个资源”收敛成一个入口。先看服务端返回什么,再决定用 301 还是靠内链统一,最后才是 canonical 之类的辅助信号。一次收一个维度,比一次性全改更容易回滚和验证。
收口之后,隔一段时间再看日志和索引里的地址形式,确认变体访问量在下降、规范地址的抓取在集中。如果没有变化,多半是某一层入口还没改到,回到第二步重新核对即可。