本文约 3,842 字,预计阅读 10 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:上线三个月才发现 URL 全是百分号
新站赶工时最容易埋下的坑就是 URL。中文标题直接发布,生成的链接是 https://example.com/%e4%ba%a7%e5%93%81%e4%b8%ad%e5%bf%83/,复制出去是一长串乱码,微信里发出来会被截断,放到 PPT 里极其难看。更糟的是栏目名用了拼音缩写 cpzx,半年后连自己都记不清这是”产品中心”还是”测评中心”。
URL 是站点里最难改的东西之一。改一次意味着所有旧链接要做 301,外链、收藏、已收录的页面全部要重新传递权重,期间流量必然波动。所以 URL 规划要在建站的第一天就定好,而不是等到内容铺开了再回头改。本文讲清栏目命名的三条原则、拼音与英文 slug 的取舍、以及万一要改时的正确姿势。
原理分析:slug 影响的是可读性、识别度与稳定性
slug(URL 里的那一段)有三个作用。一是可读性:用户从搜索结果、聊天记录里看到链接时,能不能一眼判断这是哪个页面。二是关键词信号:URL 里包含英文关键词对搜索引擎有微弱的正向作用,包含中文百分号编码则基本无作用(虽然现在搜索引擎能解码,但可读性差)。三是稳定性:slug 一旦发布就不该再动。
拼音和英文的取舍,本质上是在”中文用户可读性”和”国际通用性/关键词信号”之间选。判断标准是你的受众与内容语言:
| 场景 | 建议 slug 类型 | 示例 | 理由 |
|---|---|---|---|
| 面向国内的中文站 | 全拼(不缩写) | /chanpin/ |
中文用户能读,避免缩写歧义 |
| 外贸站 / 英文站 | 英文单词 | /products/ |
关键词信号 + 国际通用 |
| 品牌词、专有名词 | 保留原名 | /woocommerce/ |
拼音反而更难认 |
| 中英混排的双语站 | 统一英文 | /blog/ |
多语言插件按语言切换更省事 |
| 栏目层级 | 越短越好 | /wp/ 优于 /wordpress-jianzhan/ |
短链接更好传播 |
三个必须避免的做法:用拼音首字母缩写(cpzx、jswz)、用中文(变成百分号)、以及用无意义的 ID(/?p=123 或 /post/12345)。其中拼音首字母缩写是最差的——既不可读也不含关键词,还不如直接用英文。
固定链接结构方面,WordPress 后台「设置 → 固定链接」里常用的是”文章名”(/%postname%/)和”分类 + 文章名”(/%category%/%postname%/)。前者更短、更稳定(文章换分类时 URL 不变),推荐默认用它;层级较深的站点才考虑带分类,但要注意换分类会导致 URL 变化。
保姆级实操
- 开工前先把全站 slug 表定出来
在写第一篇内容之前,把首页、所有栏目页、重要单页(关于我们、联系方式、服务)的 slug 一次性列成表:中文名 → slug → 层级。这张表和 网站定位与关键词矩阵搭建方法 的输出直接对应,每个栏目一个 slug。
- 设置固定链接结构
后台「设置 → 固定链接」选择”文章名”,保存后 WordPress 会自动写入 .htaccess(Apache)或提示你手动配置(Nginx)。不要选”朴素”(?p=123),也不要选带日期的结构(/2026/10/10/postname/)——日期结构会让内容显得过时,且改日期会变 URL。
- 解决中文标题的 slug 问题
WordPress 生成 slug 时会调用 sanitize_title,中文字符被保留后转成百分号编码。有两种处理方式:一是发布前手动填写英文/拼音 slug(最可控);二是挂过滤器自动把中文转拼音。下面的过滤器用 WordPress 自带的 remove_accents() 做兜底,并在转换失败时回退到”文章 ID”,避免出现空 slug 导致的 /%e4%ba%a7%e5%93%81/:
<?php
/**
* 生成 slug 时:优先保留作者手填的;否则尝试把中文转成可读的拼音;
* 都失败时用文章 ID 兜底,避免产生百分号编码的长 URL。
*/
add_filter( 'sanitize_title', function ( $title, $raw_title = '', $context = 'save' ) {
if ( 'save' !== $context ) {
return $title;
}
// 已经是可读的英文/数字/连字符,直接放行
if ( preg_match( '/^[a-z0-9][a-z0-9\-]*$/i', $title ) ) {
return sanitize_title_with_dashes( $title );
}
// 尝试用 remove_accents 处理带音调的字符(如 é、ü)
$converted = sanitize_title_with_dashes( remove_accents( $raw_title ) );
// 含中文时 remove_accents 无能为力,交给专门的拼音转换层
if ( preg_match( '/[\x{4e00}-\x{9fa5}]/u', $converted ) ) {
// 站点若已安装拼音转换类插件,可在此调用其函数;
// 未安装时回退为拼音插件处理后的结果或文章 ID
$converted = apply_filters( 'mymf_pinyin_slug', '', $raw_title );
}
if ( empty( $converted ) ) {
$converted = 'post-' . wp_generate_password( 6, false );
}
return $converted;
}, 10, 3 );
// 限制 slug 长度,过长的 URL 在微信里会被截断
add_filter( 'wp_unique_post_slug', function ( $slug ) {
return function_exists( 'mb_substr' ) ? mb_substr( $slug, 0, 60 ) : substr( $slug, 0, 60 );
} );
- 栏目 slug 单独在后台确认
分类目录的 slug 在「文章 → 分类目录 → 快速编辑」里改,改之前先看这个分类下有多少篇文章——WordPress 改分类 slug 会自动更新子文章的 URL(在带分类的固定链接结构下),但已经收录的旧地址需要 301,处理办法见 网站改版时的 301 重定向总表制作。
- 统一大小写与分隔符
全站 slug 一律小写、一律用连字符 -、不使用下划线、不以数字结尾。混用大小写会导致 /Products/ 和 /products/ 两个地址都能访问,形成重复内容。
- 上线前做一次全站 URL 体检
用 wp post list 导出全部文章链接,肉眼扫一遍有没有百分号、有没有超过 60 字符的、有没有重名但带 -2 后缀的:
# 导出全部已发布文章的 ID、别名与链接,检查是否有中文编码或异常后缀
wp post list --post_type=post --post_status=publish \
--fields=ID,post_name --format=csv > slugs.csv
# 直接筛出含百分号编码(即中文 slug)的文章
grep -n "%" slugs.csv
常见踩坑
- 用拼音首字母缩写当 slug:
cpzx、xwzx这类缩写三个月后没人记得住,也不含关键词信号。 - 案例:某站点上线时把栏目 slug 定成了缩写,一年后想改回全拼,改完没做 301,结果该栏目下 60 多篇已收录页面的权重全部丢失,自然流量跌了近一半,花了四个月才恢复。改 slug 不是改一个字段,是一次小型改版。
- 固定链接设成带日期的结构:旧文章看起来永远”过期”,且改发布时间会变链接。
- 中文 slug 直接发布:URL 变成一长串百分号,分享出去难看,复制到某些系统里还会被二次编码彻底失效。
- slug 里塞满关键词:
/wordpress-jianzhan-jiaocheng-wan-zheng-zhi-nan/这种长串反而降低点击意愿,控制在 3–5 个词以内。 - 大小写混用:产生两个可访问地址,形成重复内容。
- 改了 slug 却没改内链:站内其他文章仍链向旧地址,用户点进去是 404。
总结
URL 规划的判断标准是三条:中文用户能不能读出这个 slug 大概是什么内容、slug 里是否包含该栏目的核心英文词、以及你有没有信心三年内不改它。三条都过关,这个 URL 才算定下来。技术上的最小配置是:固定链接选”文章名”、全站小写加连字符、中文标题要么手填 slug 要么接一层拼音转换。改 slug 属于改版级别的操作,务必配合 网站改版时的 301 重定向总表制作 做完整映射。
