URL别名生成器

把标题转成 URL 里那个短标识(slug):去音调、统一小写、空格换成连字符、连续分隔符合并,再按长度截断。一行一条,批量转换。

默认值实算:4 行原文 → 4 条 slug,分隔符「-」,最长 60,非 ASCII 按「丢弃」处理;结果已核对。

转换对照表(分隔符 -,最长 60,非 ASCII 丢弃;默认显示 12 行,共 24 行)
原文生成 slug长度
Café Crème Déjà Vucafe-creme-deja-vu18
Über Straße Zürich 2026uber-stra-e-zurich-202624
--- Hello World ---hello-world11
中文标题 Hello World 2026hello-world-202616
Python 3.12 新特性python-3-1211
My Blog Postmy-blog-post12
naïve façade jalapeñonaive-facade-jalapeno21
10 Tips & Tricks for SEO!10-tips-tricks-for-seo22
ΑΘΉΝΑ Acropolisacropolis9
Rock & Roll 2026/2027rock-roll-2026-202719
leading and trailing leading-and-trailing20
UPPERCASE TITLE HEREuppercase-title-here20

使用方法

URL别名生成器把「人写的标题」翻成「机器和搜索引擎喜欢的短标识」,一行一条批量处理,按下面的步骤操作:

  1. 在左侧文本框粘贴标题,一行一条,示例 4 行(从 Café Crème Déjà Vu 到「中文标题 Hello World 2026」)。
  2. 选分隔符,示例连字符「-」;下划线「_」多用于代码标识,URL 里并不推荐。
  3. 设最大长度,示例 60;超过就按分隔符边界截断,避免出现半个单词。
  4. 选非 ASCII 处理方式,示例「丢弃」;中文要保留可改成「百分号编码」。
  5. 点「生成 URL 别名」,或按 Ctrl/Cmd+回车;右侧立即给出 slug,每行对应一行原文。

这个 URL别名生成器能解决什么问题

手写 slug 最容易出三件事:音调符号没去掉导致链接里出现 caf%C3%A9、连续空格产生了 my---blog 这样的多个连字符、以及中文标题整段被塞进 URL 变得又长又乱。URL别名生成器把这三步一次做对。

场景一,博客迁移:把 200 篇旧标题批量贴进来,一次导出 200 条 slug,省掉逐条手改。示例「How to Bake Sourdough Bread」→ how-to-bake-sourdough-bread。

场景二,多语言站点:法语西语的标题先去掉音调,Café Crème Déjà Vu → cafe-creme-deja-vu,链接可读且不会出现百分号乱码。

场景三,中文站分级 URL:中文标题先转拼音再拼 slug 是最佳实践,本页可先输出丢弃中文的骨架(hello-world-2026),拼音部分交给专门的转换工具补上。

本页不做的事:不内置汉字转拼音词典(见相关工具);不检查 slug 是否已被占用或是否命中保留字;不改写站内已有链接。

原理与规则说明

URL别名生成器的核心是一条正则流水线,对每行依次执行:s.normalize('NFD') 把带音调的字符拆成「基础字母 + 组合符」;.replace(/[\u0300-\u036f]/g, '') 删掉组合符;.toLowerCase() 统一小写;.replace(/[^a-z0-9]+/g, sep) 把所有非字母数字的连续片段压成一个分隔符;最后用 replace(/^-+|-+$/g, '') 去掉首尾多余的分隔符。

为什么先 normalize('NFD') 再删组合符:é 在 Unicode 里既可以是一个码点 U+00E9,也可以拆成 U+0065(e)+ U+0301(´)。NFD 统一拆开后再按 U+0300~U+036F 区间删除,就能同时处理「预组合」和「已分解」两种写法。示例中 "Café Crème Déjà Vu" 经 NFD 后长度从 16 涨到 22,多出来的就是被删掉的 6 个组合符。

分隔符用连字符而不是下划线:- 在 RFC 3986 的 unreserved 集合内(该集合共 66 个字符:A-Z、a-z、0-9、- . _ ~),且在中文与英文语境下都被视作「词的分界」;下划线会被部分「下划线分词」的场合忽略,反而把两个词粘成一个。Google 也建议 URL 用连字符分词。

中文的三种取舍:丢弃 输出最短、兼容性最好,但会丢掉语义;保留并百分号编码 用 encodeURIComponent 把每个汉字编成 3 组 %XX——一个汉字占 9 个字符,"中文标题" 编码后是 %E4%B8%AD%E6%96%87%E6%A0%87%E9%A2%98 共 36 个字符;原样保留 严格说不符合 RFC 3986(URL 只能由 ASCII 组成),需要浏览器按 RFC 3987 的 IRI 规则兜底显示,跨系统传输容易出问题。

