同一个页面在索引里出现多个地址,是很多站点排查收录时都会碰到的情况。表面上收录数变多了,实际每条 URL 分到的内链、外链和抓取频次都被摊薄,日志里也难看清真实访问量。URL 规范要解决的不是标签怎么写,而是让同一份内容只留一个对外地址。
先分清哪些属于同一页面的变体
常见的变体大致有几类,先列清楚再逐项处理,比一边改一边猜要省事:
- 大小写:/About 与 /about,服务器区分大小写时就是两个资源。
- 末尾斜杠:/news 与 /news/。
- 默认文件名:/news/ 与 /news/index.html。
- 参数顺序:?a=1&b=2 与 ?b=2&a=1。
- 协议与主机名:http 与 https,带 www 与不带 www。
- 编码差异:中文或空格被编码成不同形式。
锚点,也就是 # 后面的部分,一般不算独立地址,不用单独处理。
处理顺序:先定唯一地址,再收回入口
顺序错了,改完还是乱。建议按下面这条链路走:
- 先确定每个页面的首选地址形态,写成规则,例如全小写、目录带斜杠、使用 https、带 www。
- 服务端对其它变体做 301 跳转到首选地址,而不是 302。
- 页面上放 canonical 指向首选地址,作为兜底提示。
- 把站内所有链接改成首选形态,包括导航、面包屑、分页、相关推荐、站内搜索结果的输出。
- 更新 sitemap,只保留首选地址。
规范化的核心是内外一致。站内链接一边写着 /About,一边用 canonical 声明 /about,搜索引擎更可能相信它实际抓到的那个链接。
大小写与斜杠:最容易被忽略的两处
不少 CMS 默认不区分大小写,程序能正常打开,但索引里可能两条都在。排查时可以把若干 URL 手动换成大写、去掉或加上斜杠,看是不是都返回 200。如果都返回 200 且内容一致,就该考虑做跳转收敛。
斜杠也有讲究:目录型地址通常带斜杠,文件型地址不带,规则定好后全站统一。不要用两个地址都返回 200、内容一模一样的方式长期共存,那等于自己制造重复内容。
参数顺序与无意义参数
排序、筛选、会话、追踪这几类参数最容易产生大量变体,可以分三种情况处理:
- 不影响页面内容的参数,尽量在服务端统一顺序或直接忽略。
- 确实会改变内容的参数,比如筛选条件,按独立页面单独评估,明确哪些值得进索引。
- 纯追踪类参数,别一边用 robots.txt 屏蔽,一边指望 canonical 生效,被屏蔽的地址,页面上的提示信息很难被读取到。
一份可以照着做的自查清单
- 抽 20 条代表性 URL,手工改写成大小写、斜杠、参数顺序等变体,看返回什么状态码。
- 检查 sitemap 里有没有混用两种形态。
- 翻访问日志,看出现频率最高的变体是哪一个,往往就是内链或外链写错的地方。
- 核对 canonical 是否与首选形态完全一致,包括协议、主机名、斜杠。
- 能改的外链改掉,改不了的靠 301 接住。
做完之后怎么验证
验证周期按周看比较合适。索引报告里的重复网页数量、日志里 301 的命中次数、搜索引擎实际展示的地址,这三项是主要观察点。变体合并后,收录总数短期下降是正常现象,不代表页面丢了;要等搜索引擎重新抓取并更新索引记录,这个过程需要时间。
URL 规范属于基础工程,做扎实了,后面排查收录、分析日志、看索引报告都会清爽很多,但指望靠它直接换来收录增长并不现实。