中文 URL 与 SEO 插画:Q 版男孩拿着放大镜仔细查看浏览器地址栏中的链接

网站 URL 用中文对 SEO 有影响吗?中文、拼音、英文 slug 怎么选

中文 URL 不会被搜索引擎惩罚,但复制分享时会变成一长串 %E4 编码,还容易在 CDN、重定向和统计环节出问题。本文从编码原理、Google 与百度的态度、实际坑点讲起,对比中文、拼音、英文和数字 ID 四种 slug,并给出不同场景的选择和迁移建议。

做中文网站,迟早要面对一个问题:文章链接里的 slug 用中文、拼音还是英文?中文看起来最直观,可一复制出来就变成一长串 %E4%B8%AD...;英文简洁,但中文读者未必看得懂;拼音介于两者之间,又常被吐槽"不伦不类"。

这个问题我在自己的博客上就有现成的例子:这个站早年用 WordPress 时留下了一批中文 slug,存储下来就是 /posts/%e4%bb%8a%e5%b9%b4%e7%9a%84... 这样的编码形式;后来的文章有的用拼音(如 jin-nian-de-jian-fei-mu-biao-zhong-yu-da-cheng-le),最近的则基本用英文(如 how-to-resolve-git-pull-conflict)。三种风格同时存在,正好可以拿来对比。

这篇就从原理、搜索引擎的态度、实际使用中的坑,到不同场景下的选择建议,把这件事讲清楚。

中文 URL 是怎么工作的

URL 本身只认 ASCII

按照 URI 标准(RFC 3986),URL 里只能出现有限的 ASCII 字符。中文要放进 URL,需要先转成 UTF-8 字节,再对每个字节做百分号编码(percent-encoding)。比如:

中文网址  →  %E4%B8%AD%E6%96%87%E7%BD%91%E5%9D%80

一个汉字在 UTF-8 下占 3 个字节,编码后就是 9 个字符。一个 10 个字的中文标题,放进 URL 就有 90 个字符。

后来的 IRI 标准(RFC 3987)允许在"展示层"直接使用 Unicode 字符,浏览器地址栏里看到的中文就是 IRI 形式,但真正在网络上传输时,仍然会转换回百分号编码的 URL。

域名和路径是两回事

中文域名(IDN,国际化域名)用的是另一套机制:Punycode。比如 中文.com 实际解析的是:

中文.com  →  xn--fiq228c.com

而路径部分(域名后面的 /posts/...)用的是上面说的 UTF-8 百分号编码。这篇讨论的主要是路径里的中文,也就是文章 slug。

编码的大小写

百分号编码里的十六进制字母大小写在标准上是等价的,%E4 和 %e4 表示同一个字节,RFC 3986 建议统一用大写。但现实中,WordPress 等系统存储 slug 时常用小写,而浏览器、某些工具生成的是大写。如果程序直接拿字符串做比较(比如缓存键、统计报表、重定向规则),就可能把同一个页面当成两个不同的 URL。

搜索引擎怎么看

Google

Google 的官方立场比较明确:

  • 支持 UTF-8 编码的 URL。在 Google 搜索中心关于 URL 结构的文档里,示例中就包含使用非 ASCII 字符的 URL,建议按需使用 UTF-8 编码。
  • 建议 URL 使用简单、有描述性的词语,并且可以使用目标受众的语言。
  • URL 中的关键词对排名的影响很小。Google 的人员多次公开表示,URL 里的词只是非常轻微的信号,远不如内容本身、标题和链接重要。

所以对 Google 来说,中文 URL 不会被惩罚,英文或拼音 URL 也不会因此占多大便宜。在 Google 的搜索结果里,URL 通常以面包屑形式显示,中文路径一般会解码成可读的中文。

百度

百度在搜索资源平台的相关指南里,一贯建议 URL 简短、易读、结构清晰,避免过长和过多的参数。中文 URL 百度是可以抓取和收录的,但它没有像 Google 那样明确推荐使用中文路径。

从实际情况看,国内很多大站的内容页用的是数字 ID 或拼音,很少使用中文路径。中文 URL 的主要风险在于:编码导致 URL 过长,以及抓取、提交、统计各环节中可能出现的编码不一致问题。我的看法是,以百度为主要流量来源的站点,没有必要冒这个险。

实际使用中的影响

搜索引擎只是一方面,中文 URL 在日常使用中的麻烦反而更多。

分享时变成一长串乱码

在浏览器地址栏里看到的是中文,但一复制,粘贴出来的往往是编码后的形式:

https://example.com/posts/%E5%A6%82%E4%BD%95%E9%80%89%E6%8B%A9slug

发到微信、QQ、邮件、论坛里,就是一长串看不懂的字符,不仅难看,还会让一部分人怀疑这是不是钓鱼链接。有的平台还会在换行时把链接截断,导致点开就是 404。

URL 长度

中文编码后长度膨胀 3 倍以上。虽然现代浏览器和服务器对 URL 长度的限制都很宽松,但过长的 URL 在搜索结果、短信、二维码、日志里都很不友好。

