URL Slug 生成器

直接在浏览器中将任何标题转换为干净的 URL Slug —— 可以逐个转换,也可以一次性处理整个列表。内置准确的西里尔字母和重音符号音译标准,规则可编辑,并且绝不上传任何内容。

请输入要转换的文本
高级选项

Slug 是网址中可读的末尾部分 —— 例如 example.com/blog/my-first-post 中的 my-first-post。这是用户在决定是否点击之前可以阅读的部分,也是搜索引擎将其作为页面内容简短描述的部分,这就是为什么它比数据库 ID 或日期更值得花心思。这个免费的生成器能将任何文本转换为 Slug:将标题粘贴到“要转换的文本”中,点击“生成”,结果就会出现在旁边,并带有一个复制按钮。默认设置是大多数网站希望的配置 —— 转换为小写、单词间使用连字符、移除常见的停用词、音译非拉丁字母 —— 因此只需点击一下即可获得可用的 Slug,而且所有这些设置都可以通过开关进行更改。

所有的处理都在您自己的设备上进行。页面加载了一个小型的 JavaScript 引擎并在本地运行:您的标题绝不会被上传,也不会被记录,即使断开网络连接,该工具也能继续工作。这也是为什么当您更改设置时结果会立即更新的原因。处理的顺序值得说明,因为正是它使输出变得可预测:粘贴的链接首先被缩减为最后的路径段,然后文本被转换为小写,接着移除停用词,之后非拉丁字符被音译,如果勾选的话则移除数字和特殊字符,然后剩下的内容将使用您选择的分隔符连接起来,接着结果会被裁剪到最大长度,最后,重复的项会获得一个数字后缀。“要转换的文本”一次最多可接受 500,000 个字符,相当于几千篇文章的标题。

一行输入对应一个 Slug。粘贴整个标题列表,每一行都会变成一个带编号的 Slug,其上方的灰色文字显示它对应的原始标题,因此即使在一批五十个结果中,您仍然可以分辨出哪个 Slug 属于哪个标题。如果列表已经存在于文件中,则无需通过剪贴板:点击输入框旁边的“从文件加载”按钮,打开一个纯文本文件(如 .txt、.csv、.md、.json 等),其内容就会直接填入字段中。您的浏览器读取该文件的方式与读取您输入的内容完全相同,且不会上传到任何地方。“输入拆分方式”决定了如何分割列表。“自动检测”是默认设置:换行符总是会分隔项目,而逗号仅在输入为单行且所有部分看起来都像独立值时才会起分隔作用 —— 因此“价格 1,500 元”和“第5章: 结果, 结论”会保持完整,而不会碎裂成片段。如果您已经清楚数据的格式,“换行”、“逗号”和“空格”允许您强制进行拆分。“结果格式”决定了获取批量结果的方式 —— 换行、以空格分隔或以逗号分隔 —— “全部复制”和“保存为文件”都会遵循该格式。“历史记录”会在您自己的浏览器中保留最近 10 次的批处理结果,因此您在一小时前转换的列表依然存在。

非拉丁文本是大多数 Slug 生成器只能做到大致准确、很少能做到完全准确的部分。URL 在纯 ASCII 码下是最安全的,因此西里尔字母、希腊语、阿拉伯语、中文以及带重音的欧洲字母必须进行转换,唯一的问题是遵循什么规则。本页面通过两个层面来解决。通用层面覆盖所有书写系统:一个音译库能为您输入的几乎任何字符提供合理的 ASCII 转换,这就是“音译源语言”菜单中“自动(任何语言)”的含义。特定层面是一组为那些通用转换与国家实际使用情况不符的语言手工构建的表格;“音译源语言”菜单中列出了目前已有表格的语言,而且随着工具支持更多需要的语言,这个集合还在不断增加。选择其中一个会在“音译规则”下方加载其对应的可编辑网格,每个字母都是一个您可以修改的文本字段,而“将规则重置为默认值”则能将其恢复原样。乌克兰语表格遵循 2010 年内阁第 55 号决议,即乌克兰护照中使用的标准,包括一些容易遗漏的细节:зг 变为 zgh 而不是 zh,以与 ж 区分开;є、ї、й、ю 和 я 在词首有一种形式,在词中则有另一种形式;撇号和软音符号会被直接删除而不会开启新词,所以 Знам'янка 会转换为 znamianka 而不是 znamyanka。德语默认使用德国地址实际采用的扩展形式 ä → ae、ö → oe、ü → ue,如果您更喜欢,也可以选择简单的 ä → a 变体。

