WordPress 的每个文章网址都由两部分组成:你在「设置 → 固定链接」里一次性选定的固定链接结构,以及它为每篇文章生成的 slug(别名)。本指南讲清六种固定链接设置该怎么选,逐步说明 WordPress 如何把标题变成 slug(包括中文标题会变成什么样),以及之后修改 slug 或整个结构时怎样做才安全。文中关于 WordPress 行为的说明均来自 WordPress 官方文档与代码参考(见文末参考资料);表格里的 WordPress slug 由逐行移植的 WordPress 自带函数 sanitize_title_with_dashes() 实际跑出,对照列是我们 URL Slug 生成器 的真实输出。
提示
简短回答
- 大多数网站选「文章名」。 它生成
/sample-post/这样简短、可读、不会过时的网址。 - 发布前就定好。 WordPress 官方文档说固定链接是永久网址,不应更改;事后改结构,全站所有文章网址会一起变。
- 重要文章自己写 slug。 WordPress 会直接删掉
&和%,保留所有小词;中文标题则会存成一长串百分号编码。 - 文章改 slug 会自动跳转,页面不会。 已发布文章改了 slug,WordPress 会记住旧 slug 并做 301 跳转;「页面」等层级型内容需要你自己加跳转。
六种固定链接设置
WordPress 支持三类固定链接:朴素(Plain)、美观(Pretty)和「几乎美观」(Almost Pretty)。朴素链接形如 ?p=123,任何服务器都能用,也是新装站点的默认设置,但官方文档自己也说它对用户不友好;美观链接包含文章名等单词;「几乎美观」链接与美观链接相同,只是前面多了 /index.php/。后两者都需要服务器做好相应配置,一般由主机商完成。在 设置 → 固定链接 里有六种常用设置:
| 设置 | 文章 123「Sample Post」的网址示例 | 适合 |
|---|---|---|
| 朴素 | https://example.com/?p=123 | 不适合公开站点:网址说明不了任何内容 |
| 日期和名称型 | https://example.com/2026/10/27/sample-post/ | 日期很重要的新闻站 |
| 月份和名称型 | https://example.com/2026/10/sample-post/ | 更新频繁、时效性强的文章 |
| 数字型 | https://example.com/archives/123 | 很少是好选择:用编号代替了单词 |
| 文章名 | https://example.com/sample-post/ | 大多数博客、商店和企业网站 |
| 自定义结构 | https://example.com/%category%/%postname%/ | 分类体系稳定的网站 |
自定义结构由结构标签拼成:%year%、%monthnum%、%day%、%hour%、%minute%、%second%、%post_id%、%postname%、%category% 和 %author%。官方文档建议结构以 %post_id% 或 %postname% 结尾,这样每个网址都能唯一指向一篇文章。
该选哪种结构
没有特别理由就用「文章名」。 这与 Google 建议用简单、有描述性的单词而非冗长编号的做法一致,也能让网址保持简短。我们的 URL Slug 长度指南 解释了为什么短 slug 更易读、易分享、易维护。
只有日期本身是内容一部分时才放日期。 网址里带日期,常青教程一到新年份就显得陈旧;而且以后想去掉日期,就得改掉所有网址。
慎用 %category%。 它能补充上下文,但一篇文章属于多个分类时,网址里只会显示按字母顺序排在最前的那个;文章换分类,网址也跟着变。分类前缀和标签前缀(默认是 category 和 tag)可以在可选设置里改名,但不能彻底去掉。
公开站点别用朴素型和数字型。 两者都没法告诉读者或搜索引擎这一页讲什么。
WordPress 如何把标题变成 slug
保存文章时如果你没填 slug,WordPress 会把标题交给 sanitize_title()。在保存场景下,这个函数先调用 remove_accents() 去掉重音,再执行 sanitize_title 过滤器,默认处理函数是 sanitize_title_with_dashes()。后者依次:
- 去掉 HTML 标签,以及不属于编码字节的零散
%; - 转成小写,把每个非 ASCII 字符按 UTF-8 做小写十六进制的百分号编码,编码后最多保留 200 个字符;
- 把不换行空格、短破折号、长破折号和
/变成连字符,删掉弯引号、版权符号、省略号等符号; - 把句点变成连字符,删除除
a–z、0–9、空格、_、-以及编码字节中的%以外的所有字符; - 把空白变成连字符,合并连续连字符,并去掉首尾连字符。
落到真实标题上是这样(右列为我们生成器的默认输出):
| 标题 | WordPress slug | 我们的生成器 |
|---|---|---|
| This Is A Great Post! | this-is-a-great-post | this-is-a-great-post |
| I'm in LOVE with WordPress!!!1 | im-in-love-with-wordpress1 | im-in-love-with-wordpress-1 |
| 10 Tips & Tricks for Faster Pages | 10-tips-tricks-for-faster-pages | 10-tips-and-tricks-for-faster-pages |
| Price: 50% Off Today | price-50-off-today | price-50-percent-off-today |
| Node.js vs. Deno | node-js-vs-deno | node-js-vs-deno |
前两行是 WordPress 官方文档里的例子。差别不大但看得出来:WordPress 直接删掉 & 和 %,不会写成单词;中间只隔着标点时,数字会和前一个单词粘在一起。两种结果都不算错,但如果你在意准确措辞,就自己填 slug。
WordPress 还会保留所有小词。想要 10-tips-tricks-faster-pages 这种更短的写法,就在别名框里手动删掉停用词,或者在我们的生成器里勾选 去除停用词。
中文及其他非拉丁文字标题
sanitize_title_with_dashes() 不做音译。中文、日文、西里尔字母等非拉丁字符会被保留,并以百分号编码的形式存储:
| 标题 | WordPress slug |
|---|---|
| 重庆火锅攻略 | %e9%87%8d%e5%ba%86%e7%81%ab%e9%94%85%e6%94%bb%e7%95%a5 |
| 北京 Travel Guide 2026 | %e5%8c%97%e4%ba%ac-travel-guide-2026 |
浏览器会把这些字节解码,在地址栏里显示成 重庆火锅攻略,所以你自己看着没问题。可一旦把链接复制到邮件、聊天软件或表格里,它常常以编码形式出现:六个汉字就是 54 个字符。原因是每个汉字在 UTF-8 里占 3 个字节,每个字节又变成 %e9 这样的三个字符。
200 字符的上限也要留意:每个汉字编码后占 9 个字符,纯中文标题最多只能保留 22 个汉字,后面的部分会被悄悄截掉。
中文 WordPress 站点有三种选择:
- 保留中文 slug。 它合法,Google 也支持,在地址栏里读起来也自然。标题要短,别撞上 22 个汉字的上限。
- 用拼音。 我们的 URL Slug 生成器 能把中文转成无声调拼音:
重庆火锅攻略会变成chong-qing-huo-guo-gong-lve,复制到别名框即可。 - 用英文 slug, 比如
chongqing-hot-pot-guide,适合读者也会用英文搜索的情况。
我们的 中文网址 slug 指南 详细对比了这三种方案,包括自动拼音的多音字问题。带重音的拉丁文字标题,WordPress 的 remove_accents() 已经能去掉大部分重音;各语言的细节见 如何音译 slug。
重复 slug 与纯数字 slug
WordPress 会保证文章 slug 唯一。同一内容类型里已经有 sample-post 时,wp_unique_post_slug() 会在末尾加数字,依次尝试 sample-post-2、sample-post-3……草稿和待审文章在发布前不做这项检查,所以重复往往在你点击「发布」的那一刻才出现。
纯数字 slug 会被特殊处理,因为它可能和日期归档冲突。比如结构是 /%year%/%postname%/ 时,slug 为 5 看起来就像五月的归档页,WordPress 会给它加后缀。何况用单词做 slug 本来就更好。
新网址末尾出现 -2 时,先查一查是否有同名的旧草稿、回收站里的文章或附件,改好 slug 再分享链接。
发布后修改 slug
文章: 修改已发布文章的 slug 时,WordPress 会把旧 slug 存进这篇文章的 _wp_old_slug 元数据。以后有人访问旧网址并得到 404 时,wp_old_slug_redirect() 会按旧 slug 找到文章,用 301 跳转到当前固定链接。找不到旧 slug 时,它还会按文章的旧发布日期查找,所以文章改了日期,按日期组成的网址也能继续用。
页面: wp_old_slug_redirect() 不处理层级型内容类型,页面不在其中。页面改名后,你需要自己在服务器配置或跳转插件里加 301 跳转。
修改整个固定链接结构 会让全站网址一起改变,别指望 WordPress 都能兜住。把它当成一次迁移:导出旧网址,逐条对应新网址,再用我们的 301 重定向生成器 生成规则。我们的 批量改网址指南 讲了包括测试在内的完整流程。在 .htaccess 里,把你的规则放在 # BEGIN WordPress 区块之上,免得 WordPress 先接管请求。
注意
常见错误
- 公开站点一直用朴素链接。 第一篇文章上线前就选好美观结构。
- 从日期结构切到文章名却不做跳转。 所有旧链接和书签都会失效。
- 给页面改名却以为会自动跳转。 只有文章才有旧 slug 跳转。
- 重要文章完全依赖自动 slug。 检查是否丢了
&或%、数字是否粘在单词上、中文 slug 是否变成了很长的百分号编码。 - 无视
-2后缀。 它通常意味着有被遗忘的草稿或附件占用了这个 slug。 - 只用数字做 slug。 可能与日期归档冲突,也不能告诉读者任何信息。
可复制的 WordPress 固定链接检查清单
[ ] 上线前已选定固定链接结构(大多数站点选「文章名」)
[ ] 自定义结构以 %postname% 或 %post_id% 结尾
[ ] 常青内容的网址不含日期
[ ] 重要文章的 slug 已手动填写或检查
[ ] 中文标题:中文 slug 足够短,或已填拼音/英文 slug
[ ] 没有意外的 -2 后缀;没有纯数字 slug
[ ] 改名的页面已手动加 301 跳转
[ ] 修改结构按迁移处理:映射表、规则、测试
[ ] .htaccess 中跳转规则位于 # BEGIN WordPress 之上用工具生成 WordPress slug
把标题粘贴到 URL Slug 生成器,即可得到干净的 slug:& 会写成单词,可选去除停用词,中文可转拼音;再复制到 WordPress 的别名框。整批导出的文章标题可以交给 批量 CSV Slug 生成器 一次生成,并自动处理重复。发布前,用 Slug 检查器 查出大写字母、下划线等问题。
参考资料
- WordPress 文档:Customize permalinks
- WordPress 代码参考:sanitize_title()
- WordPress 代码参考:sanitize_title_with_dashes()
- WordPress 代码参考:utf8_uri_encode()
- WordPress 代码参考:wp_unique_post_slug()
- WordPress 代码参考:wp_old_slug_redirect()
- Google 搜索中心:Google 搜索的网址结构最佳做法
FAQ
常见问题
WordPress 哪种固定链接结构对 SEO 最好?
对大多数网站来说是「文章名」。它生成简短、有描述性的网址,正是 Google 网址指南所推荐的。只有发布日期本身是内容一部分时(比如新闻)才使用日期结构。
修改 slug 后,WordPress 会把旧网址跳转过去吗?
已发布的文章会:WordPress 保存旧 slug,并对旧网址的请求做 301 跳转到新网址。页面和其他层级型内容类型不在此列,需要你自己添加跳转。
为什么我的 WordPress 网址末尾多了 -2?
同一内容类型中已有别的条目在用这个 slug,常见的是草稿、回收站里的文章或附件。WordPress 会加 -2、-3 等后缀保证唯一。改名或删除那个条目后,再编辑这篇文章的 slug。
中文 WordPress 文章该用中文 slug 还是拼音 slug?
都可以。中文 slug 在浏览器里显示自然,但以百分号编码存储,分享时显得很长,而且最多只能保留 22 个汉字;拼音或英文 slug 更短、更通用。选定一种风格并保持一致即可。