工具和链路中的兼容问题

一个请求从用户到服务器,会经过浏览器、CDN、反向代理、Web 服务器、应用程序,以及各种统计和监控工具。每一个环节都可能对 URL 做编码或解码,常见的问题有:

  • 二次编码:%E4 被再编码一次变成 %25E4,路由匹配不上,直接 404。CMS 迁移、导入导出、拼接重定向地址时特别容易出现。
  • 大小写不一致:同一个页面在统计工具里被拆成两条记录,或者缓存命中率下降。
  • 日志可读性差:服务器日志和报表里全是编码字符串,排查问题时要先解码。
  • 部分老旧工具、插件、爬虫对非 ASCII 路径处理不完善。

服务器配置

Nginx 的 location 匹配和 Apache 的 mod_rewrite 规则,一般是针对解码后的路径进行匹配的;而 Nginx 的 $request_uri 变量保留的是原始编码形式。写涉及中文路径的重写或跳转规则时,要清楚自己匹配的是哪一种形式,否则规则看起来没问题,实际就是不生效。

CMS 自动生成中文 slug

WordPress 默认会根据文章标题生成 slug,标题是中文时,slug 就是中文(数据库里存的是小写的百分号编码)。很多人从来没注意过这一点,写了几年才发现全站都是中文 URL。可以在发布前手动改 slug,或者用插件自动转成拼音或英文。

可读性和点击率

公平地说,中文 URL 也有优点:在浏览器地址栏、Google 面包屑中显示为中文时,中文读者一眼就能看懂页面讲什么,对点击率可能有一些正面作用。只是这个优势在复制分享的场景下就消失了。

四种 slug 风格对比

  • 中文:对中文读者最直观,展示时可读性最好;缺点是复制后变成编码乱码、长度膨胀、各环节容易出现编码问题。
  • 拼音:纯 ASCII,没有编码问题,中文用户大致能读出来;缺点是长了难以辨认,同音字多,国际用户看不懂,看起来不太专业。
  • 英文:纯 ASCII,简短,国际通用,技术类内容尤其合适;缺点是需要为每篇文章想一个英文 slug,部分中文读者看不懂。
  • 数字 ID:最短、永不冲突,标题修改也不影响 URL;缺点是 URL 里没有任何描述信息,对用户和搜索引擎都不够直观。

还可以组合使用,比如 /posts/123/lxc-vs-docker,既有稳定的 ID,又有可读的描述。

不同场景下的建议

只面向中文用户的新站

我倾向于用简短的英文或拼音 slug。如果你非常在意中文可读性,用中文也不是不行,但要控制长度,并且确认 CDN、统计、重定向等环节都正确处理编码。以百度为主要流量来源的,建议避开中文路径。

面向国际用户或中英双语

用英文 slug。多语言站点可以各语言用各自语言的 slug,但要配合 hreflang 等标记做好语言版本关联。

已有中文 URL 的老站

不要为了"优化"而批量修改已经被收录、有排名的 URL。URL 中的关键词对排名影响很小,而大规模改 URL 带来的风险(收录波动、外链失效、社交分享失效)是实实在在的。新文章可以用新的规则,老文章保持原样,这个博客目前也是不同时期的 slug 风格并存。

如果一定要修改 URL

确实有必要修改时(比如原来的 URL 有编码问题、过长,或者整站改版),务必做好以下几点:

  1. 每个旧 URL 都做 301 永久重定向到新 URL,一一对应,不要全部跳到首页。
  2. 更新站内所有内链,不要依赖重定向来跳转。
  3. 更新 sitemap,只包含新 URL。
  4. 确认新页面的 canonical 指向自己的新 URL。
  5. 在 Google Search Console 和百度搜索资源平台提交新的 sitemap,观察抓取和收录情况。
  6. 重定向规则长期保留,不要过几个月就删掉。

Nginx 上一个简单的重定向示例:

# 旧的中文路径(Nginx 匹配的是解码后的路径)
location = /posts/中文网址 {
    return 301 /posts/chinese-url;
}

数量多的话,建议用 map 指令集中维护新旧地址的对应关系,或者在应用层实现重定向表。

总结

  • 中文 URL 在技术上完全可行,传输时会被转成 UTF-8 百分号编码;中文域名则用 Punycode。
  • Google 支持 UTF-8 URL,URL 中的词对排名影响很小;百度建议 URL 简短易读,对中文路径没有特别推荐。
  • 中文 URL 的主要问题不在 SEO,而在分享时变成乱码、长度膨胀,以及各环节的编码兼容问题。
  • 新站建议使用简短的英文或拼音 slug,国际化站点使用英文。
  • 老站已有排名的中文 URL 不要轻易批量修改;确实要改,一定做好 301、内链、sitemap 和 canonical。

URL 是网站的"门牌号",一旦对外公开就应该尽量保持稳定。比起纠结用什么文字,更重要的是从一开始就定好规则并坚持下去。

暂无评论