同一篇文章,可能同时存在 http 和 https 两个入口,带 www 和不带 www 两种写法,结尾带斜杠和不带斜杠两种形式,再加上大小写差异、index.html、跟踪参数,最终变成十几个可访问地址。对用户来说差别不大,对搜索引擎蜘蛛来说,这就是十几个各自独立的页面。抓取预算被摊薄,权重信号被拆散,页面之间还会互相竞争。
URL 规范化要解决的就是这件事:让同一份内容对外只保留一个主地址,其余地址明确地指向它。
一、先找出站里到底有几个入口
不要凭记忆判断。用蜘蛛抓取日志和站点地图交叉比对,通常能看出问题。
- 协议层:http 与 https 是否都能打开同一页面。
- 主机名层:带 www 与不带 www 是否都能访问。
- 路径层:/about 与 /about/ 是否返回相同内容。
- 文件层:/index.html、/default.html 这类默认文件能否直接打开。
- 大小写层:/News/ 与 /news/ 是否被当成两个地址。
- 参数层:?ref=xxx、?utm_source=xxx 之类是否返回与主地址完全相同的页面。
测试方法很简单:逐个访问,看返回状态码和页面内容。返回 200 且内容相同,就是重复入口;返回 301 指向主地址,说明已经处理过。
二、选定唯一主地址,其余用 301 收敛
主地址怎么选没有绝对标准,但要遵守几条:
- 协议统一到 HTTPS(在维护成本允许的前提下)。
- 主机名统一带 www 或不带 www,选定后长期不要改。
- 目录型页面统一带结尾斜杠,文件型页面不带。
- 路径全部小写,不要混用大小写。
- 能写成静态路径的,尽量不要用参数表达。
其余地址用 301 永久重定向指向主地址,不要用 302。302 是临时跳转,蜘蛛有可能仍把原地址留在索引里。
重定向要一步到位。A 跳 B、B 再跳 C 的链条,每一跳都会损耗一点抓取效率,链条长了蜘蛛可能中途放弃。
三、canonical 标签怎么用才不出错
canonical 是写在页面 head 里的声明,用来告诉蜘蛛这个页面属于哪个主地址。它适合处理那些无法用 301 收敛的情况,比如带参数的页面、跨域转载、分页的第一页。
常见误区
- canonical 指向的地址本身就重定向到别处,等于绕了一圈。
- 列表页上所有条目的 canonical 都写成列表页自己,这是明确的错误用法。
- 分页的第二页 canonical 回第一页,等于告诉蜘蛛不必收录第二页的内容。
- 一个页面出现多个 canonical 标签,蜘蛛通常只认第一个。
- canonical 与 301 指向不同地址,两个信号互相矛盾,蜘蛛只能自己猜。
一个实用原则:canonical 指向的地址,必须能直接返回 200,而且最好与内链、站点地图使用的地址完全一致。
四、内链、站点地图、结构化数据要统一口径
地址收敛之后,站内所有引用也要跟着改。否则蜘蛛从首页爬到的一直是旧地址,每一层都触发一次 301,抓取效率会明显下降。
- 导航和正文内链统一使用主地址,斜杠写法保持一致。
- 站点地图里只列主地址,不要列出会被重定向的旧地址。
- 结构化数据里的 url、@id、breadcrumb 也使用主地址。
- 分享按钮、二维码、外链投放的素材同样使用主地址,避免从站外又带回一堆变体。
五、改完之后怎么验证
- 随机挑 20 到 30 个旧地址逐个访问,确认返回 301 且落点正确。
- 用浏览器开发者工具查看响应头,确认 Location 指向主地址。
- 在站内搜一遍旧写法,把残留的内链改掉。
- 观察一段时间的抓取日志,看旧地址访问量是否逐步下降、主地址是否上升。
- 如果旧地址是外链很多的历史页面,重定向要长期保留,不要直接删掉。
整个过程不必一次做完。先处理流量最大、外链最多的那批页面,收益最明显;剩下的可以按栏目排期慢慢收敛。
需要提醒的是,地址收敛只是把分散的信号集中起来,它不会让一个本来没有内容的页面变得有价值。结构干净、地址统一,本质上是让蜘蛛把抓取预算花在真正值得看的内容上,而不是在十几个副本之间来回确认。