“移除停用词”默认开启。它会去掉那些徒增 Slug 长度却不增加含义的小连接词 —— 如 a、the、and、of、for 等。“停用词”下方的列表是完全可编辑的,并且默认已经填好内容:包含一个英语列表以及当前页面语言对应的列表,所以乌克兰语页面认识 в、на、та 和 і,德语页面认识 der、die 和 das。您可以添加自己的词汇,删除想要保留的词汇,或者完全关闭此功能,此时该字段会变为灰色而不是假装仍起作用。关于它有两点需要说明。移除停用词主要是为了让地址变得更短、更整洁,而不是提升排名的手段 —— 它不能带来更好的位置。另外,如果标题中的每个词碰巧都在列表里,最终的结果就什么都没有,该工具会直接告诉您这一点,而不是给您一个空框。

其余的开关决定了 Slug 的形态。“Slug 分隔符”选择单词之间放置什么字符,默认使用连字符并不是品味问题:Google 将连字符视为单词分隔符,而将下划线视为连接符,因此 my_first_post 会被爬虫读取为一个长词,而 my-first-post 会被读取为三个词。“下划线 (_)”提供给那些坚持使用它的系统。“转换为小写”保持开启,因为大多数服务器区分地址的大小写,混用大小写很容易导致同一个页面出现两个 URL。“移除特殊字符”会剥离所有非字母、非数字、非空格、非连字符或下划线的内容,这能将标点符号、引号和表情符号排除在地址之外 —— 特别是表情符号会在音译之前被移除,以防止火箭表情变成 rocket 这个词。默认没有勾选“移除数字”,因为标题中的数字通常是标题的一部分。“最大长度”范围从 10 到 200,默认值为 80;当 Slug 超过该长度时,引擎会在放得下的最后一个完整单词处截断,而不是从中间切断某个词。每个结果旁边的数字代表其字符长度,超过 60 时会变红 —— 这并非硬性限制,而是 Slug 在搜索结果中开始被截断、且粘贴到消息中变得尴尬的临界点。

还有两个开关,因为它们能让批量转换回归一键操作。“使 Slug 唯一”用于捕捉两个不同标题转化为相同 Slug 的情况 —— “热门 10 技巧”和“热门-10 技巧”都会变成 remen-10-jiqiao —— 它会给第二个添加 -2,第三个添加 -3,如果后缀会超出您的最大长度,它会先缩短基础部分。两个页面使用同一个地址的问题,在这个列表中捕获要比在您的 CMS 中处理便宜得多。“从粘贴的 URL 提取 Slug”则反向工作:粘贴完整的链接,工具会提取路径的最后一部分,去掉查询字符串以及任何 .html 或 .php 后缀,并解码百分号编码。例如,一个以 %D0%9B%D1%8C%D0%B2%D1%96%D0%B2 结尾的维基百科链接,转换后会得到 lviv 而不是一串十六进制数字。它仅在整行都是链接时才会触发,因此句子中引用的地址会保持原样。

为什么选择这款 Slug 生成器?

任何需要携带可读地址的页面都需要 Slug。博客或新闻网站会将每个标题都转换为一个 Slug,这也是这款工具设计的初衷所在:粘贴一周的头条,获取一周的 URL。在线商店针对产品和类别名称进行相同的操作,通常在导入后批量处理,且通常使用地址无法支持的字母系统语言。文档和知识库也以同样的方式构建锚点和文件名。除了网址,同样的干净字符串也是跨操作系统不会出错的文件名、日志中人眼可读的数据库键、分支名称、媒体库中的图片名称,或者是静态站点生成器中区块的标识符。凡是人类可读名称需要存活于机器可读字段的地方,就是 Slug 的用武之地。