长度为什么默认 60:搜索引擎展示 URL 时通常在 60~75 个字符处截断,超出部分用户在结果页看不到。截断时按分隔符边界回退,宁可少一个词也不产生半截单词——示例长标题 96 字符截到 60 后回退成 this-is-a-very-long-article-title-that-should-be-truncated(57 字符)。

完整示例(数值仅作演示)

示例条件:分隔符连字符、最长 60、非 ASCII 丢弃;原文 4 行。数值仅作演示。

三处咬合:控件默认值(分隔符 -、最长 60、丢弃)、本节 4 条结果、对照表第 1~4 行逐字一致。

输入范围与对照表

字段范围默认边界含义
分隔符- 或 _-连字符在 RFC 3986 unreserved 集合内,推荐
最大长度20~12060小于 20 会把多数标题截成 1~2 个词,失去语义
非 ASCII丢弃 / 编码 / 保留丢弃编码模式下 1 个汉字占 9 字符,最长要相应放宽

常见转换对照:10 Tips & Tricks for SEO! → 10-tips-tricks-for-seo(去标点);My Blog Post → my-blog-post(合并空格);UPPERCASE TITLE HERE → uppercase-title-here(转小写);ΑΘΉΝΑ Acropolis → acropolis(希腊字母整体丢弃,NFD 不去掉它们)。

输入范围、边界与精度说明

NFD 能处理的范围:拉丁字母(带重音、变音记号)、希腊字母的分解形式等,凡是有「基础字符 + 组合符」拆法的都能去音调。但 ß(德语 sharp s)、æ、ø、đ、ł 这些没有分解形式的字符不在 U+0300~U+036F 区间内,会被丢弃模式当成非字母而替换成分隔符——这就是 Straße 变成 stra-e 的原因。

截断精度:长度上限按 UTF-16 码元计。纯 ASCII slug 里 1 字符 = 1 码元;若选「百分号编码」模式,输出仍是 ASCII,长度可直接用。截断始终发生在分隔符边界,不会把 -%E4%B8 这类三连编码切一半。

边界一:某行全是非 ASCII 且模式为「丢弃」时,该行 slug 为空——本质是该行没有可用字符,页面按行给出提示而不是静默吞掉。

边界二:首尾标点、纯数字、单个字符都能正确处理;--- Hello World --- 的首尾连字符会被去掉,不会留下 -hello-world-。

常见误用的正确解释:一,slug 不是越小写越好,而是「小写 + 连字符 + 无音调 + 无连续分隔符」四条同时满足;二,slug 里出现大写不会报错,但大小写会被部分服务器视为两个不同地址,统一小写才保险;三,_ 和 - 不能混用,同一个站里混用会让词边界判定不一致。

常见问题

slug 是什么,和 URL 有什么区别?

slug 是 URL 路径里那段「可读的短标识」,比如 /blog/how-to-bake-bread/ 最后一段。它属于 URL 的一部分,但只负责可读性与分词,不参与域名与协议。

中文到底该保留还是丢弃?

面向中文用户且链接会分享到中文平台时,保留原文(百分号编码)更利于识别;面向多语言或要求短链接时,先转拼音再拼 slug 最稳。本页「丢弃」只是最通用的骨架。

为什么 Straße 变成了 stra-e?

因为 ß 没有 Unicode 分解形式,normalize('NFD') 拆不出「s + 组合符」,它直接落在非字母数字集合里被替换成分隔符。德语站点需把 ß 先手工替换成 ss 再转换。

最多能处理多少行?

本页按行处理,单次建议 500 行以内(约 3 万字符)。超长文本浏览器仍能算完,但实时更新的开销会上去,建议改为点「生成」按钮再算。

连续空格为什么只留一个连字符?

正则是 [^a-z0-9]+,后面的 + 表示「一个或多个」,所以整段连续的非字母数字只会被替换成单个分隔符,不会产生 my---blog。

生成的 slug 会和已有页面冲突吗?

本页只做字符串转换,不查重。落地前请对照现有路由与保留字(如 new、edit、list、index、admin、api、login、search)检查,冲突时在末尾补一个数字或语义词。

能直接粘到 Excel 里做批量吗?

能。结果区一行一条,可直接整列粘贴;「导出对照 CSV」给的是「原文 + slug + 长度」三列,带 BOM,Excel 打开中文不乱码。

为什么要限制最小 20 字符?

20 是防呆下限:绝大多数标题截到 20 字符只剩 2~3 个词,语义已经丢失。真要超短 slug,建议手工起名而不是让工具截断。

相关工具

更多实用工具见分类页。