URL slug 多长合适?官方并没有给出上限:Google 的 URL 结构指南只要求使用简单、能说明内容的词,从没给过字符数;Web 标准规定的也只是几千个字符量级的技术上限。实际操作中,3 到 5 个有意义的词、大约 60 个字符以内的 slug,更容易阅读、分享和维护。本指南把官方来源真正说了什么和行业经验法则分开讲,演示怎样在不丢失含义的前提下缩短 slug,最后附一份可复制的检查清单。下文所有示例 slug 都是我们的 URL slug 生成器 的真实输出。
提示
简短回答
- 没有任何搜索引擎公布过 slug 长度上限。 Google 关于 URL 结构的文档讲的是易读的词、连字符和尽量少的参数,没有讲字符数。
- 技术上限远在天边。 HTTP 标准建议软件至少支持 8,000 个八位字节(octet)的 URL;sitemap 里的
<loc>值必须少于 2,048 个字符。正常的 slug 离这两个数字都很远。 - 对人来说越短越好。 3 到 5 个词的 slug 在搜索结果里一眼就能看完,念出来、贴进聊天消息都方便。
- 我们的实用目标是 60 个字符以内。 我们工具里的长度指示在 60 个字符以内显示绿色,61 到 75 显示琥珀色,超过 75 显示红色。这些阈值是我们选定的惯例,不是 Google 的规定。
官方来源到底怎么说
| 来源 | 原文要点 | 对 slug 长度意味着什么 |
|---|---|---|
| Google 搜索中心:URL 结构 | 使用简单、能说明内容的词;用连字符而不是下划线;参数尽量少;URL 区分大小写 | 没有数字。长度只是「保持 URL 简单易读」的一部分 |
| RFC 9110(HTTP 语义)第 4.1 节 | 建议发送方和接收方至少支持 8,000 个八位字节的 URI | 这是对软件的技术下限,不是写作目标 |
| Sitemaps 协议(sitemaps.org) | <loc> 中的 URL 必须少于 2,048 个字符 | 页面要放进 XML sitemap 时的硬性上限 |
| Google 搜索中心:网站迁移 | 修改 URL 路径属于网站迁移,需要重定向 | 缩短已发布的 URL 有成本,所以上线前就把长度定好 |
规律很清楚:官方文档关心的是可读性和一致性。你在别处看到的任何精确「理想长度」,包括我们自己的 60 字符目标,都是实用准则,而不是排名规则。
60 字符这个说法从哪来
60 字符是行业习惯,不是公开发布的要求。它之所以一直被沿用,是因为它是个好用的预算:
- 给 URL 的其他部分留出空间。 slug 只是地址的最后一段。
https://example.com/blog/在 slug 开始之前就已经占了 25 个字符。 - 装得下一个短语,装不下一句话。 60 个字符大约能放 8 到 10 个普通英文单词,足够放一个主关键词再加一个限定词。
- 容易检查。 一个具体数字能把「尽量短」变成编辑或脚本可以核对的标准。
所以我们的长度指示把 60 和 75 个字符设为提醒点。如果你的 slug 有 64 个字符而每个词都有用,那没问题;如果有 99 个字符,几乎总能删掉点什么。
为什么短 slug 更好用
Google 并没有说 URL 越短排名越高,所以对「删几个字符就能涨排名」的承诺要保持警惕。真正的好处是实用层面的:
- 易读。 人们是否点击,部分取决于看到的 URL。
best-running-shoes-beginners一眼就懂。 - 便于分享。 短 URL 在邮件客户端、聊天软件和印刷品里不会折行,也不会显得残缺。
- 便于维护。 只描述主题、不照搬标题的 slug,在你改写标题或更新年份时不需要跟着改。
- 报表清晰。 分析工具和 Search Console 报表都按 URL 列出数据,简短、有描述性的路径让这些表格更好读。
如何缩短 slug 而不丢失含义
按下面的顺序逐步处理,一旦 slug 既短又清楚就停下:
- 从标题开始。 先生成完整的 slug,看清每一个词。
- 去掉停用词,例如 "the"、"to"、"for"、"in",除非它们承载了含义(见下一节)。
- 删掉会过时的年份和数字,但保留用来标识事物本身的数字。
- 如果还是太长,就在单词边界截断。 绝不要从单词中间切开。
- 把主关键词放在前面,这样以后再截短也能保住它,而且最先被看到。
- 检查重复。 slug 越短越容易撞车。批量 CSV 工具可以在两个标题生成相同 slug 时自动加上
-2、-3。
下面用一个长标题走一遍这些步骤。每一行都是 slug 引擎在对应设置下的真实输出:
| 设置 | Slug | 字符数 |
|---|---|---|
| 默认 | the-ultimate-guide-to-the-best-coffee-shops-in-new-york-city-for-2026 | 69 |
| 去掉停用词 | ultimate-guide-best-coffee-shops-new-york-city-2026 | 51 |
| 去掉停用词和数字 | ultimate-guide-best-coffee-shops-new-york-city | 46 |
| 停用词、数字都去掉,最多 30 字符 | ultimate-guide-best-coffee | 26 |
| 只限制最多 5 个词 | the-ultimate-guide-to-the | 25 |
最后两行说明了顺序为什么重要。先限制词数、不去停用词,会留下填充词却丢掉主题:the-ultimate-guide-to-the 完全看不出跟咖啡有关。先去掉填充词,真的还需要时再加长度限制。
再看一个本身就长、并没有注水的标题:
| 标题 | 默认 slug | 最多 60 字符 |
|---|---|---|
| An extremely long article title that keeps going and going well past any reasonable limit for a URL | an-extremely-long-article-title-that-keeps-going-and-going-well-past-any-reasonable-limit-for-a-url(99) | an-extremely-long-article-title-that-keeps-going-and-going(58) |
自动截断能保证 slug 合法,但人工编辑能做得更好:像 long-article-titles 这样的 slug 用 19 个字符就说清了主题。自动限制是安全网,不能代替你挑选用词。
停用词:什么时候删、什么时候留
去掉停用词是缩短 slug 最快的办法,通常也很安全。我们的默认列表包含 a、an、the、and、or、but、in、on、at、to、for、with、by、from。下面的输出展示了它什么时候有用、什么时候有害:
| 标题 | 默认 slug | 去掉停用词后 | 结论 |
|---|---|---|---|
| Best Running Shoes for Beginners | best-running-shoes-for-beginners | best-running-shoes-beginners | 删:意思不变,更短 |
| Black Friday Deals on Laptops & Tablets | black-friday-deals-on-laptops-and-tablets | black-friday-deals-laptops-tablets | 删 |
| The Who Live at Leeds | the-who-live-at-leeds | who-live-leeds | 留:"The Who" 是乐队名 |
| Gone with the Wind Summary | gone-with-the-wind-summary | gone-wind-summary | 留:书名被破坏了 |
| Cash or Card at Checkout | cash-or-card-at-checkout | cash-card-checkout | 留下 "or":「二选一」正是主题 |
如果停用词是名称的一部分,或者会改变意思,就保留它;或者在批量生成后单独手改那一条 slug。
按单词边界截断 vs 硬截断
很多 CMS 插件和随手写的脚本直接用子字符串限制长度,结果会把单词切成两半。用上面那个 69 字符的咖啡 slug 举例:
| 方法 | 结果 |
|---|---|
slug.slice(0, 40) | the-ultimate-guide-to-the-best-coffee-sh |
| 在我们的工具里设最多 40 字符(按单词边界截断) | the-ultimate-guide-to-the-best-coffee |
-sh 这样的半个单词看起来像笔误,甚至可能拼成另一个词。如果你在自己的代码里限制长度,应该在最后一个分隔符处截断。下面两个函数对已经是 slug 的字符串实现了与「最多字符数」选项相同的效果:
function truncateSlug(slug, max = 60, sep = '-') {
if (slug.length <= max) return slug;
const cut = slug.slice(0, max + 1);
const i = cut.lastIndexOf(sep);
return i > 0 ? cut.slice(0, i) : slug.slice(0, max);
}
truncateSlug('the-ultimate-guide-to-the-best-coffee-shops-in-new-york-city-for-2026', 40);
// 'the-ultimate-guide-to-the-best-coffee'def truncate_slug(slug: str, max_len: int = 60, sep: str = "-") -> str:
if len(slug) <= max_len:
return slug
cut = slug[: max_len + 1]
i = cut.rfind(sep)
return cut[:i] if i > 0 else slug[:max_len]
truncate_slug("how-to-write-a-product-description-that-actually-sells", 30)
# 'how-to-write-a-product'先取 max + 1 个字符很关键:如果限制位置后面紧跟的正好是分隔符,说明最后一个词刚好放得下,就应该保留。
注意
常见错误
- 从单词中间截断。 如上所示,直接截子字符串会产生
-descrip这样的碎片。务必在分隔符处截断。 - 删掉了标识产品的数字。
iPhone 17 Pro Max Review: Battery, Camera and Price去掉数字后变成iphone-pro-max-review-battery-camera-price,已经看不出是哪一代机型。删日期,留型号。 - 堆砌关键词。 重复关键词的各种变体只会让 slug 更长、更难读。Google 的指南要求的是有描述性的词,而不是重复。
- 在常青内容的 URL 里放年份。 带 2026 的 slug 明年就显得过时,到时再改又得做重定向。
- 只为了长度去缩短旧 URL。 按 Google 的说法,修改已发布的 URL 就是网站迁移,需要 301 重定向和更新链接,而且 Google 提到迁移可能需要几周或更久才能处理完。新页面注意长度;旧页面只在有真正理由时才改。
- 忽略了目录层级。
/blog/2026/10/27/category/subcategory/short-slug即使 slug 很短,整体也很长。整个路径都要保持简单。
可复制的 slug 长度检查清单
[ ] slug 用 3-5 个有意义的词描述页面主题
[ ] 60 个字符以内(最多 75),除非每个词都必不可少
[ ] 已去掉停用词,名称里的和会改变意思的除外
[ ] 常青内容不带日期或年份;保留型号数字
[ ] 在单词边界截断,绝不从单词中间切开
[ ] 主关键词靠前
[ ] 全小写、用连字符分隔、结尾没有多余连字符
[ ] 在所在目录内唯一(没有意外的 -2 重复)
[ ] 整个路径也要短,不只是 slug
[ ] 改了已发布的 URL?从旧地址做 301 重定向在工具里设置长度限制
URL slug 生成器 有实时长度指示,还有按单词边界截断的「最多词数」和「最多字符数」选项,以及可编辑的停用词列表。如果是一整张标题表格,批量 CSV Slug 生成器 会对每一行应用同样的限制,并能把重复的 slug 变成唯一。如果要缩短已发布的 slug,请参考我们的 批量改 URL 并设置 301 重定向 指南。连字符、小写、重音等其他 slug 规则,请看 什么是 URL slug。如果链接里满是百分号转义,可以用 URL 编码/解码工具 解码,看看 slug 实际有多长。
参考资料
- Google 搜索中心:URL structure best practices for Google Search
- Google 搜索中心:Site moves with URL changes
- IETF:RFC 9110, HTTP Semantics, section 4.1
- Sitemaps XML format(sitemaps.org)
FAQ
常见问题
URL slug 有最大长度吗?
没有搜索引擎公布过。实际的上限都是技术层面的:HTTP 软件应至少支持 8,000 个八位字节的 URL,sitemap 中的 URL 必须少于 2,048 个字符。为了易读,建议控制在 60 个字符左右。
URL 越短在 Google 排名越好吗?
Google 没有这么说。它的指南要求 URL 简单、有描述性。短 slug 方便人阅读和分享链接,但删减字符并不是排名手段。
已发布页面的 slug 要不要缩短?
通常不要。新 slug 就是新 URL,需要 301 重定向、更新内部链接和新的 sitemap。只有遇到真正的问题时才改旧 slug,例如关键词错误或 URL 是基于 ID 的。
怎样限制 slug 长度又不把单词切成两半?
先去掉停用词,再在限制长度之前的最后一个连字符处截断。我们工具里的「最多字符数」选项会自动这样做,本指南中的函数演示了如何用 JavaScript 或 Python 实现。