在依赖它之前,有几个限制值得了解。这是一个生成器,而不是验证器:它不会检查某个 Slug 在您的网站上是否已被占用,因为它完全不知道您的网站包含什么 —— 它所保证的唯一性仅限于您面前的这批数据中。重定向也是您的工作;更改已发布页面的 Slug 会破坏其旧地址,这是由您的 CMS 而不是此工具决定的。“保存为文件”写入的是纯文本,不是 CSV 或 JSON。自动拆分功能对逗号做出的判断在绝大多数情况下都是正确的,但并非完美无缺,这正是“输入拆分方式”允许您推翻它的原因。而且音译是一种约定而不是翻译 —— München 会变成 muenchen,而不是 Munich —— 因此,如果某个页面在目标语言中已经有既定名称,那么该名称将比对原文的任何自动转换更适合作为 Slug。

FAQ

如何创建一个 URL Slug?

将您的标题粘贴到“要转换的文本”中,然后点击“生成”。结果连同一个复制按钮会出现在旁边。默认设置采用了大多数网站想要的配置:小写、单词之间用连字符、移除连接词以及非拉丁字母音译。所有这些设置都是您可以调整的开关,而“高级选项”则包含了其余内容 —— 分隔符、最大长度、停用词列表以及音译规则。

我可以一次性转换整个标题列表吗?

可以。您可以粘贴多达 500,000 个字符 —— 相当于几千个头条新闻 —— 或者通过输入框旁边的“从文件加载”按钮直接从文件中读取,它会在浏览器中读取而无需上传。每一行都会成为一个带编号的独立 Slug,它的原始标题显示在上方,以便您对应检查。“输入拆分方式”控制列表的分割方式,“结果格式”决定批量结果是按行返回、以空格分隔还是以逗号分隔,而“全部复制”和“保存为文件”都能一次性提取所有内容。

这个生成器如何处理西里尔字母和重音字母?

它分两层将它们音译为 ASCII 码。任何书写系统 —— 西里尔文、希腊文、阿拉伯文、中文、带重音的拉丁文 —— 都在通用音译库的覆盖范围内,这也是“自动(任何语言)”所使用的。在此之上,对于那些通用转换与国家实际使用不符的语言,还提供了手工构建的表格;“音译源语言”菜单中列出了目前已有表格的语言。选择其中一个即可加载其对应的表格,且每个字母都支持编辑。中文没有单独的表格,由通用层处理:它按字给出拼音,北京 变成 beijing,新闻 变成 xinwen,产品 变成 chanpin。有两点需要事先知道。第一是多音字。通用层为每个字取最常见的读音,所以读音不止一个的字有时会选错 —— 重庆 会变成 zhongqing 而不是 chongqing,银行 会变成 yinxing 而不是 yinhang,长城 会变成 zhangcheng 而不是 changcheng。第二是没有词的边界,整句会连成一串:中文网站 变成 zhongwenwangzhan。想要干净的结果,直接输入拼音并用空格分词即可 —— zhong wen wang zhan 会变成 zhong-wen-wang-zhan。

乌克兰语使用哪种音译标准?

遵循 2010 年 1 月 27 日内阁第 55 号决议 —— 乌克兰护照中使用的标准。它包括了那些容易出错的部分:зг 变为 zgh 以保持与 ж 区分,字母 є、ї、й、ю 和 я 在词首和词中有不同的形式,撇号和软音符号会被丢弃且不会作为新词的开头,因此 Знам'янка 会变成 znamianka 而不是 znamyanka。如果您更喜欢简单的外观,也可以选择到处都使用 ya、yu 和 yi 的第二种变体。

我可以修改某个特定字母的音译方式吗?

