**语义URL**，也称干净的URL（clean URL）、用户友好的URL（user-friendly URL）、漂亮的URL（pretty URL）、搜索引擎友好的URL（search engine-friendly URL）、RESTful URL，是旨在提高网站、Web应用程序或Web服务的可用性和可访问性的Web地址或统一资源定位符 (URL) 对非专家用户具有直接、直观的意义。此类URL方案往往反映信息集合的概念结构，并将用户界面与服务器的信息内部表示解耦合。使用语义URL的其他原因包括搜索引擎优化(SEO)、符合软件架构的表现层状态转换 (REST) 风格，以及确保各个Web资源始终保持在同一URL。这使得万维网成为一个更加稳定和有用的系统，并允许为网络资源添加更持久和可靠的书签。

语义URL不包含底层Web应用程序的实现细节。这样做的好处是减少了以后更改资源实施的难度。例如，许多URL包含服务器端脚本的文件名，例如`example.php`、`example.asp`或 `cgi-bin`。 如果资源的底层实现发生更改，此类URL也需要随之更改。同样，当URL不"干净"时，如果移动或重组站点数据库，则有可能导致内部和外部站点的链接损坏，后者可能导致从搜索引擎列表中删除。使用语义URL可以为用户代理提供一致的资源位置，而不管内部结构如何。使用语义URL的另一个潜在好处是隐藏内部服务器或应用程序信息可以提高系统的安全性。

结构
--

URL通常包含路径、脚本名称和查询字符串。查询字符串参数规定要在页面上显示的内容，并且经常包含不透明或与用户无关的信息，例如数据库中值的内部数字标识符、难以 辨认的编码数据、会话 ID、实现细节等。相比之下，干净的URL仅包含资源的路径，其层次结构反映了用户可以轻松解释和操作的某些逻辑结构。 

| 最初的URL | 干净的语义URL |
| --- | --- |
| `http://example.com/about.html` | `http://example.com/about` |
| `http://example.com/user.php?id=1` | `http://example.com/user/1` |
| `http://example.com/index.php?page=name` | `http://example.com/name` |
| `http://example.com/kb/index.php?cat=1&id=23` | `http://example.com/kb/1/23` |
| `http://zh.wikipedia.org/w/index.php?title=Clean_URL` | `http://zh.wikipedia.org/wiki/Clean\_URL` |

实现
--

语义URL的实现涉及通过模式匹配或透明重写技术进行URL映射。由于这通常发生在服务器端，因此语义URL通常是用户看到的唯一形式。 

出于搜索引擎优化的目的，网络开发人员经常利用这个机会在URL中包含相关关键字并删除不相关的单词。删除的常见单词包括冠词和连词，同时添加描述性关键字以提高用户友好性并提高搜索引擎排名。

片段标识符可以包含在语义URL的末尾以供页面内引用，并且不需要是用户可读的。

slug 通常是根据页面标题自动生成的，但也可以手动输入或更改，因此，虽然页面标题仍然设计用于显示和人类可读性，但其 slug 可以针对简洁性或供搜索引擎使用进行优化，并提供 共享裸 URL 的接收者大致了解该页面的主题。 长页面标题也可能被截断，以将最终 URL 保持在合理的长度。

段头可以完全小写，重音字符替换为拉丁字母中的字母，空白字符替换为连字符或下划线以避免被编码。 标点符号通常会被删除，有些还删除简短的常用单词，例如连词。 例如，标题"这个、那个、还有那个！" Outré Collection 可以生成一个由 this-that-other-outre-collection 组成的 slug。

URL slug 的另一个好处是可以方便地从一长串没有页面标题的 URL 中找到所需的页面，例如使用浏览器扩展导出的打开选项卡的最小列表，以及预览目标的大致标题的能力 浏览器中的页面（如果超链接到无标题）。

如果本地保存网页的工具使用最后一个斜杠后面的字符串作为默认文件名（如 wget 那样），则 slug 会使文件名更具描述性。

使用 slugs 的网站包括在斜线后带有问题标题的 Stack Exchange Network，以及带有 ?taken-by=username URL 参数的 Instagram。[6][7]

### Slug

Slug是网站开发中常用术语，该名称来源于新闻媒体中使用的slug（英语：）一词，表示内部使用的文章的简称。因此意指以文章标题生成简短、可读性强的URL，通常用于文章、页面或产品的永久链接。它主要由小写字母、数字和连字符组成，能够更好地代表内容，并有利于搜索引擎优化。

某些系统将slug定义为URL的一部分，以人类可读的关键字标识页面。它通常是URL的结尾部分（特别是路径/路径信息部分），可以解释为资源的名称，类似于文件名中的Basename或页面标题。

slug通常是根据页面标题自动生成的，但也可以手动输入或更改，因此，虽然页面标题仍然设计用于显示和人类可读性，但其slug可以针对简洁性或搜索引擎优化，并让共享的裸URL的接收者大致了解该页面的主题。长页面标题也可能被截断，以将最终URL保持在合理的长度。

段头可以完全小写，重音字符替换为拉丁字母中的字母，空白字符替换为连字符或下划线以避免被编码。标点符号通常会被删除，有些还删除简短的常用单词，例如连词。 例如，标题"This, That, and the Other! An Outré Collection" Outré Collection 可以生成slug为`this-that-other-outre-collection`。

URL slug的另一个好处是可以方便地从一长串没有页面标题的URL中找到所需的页面，例如使用浏览器扩展导出的打开选项卡的最小列表，以及预览目标的大致标题的能力。

如果本地保存网页的工具使用最后一个斜杠后面的字符串作为默认文件名（如wget所为），则slug会使文件名更具描述性。

使用slugs的网站包括在斜线后带有问题标题的Stack Exchange Network，以及带有`?taken-by=*username*` URL参数的Instagram。

参见
--

* 資訊架構
* 固定链接

参考文献
----

1. 1 2 3  Opitz, Pascal.. Content with Style. 28 February 2006  [9 September 2010]. （原始内容存档于6 January 2012）.
2. ↑  Berners-Lee, Tim.. Style Guide for online hypertext. W3C. 1998  [6 March 2011].
3. ↑ . RFC 3986. Internet Engineering Task Force.  [2 May 2014].
4. ↑  Slug in the WordPress glossary
5. ↑  Slug in the Django glossary
6. ↑ . Meta Stack Exchange. 2011-10-10.
7. ↑ . Fossbytes. 2017-08-04.

外部链接
----

* URL as UI, by Jakob Nielsen
* The User Interface of URLs
* Cool URIs don't change, by Tim Berners-Lee