很多站点的问题不在内容,而在地址本身。同一个页面,用户能打开,蜘蛛也能打开,但它可能以两三种写法被记录下来:带 www 的和不带 www 的、带尾斜杠的和不带的、大写和小写混用的。对搜索引擎来说,这些通常是不同的 URL,于是同一份内容被拆到多个地址上,抓取被分薄,外链权重被分散,日志里也看不出到底哪条才是主线。这里说的不是改版迁移,而是日常就该固定下来的 URL 形式。
同一页面为什么会裂出多种写法
URL 的路径部分在多数服务器和 CDN 上区分大小写,域名部分不区分。也就是说 /News/2024 和 /news/2024 在服务器眼里是两个目录。再加上末尾斜杠、默认首页文件名、多余的跟踪参数,一个页面很容易裂成好几条。
- 大小写混用:程序生成时用大写,手工写内链时用小写。
- 尾斜杠不一致:栏目页有的带斜杠有的不带,服务器没有做统一跳转。
- 默认文件暴露:/about/ 和 /about/index.html 同时可访问。
- 参数残留:?from=xxx、?utm_source= 这类参数被蜘蛛抓到并收录。
- 未编码字符:地址里出现原始中文或空格,浏览器能转义,程序拼接时却容易出错。
自查从哪几步入手
- 先定规则:全站统一小写,路径用连字符而不是下划线,目录层级尽量不超过三层。
- 再查现状:抽 20 到 30 个主要栏目和内容页,把带 www 与不带、带斜杠与不带、大小写不同几种写法各打开一次。
- 看返回码:每一种写法都应是 200 或 301,不该出现两个 200 并存,也不该出现多级 302 链式跳转。
- 翻日志:在访问日志里找同一路径的不同写法,统计出现频率,判断蜘蛛更常走哪一种。
- 核对内链:站内链接、面包屑、sitemap、canonical 里的写法是否与定下的规则一致。
统一形式怎么选
建议以“全小写、无尾斜杠、不带默认文件名、不带多余参数”作为主形式,除非你的 CMS 已经固定了另一种。确定之后,把其他写法都用 301 永久跳转到主形式,而不是用 302,也不要靠前端 JS 跳。跳转只做一层,不要 A 跳到 B、B 再跳到 C。
canonical 与跳转的分工
301 是告诉对方“这个地址已经搬走了”,canonical 是“内容以这条为准”。两者可以一起用,但不能互相替代。服务器能稳定做 301 时,就让 301 承担主要工作;canonical 更多用于参数页、打印页这类无法彻底跳转的场景。
不要为了“看起来统一”批量改线上地址。已经在被引用的地址尽量保留并做跳转,新产生的地址按规则生成,这样代价最小。
容易被忽略的几个细节
- 大小写问题会被 CDN 缓存放大:一台回源返回了大写版本,边缘节点就把它缓存出去。
- 尾斜杠跳转容易写成循环:/a 跳 /a/,/a/ 又被规则跳回 /a,需要按实际配置验证。
- URL 含中文时,程序输出应做编码,并保证编码结果一致,避免出现两种百分号写法。
- URL 长度控制在合理范围内,过长的拼音堆叠既难读,也容易在复制分享时被截断。
把规则写进流程
URL 规范不是一次性清理,而是发布流程的一部分。在内容发布检查清单里加一条“地址是否符合规范”,在模板层统一生成路径,别让编辑手填。规则固定下来之后,日志更好读,内链更好维护,抓取也不会被同一页面的不同写法反复打扰。