同一篇文章,在服务器上只是一个文件,但在 URL 层面往往有好几种写法。首页可能是 example.com、example.com/、example.com/index.html;栏目页可能是 /news 和 /news/;如果站内还混用了大小写,/News 和 /news 在 Linux 服务器上就是两个不同的地址。
这些写法在浏览器里看着都正常,访客也不会察觉。但对站点运营来说,它们会把同一份内容拆成多个地址:日志分散、内链指向不一、外部链接各写各的,最后谁也说不清哪个才是这个页面的「正主」。
先搞清楚地址是怎么分叉的
常见的分叉点其实不多,盘点一遍就能对上号:
- 大小写:Windows 服务器不区分,Linux 服务器区分。迁移过主机的站点尤其容易出问题。
- 尾斜杠:目录型路径(如 /news)加不加斜杠,服务器可能返回两个都通的结果。
- 默认文件名:/news/ 与 /news/index.html 指向同一份内容。
- 协议与域名:http 与 https、带 www 与不带 www,如果没做强制跳转,就是四套地址。
- 参数变体:追踪参数、排序参数、会话 ID 拼在地址后面,同一个页面能生成无数个 URL。
怎么盘:三步走
第一步,翻日志
挑几篇有代表性的内容页和栏目页,在服务器日志里搜关键词,看同一个页面被访问时出现过几种路径写法。这一步不需要工具,靠搜索就行,但结果最真实——日志里怎么写,说明访客和蜘蛛实际就是这么进来的。
第二步,手工试
拿一个地址,依次试它的各种变体:全小写、首字母大写、带斜杠、不带斜杠、加 index 后缀。看服务器分别返回什么状态码。如果几个变体都是 200,说明这些地址在搜索引擎眼里确实是并存的多份。
第三步,对内部出口
站内链、导航、面包屑、Sitemap、canonical 标签、分享按钮,这几处输出的地址是否一致。很多站点的分叉就是从这些小地方来的:导航写不带斜杠,Sitemap 写带斜杠,分享按钮又多加一个参数。
规则怎么定
没有绝对正确的写法,只有统一不统一的写法。定规则时考虑三点:服务器环境、历史外链情况、改动成本。
- 全站统一小写,这是最省事的选择,Linux 环境下也最稳。
- 目录型路径统一带尾斜杠,文件型路径(如 .html、.jpg)不带。规则简单,好记好执行。
- 默认文件统一收口,/news/index.html 只保留一个入口,其余全部跳转到选定版本。
- 协议与域名只留一套,其余 301 过去,并让内链全部使用最终版本。
修复的顺序
不要一上来就大批量加跳转,容易把自己转晕。建议按这个顺序:
- 先改内部出口:导航、正文内链、Sitemap、canonical,全部改成统一的最终地址。
- 再对非目标版本加 301,跳到目标版本。
- 观察一到两周日志,看旧的写法是否还有稳定流量进来,判断这条跳转要不要长期保留。
- 如果某个变体还有大量外链指向,把跳转保留着,不要急着撤。
改动期间不要叠加太多变量。同一时间既改 URL 规则又改模板结构,出问题时很难判断是哪一步造成的。
几个容易踩的坑
- 用 302 长期顶着。临时跳转不是用来做地址收敛的,时间长了搜索引擎可能仍然按原地址处理。
- 跳转链套了好几层。A 跳 B,B 跳 C,每次访问都要多走一跳,不如直接 A 跳 C。
- 靠 canonical 代替 301。canonical 是给搜索引擎的提示信号,跳转是给所有访问者的确定性动作,两者职责不同,能跳就跳。
- 参数变体当成普通重复地址处理。带参数的页面往往有自己的用途(筛选、排序),处理方式要单独定,不要一刀切全部 301 回主页面。
- 改完后没有回头验证。至少隔一周再抽查一遍,确认内链、Sitemap、跳转三者输出的是同一个地址。
小结
URL 规范这件事,做的时候枯燥,收益也不像改标题那样立竿见影,但它决定了站点在日志、内链和外部引用里是不是一个整齐的形象。花半天时间把地址统一到一套写法上,后面每次看日志、做外链、排查抓取异常,都会省下不少解释成本。