可以。打开“音译规则”,表格中的每一个字母都是一个文本字段:您可以输入任何想要的转换结果,输出也会随之实时更新。清空字段会完全移除该字母。您的修改会被保存在您自己的浏览器中供下次使用,而点击“将规则重置为默认值”即可随时恢复标准表格。

什么是停用词,我应该移除它们吗?

它们是那些没有实际含义却会让 Slug 变长的小连接词,如 a、the、and、of、for 等。移除它们默认是开启的,并且“停用词”下方的列表是可编辑的,预填充了一个英语列表以及当前页面语言对应的列表。不过要对它的好处保持诚实:这只会产生更短、更整洁的地址,而不会带来更好的搜索排名。如果一个标题完全由停用词组成,工具会提示您,而不是返回一个空 Slug。

Slug 中应该使用连字符还是下划线?

使用连字符,除非您的技术栈有其他要求。Google 将连字符视为单词间的分隔符,而将下划线视为连接字符,因此 my_first_post 会被解读为一个长词,而 my-first-post 会被解读为三个词。生成器出于这个原因默认使用连字符;“Slug 分隔符”则为需要的系统提供了下划线的选项。

URL Slug 应该多长?

足够短以至于一眼就能读懂 —— 前几个词承载了含义,剩下的通常是句子的尾巴。每个结果旁边的数字表示其字符长度,超过 60 时会变红,这大致是搜索结果开始截断,以及粘贴到消息中变得尴尬的地方。“最大长度”设定了 10 到 200 个字符的硬上限,默认值为 80。

当 Slug 过长时,它会把单词从中间切断吗?

不会。当 Slug 超过最大长度时,引擎会退回到放得下的最后一个完整单词并在那里截断,因此截断后的 Slug 读起来依然是一个个单词,而不是在音节中间结束。这同样适用于重复项添加数字后缀的情况:它会先缩短基础部分,确保最终的 Slug 仍符合您的限制。

如果两个标题生成了相同的 Slug 会怎样?

“使 Slug 唯一”默认开启并负责处理这种情况:第一次出现的保持原始 Slug,第二次添加 -2,第三次添加 -3,以此类推。它捕获了两个不同标题转化为相同内容的常见情况 —— 热门 10 技巧 和 热门-10 技巧 都会变成 remen-10-jiqiao。将其关闭会给您包含重复项的原始输出。请注意,唯一性仅在您刚才转换的那批数据中得到保证;工具无法知晓您的网站上已经存在哪些内容。

我可以粘贴一个 URL 而不是标题吗?

可以。“从粘贴的 URL 提取 Slug”默认是开启的,当整行是一个链接时,工具会提取路径的最后一部分,丢弃查询字符串和任何 .html 或 .php 后缀,并解码百分号编码 —— 所以一个以 %D0%9B%D1%8C%D0%B2%D1%96%D0%B2 结尾的维基百科地址转换后会得到 lviv,而不是一串十六进制代码。它仅在整行都是链接时才会触发,因此句子内部引用的 URL 将被视为普通文本。

我的文本会被发送到服务器吗?

不会。转换作为本地 JavaScript 运行在您的浏览器中。不会上传任何内容,也不会记录任何内容,并且在页面加载完成后,即使断开网络连接也能继续工作。未发布的头条新闻、内部产品名称和客户工作都保留在您的设备上,这也是对于这类特定任务,首选本地工具而非服务器端工具的实际原因。

为什么我的单句被分成了两个 Slug?

因为它包含了一个逗号,而且“输入拆分方式”被设置为了“自动检测”。该模式将换行符视为明确的分隔符,将逗号视为可能的分隔符。只有当单行的所有部分看起来都像独立值时,它才会以逗号进行拆分 —— 像 3,5 这样的十进制数或带有冒号的句子会故意保留完整。如果标题仍然被错误地拆分了,请将“输入拆分方式”设置为“换行”,这样输入只会在您实际按下回车键的地方被切断。