网站收录

中文 URL 的编码问题:同一条链接为什么会被当成几个页面

中文 URL 里的中文、空格和特殊符号会被浏览器编码成百分号形式。如果站内链接、sitemap 和 canonical 用了不同编码,搜索引擎可能把同一条链接当成多个 URL,造成重复抓取、权重分散,甚至抓取失败。本文说明常见编码不一致场景,并给出统一 URL 形式的自查方法。

网站收录

中文 URL 的编码问题:同一条链接为什么会被当成几个页面

用中文标题生成 URL,或者直接在链接里保留空格、括号、& 等符号,看起来可读,实际请求时浏览器会先把它们转成百分号编码。如果站内不同位置用了不一样的编码形式,搜索引擎就可能把同一条链接当成多个 URL,抓取和收录都会受影响。

浏览器显示的和服务器收到的不是一回事

中文、空格、部分特殊符号在 URL 里不能直接传输,需要经过编码。比如“网站收录”按 UTF-8 编码后会变成一长串 %E7%BD%91%E7%AB%99%E6%94%B6%E5%BD%95。浏览器地址栏可能给你显示中文,但网络请求和服务器日志里记录的是编码后的形式。

空格通常编码为 %20,在查询参数里也可能被写成 +。两种写法在部分服务器和程序里会被解析成不同结果,如果站内同时存在,就容易出现同内容多条 URL。

编码不一致会制造重复 URL

常见的不一致有几类:

  • 同一段中文分别按 UTF-8 和 GBK 编码,得到两串完全不同的百分号,服务器都返回 200;
  • 百分号后面的十六进制字母大小写不统一,例如 %e7%bd%91%E7%BD%91
  • 空格一会儿写成 %20,一会儿写成 +,或者干脆不编码;
  • 站内链接用未编码的中文,sitemap 和 canonical 却用编码后的版本。

对搜索引擎来说,这些字符串不同就是不同 URL。爬虫会分别抓取、分别尝试索引,抓取预算被分散,页面权重也被拆开。更麻烦的是,canonical 如果只写了其中一种形式,另外几种被收录后可能长期留在索引里。

抓取失败和收录失败是两件事

编码错误首先影响的是抓取。如果站内链接里的中文没有正确编码,或者参数里的 & 没有转义,服务器可能返回 404 或 400。页面根本抓不到,就谈不上进入索引。

如果服务器对几种编码形式都返回 200,并且页面内容完全相同,搜索引擎会做去重,通常只保留一个版本。但选择哪一个版本,并不完全由你控制。你希望保留的规范 URL 可能被替代,导致后续流量和统计对不上。

抓取日志里出现 200,只说明请求成功,不代表页面一定会进索引。编码混乱带来的往往是“抓到了,但被当成重复页”或“换了一个 URL 收录”。

把 URL 形式统一起来

能改的话,优先用英文或拼音 slug,避免中文、空格和特殊符号。需要保留中文 URL 时,至少做到以下几点:

  1. 全站统一使用 UTF-8 百分号编码,不要混用 GBK;
  2. 站内链接、sitemap、canonical、分页和 hreflang 里的 URL 写法保持一致;
  3. 服务器对非规范形式做 301 跳转,例如把未编码或大小写不一致的版本跳到规范编码版本;
  4. 查询参数里的空格统一用 %20,不要同时出现 +
  5. 不要用中文 URL 承载关键目录结构,避免以后改版时大面积失效。

自查时看什么

  • 从站内复制几条中文 URL,粘贴到文本编辑器里,看编码是否统一;
  • 在服务器日志或抓取日志里搜索同一路径的不同编码形式;
  • 检查 sitemap 和 canonical 输出的是不是编码后的规范 URL;
  • 用站点搜索或索引查询,看看同一内容是否对应多个 URL。

URL 编码本身不复杂,难的是全站一致。只要不同入口输出不同形式,搜索引擎就会按不同 URL 处理。把编码、大小写和参数写法统一,减少不必要的重复,抓取和收录才会更稳定。