有些站点用的是中文目录名,或者把标题里的空格直接搬进了 URL。这类地址在浏览器里看着正常,但在不同位置被写成不同形式:有的是原样中文,有的是百分号编码;空格有时是 %20,有时是加号。搜索引擎看到的是几条不同的 URL,索引里就可能留下多个入口。
先确认:是同一个页面,还是真的两个页面
别急着处理,先把状况分清楚。
- 两条 URL 返回的状态码是否都是 200,正文内容是否一致。
- 两个地址是否都被抓取过,日志里出现的时间和频次如何。
- 在索引里查一下,两条是否都在,占的是不是同一段内容。
- 页面上的 canonical 指向哪个地址,这个地址和实际使用的内链是否一致。
如果其中一条返回 301 或 404,那属于另一类问题;这里讨论的是两条都能正常打开、内容基本相同的情况。
编码写法不一致通常从哪来
- 编辑器或 CMS 自动转义,把中文写成百分号编码,而导航里仍是原样中文。
- 复制分享链接时,空格被替换成加号。
- 旧系统按一种编码生成地址,新系统按另一种编码生成,两套并存。
- 第三方统计、推广或分享参数在跳转时对地址重新编码。
- 内链一部分人工填写,一部分程序生成,两种写法没有对齐。
统一顺序
- 先定一个规范写法。比较稳妥的做法是:统一小写、使用 UTF-8 百分号编码、避免空格、不带多余参数。如果中文路径在分享和统计里经常出问题,长期看更推荐换成英文或拼音 slug。
- 确认服务器对非规范写法的响应。有的服务器把未编码的中文直接 200 返回,有的直接 404。两种情况下处理方式不同,先测清楚再动手。
- 统一站内所有入口。导航、面包屑、列表页、相关推荐、站点地图、结构化数据里的 URL 都指向规范写法。这一步往往比提交移除更管用,因为内链决定了爬虫反复走哪条路。
- 对非规范写法做收敛。能做 301 的就 301 到规范地址;做不了的,用 canonical 指向规范地址,同时停止在站内链接非规范版本。
- 确定后一段时间内不要再改。索引替换需要爬虫重新抓取并处理,频繁更换写法反而会让两个地址长期并存。
容易踩的坑
- 只调了 canonical,内链却还在用旧写法,收敛会很慢。
- 中文路径被重复编码,变成以 %25 开头的地址,页面实际打不开,但爬虫仍会当作一个独立 URL 记录。
- 规范地址和分享参数混在一起,参数版本又变成新的收录入口。
- 站点地图里同时列出两种写法,等于主动告诉爬虫两个地址都值得走。
编码问题本身不复杂,麻烦的是生成链接的地方分散在多处。先把所有产出 URL 的位置列出来,再统一,比反复提交要省事。
统一之后看什么
观察日志里规范地址的抓取频次是否上升、非规范地址是否逐渐减少,再隔一段时间看索引里保留的是哪一条。这个过程依赖爬虫自己的抓取安排,不会立刻见效,也不保证一定按预期收敛。如果长期两个地址都还在,可以回头查一查是否有外部链接仍指向非规范版本,或者页面上还残留着旧写法。