用中文标题生成 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 时,至少做到以下几点:
- 全站统一使用 UTF-8 百分号编码,不要混用 GBK;
- 站内链接、sitemap、canonical、分页和 hreflang 里的 URL 写法保持一致;
- 服务器对非规范形式做 301 跳转,例如把未编码或大小写不一致的版本跳到规范编码版本;
- 查询参数里的空格统一用 %20,不要同时出现 +;
- 不要用中文 URL 承载关键目录结构,避免以后改版时大面积失效。
自查时看什么
- 从站内复制几条中文 URL,粘贴到文本编辑器里,看编码是否统一;
- 在服务器日志或抓取日志里搜索同一路径的不同编码形式;
- 检查 sitemap 和 canonical 输出的是不是编码后的规范 URL;
- 用站点搜索或索引查询,看看同一内容是否对应多个 URL。
URL 编码本身不复杂,难的是全站一致。只要不同入口输出不同形式,搜索引擎就会按不同 URL 处理。把编码、大小写和参数写法统一,减少不必要的重复,抓取和收录才会更稳定。