URL 设计是 Web 设计中常被忽视的东西,事实上 URL 非常重要,这不仅是一个网页唯一的路径,还涉及到你的站点是否干净,友好。本文讲述 URL 这个司空见惯的 Web 元素中包含的大量不应为忽视的知识,准则与最佳实践。需要注意的是 W3C 建议使用 URI 取代 URL 一说
。
关于 URL 的一些准则
首先是与 URL 有关的一些准则。
一个 URL 必须唯一地,永久地代表一个在线对象
URL 的最基本的使命是唯一地代表 Internet 上的一个对象,URL 必须和 Internet
上的对象一对一匹配。然而现实中,这很难实现,我们经常可以通过多个 URL 到达同一个页面,比如,
http://mysite.com/product/tv 和 http://mysite.com/product?name=tv,这种情形在现代
CMS 中更是比比皆是,针对这个问题,SEO moz 有一篇很好的文章,讲到了如何使用 Canonical URL 机制解决站点中的重复 URL 问题
。
URL 应该是永久的,这就要求你在站点上线前就非常严谨地规划 URL。如果有一天,你不得不更改 URL,一定使用 HTTP 301
机制,告诉浏览器和搜索引擎,你的那个 URL 所代表的对象,已经搬迁到新地址,这个机制可以保证你旧地址所获得 PR
不会被清零。
尽可能用户友好
这是 URL 设计的根本,你的 URL 应该为最终用户而设计。保持 URL 友好的一个好办法是在保证可读性的同时让它尽可能短。比如
/about 就好过 /about-acme-corp-page,当然,保持简短不能牺牲可读性, /13d2
一类的地址短则短矣,但并不友好。如果要在 Twitter, Facebook 一类的社会媒体网络分享你的 URL,可以使用 Bit.ly
一类的网址缩短工具,但这种工具产生的缩短 URL 并不友好,在 Wordpress 一类的 CMS 中,可以使用 PrettyLink Pro
或 Short URL plugin
一类的可控制的地址缩短插件。
URL 的设计切忌使用一些对用户来说没有意义的内容,比如数据库的 ID 号, /products/23 这样的 URL 地址对用户是极不友好的,应当使用 /products/ballpoint-pen 一类的地址。
保持一致性
站点内的所有 URL 必须保持一致的格式和结构,这样可以为用户带来信任感,如果你必须更改 URL 格式和结构,需要使用 HTTP 301 机制。
可预测的 URL
这也是 URL 一致性的一个表现,如果你的 URL 拥有很好的一致性,用户可以根据 URL 猜测别的内容的 URL,假如 /events/2010/01 指向 2010 年 1 月份的日程内容,那
-
/events/2009/01 应当指向 2009 年 1 月的日程。
-
/events/2010 应当指向 2010 年全年的日程。
-
/events/2010/01/21 应当指向2010年1月21日的日程。
URL中的关键词
URL 中应该包含本页重点内容的关键词,比如 /posts/2010/07/02/trip-best-buy-memory-cards
一类的 URL 本身就是对页面内容的反应。在 URL 包含重点内容关键词,也可以提高 SEO 性能。SEO 的一个很重要的原则就是,在 URL
地址中包含内容关键词。
关于 URL 的技术细节
下面说的是有关 URL 的一些技术细节。
URL 不应包含 .html, aspx, cfm 一类的后缀
这类信息对最终用户是没有意义的,却占了额外的空间,一个例外是 .atom, .rss, .json 一类的特殊地址,这类地址是有特别的意义的。译者注:在某些虚拟主机式 Web 服务器,这种做法未必现实。
URL 不应包含 WWW 部分
WWW 部分并不包含任何意义,是一个额外的负担,不友好。可以使用 HTTP 301 机制,将 www.domain.com 定向到 domain.com 。
URL 的格式
URL 的格式如下:
domain.com/[key information]/[name]/?[modifiers]
Key information 部分一般代表信息的类型或类别。Modifiers
部分则属于查询字符串范畴,它不应当代表数据结构,应当代表数据的修饰。Key information
部分应当尽可能简短,同时应当表现出一种层级关系,比如
http://domain.com/posts/servers/nginx-ubuntu-10.04,或
http://domain.com/news/tech/2007/11/05/google-announces-android。
Google News 对新闻源有一个有趣的要求
,Google 要求新闻源页面的 URL 中必须包含至少 3 位唯一的数字,因为他们会忽略年份数字,因此,应该使用一个5位或5位以上的数字。另外,也应该提供 Google News 站点地图
。如果你想向 Google 提供新闻,必须按这样的结构提供 URL,当然保持一致性,可以预测性也是必需的。
使用小写字符
URL 中所有字符都应使用小写,这更容易阅读。
URL 中包含的行为元素
URL 查询字符串中可能包含一些表示行为的元素,比如 show, delete, edit 等。非破坏性的行为可以体现在 URL 中,破坏性的行为应该使用 POST 。
使用 URL 友好字符
在 URL 中体现网页标题的时候,往往会用到一些特殊字符,应当把它们转换为 URL 友好字符:
-
全部大写字符换成小写
-
诸如 é 一类的字符应转换成对应的 e
-
空格使用短划线代替
-
诸如 !, @, #, $, %, ^, &, * 一类的字符应该使用短划线代替
-
双短划线应该使用单短划线代替
另外,没有必要的话,避免使用 %20 一类的 URL 逃逸符。
更多观点
Chris Shiflett
建议,可以使用一些类似句子的 URL,如:
chriscoyier.net/authored/digging-into-wordpress/
chriscoyier.net/has-worked-for/chatman-design/
chriscoyier.net/likes/trailer-park-boys
jacobwg.com/thinks/this-post/is/basically-done
译者补充:URL 的长度上限
URL 的最大长度是多少?W3C 的 HTTP 协议
并没有限定,然而,在实际应用中,经过试验,不同浏览器和 Web 服务器有不同的约定:
-
IE 的 URL 长度上限是 2083 字节,其中纯路径部分不能超过 2048 字节。
-
Firefox 浏览器的地址栏中超过 65536 字符后就不再显示。
-
Safari 浏览器一致测试到 80000 字符还工作得好好的。
-
Opera 浏览器测试到 190000 字符的时候,还正常工作。
Web 服务器:
-
Apache Web 服务器在接收到大约 4000 字符长的 URL 时候产生 413 Entity Too Large" 错误。
-
IIS 默认接收的最大 URL 是 16384 字符。
本文国际来源:css-tricks.com
Guidelines for URI Design
中文翻译来源:锐商企业CMS
网站内容管理系统
官方网站
相关推荐
### 软件工程师不可不知的10个概念 在当今快速发展的信息技术领域,软件工程师作为推动技术进步的关键角色之一,必须掌握一系列核心概念和技术。本文将深入探讨这些概念,并结合部分给定的内容进行详细解释。 ####...
雅虎作为曾经的互联网巨擘,在某些特定领域仍具有不可忽视的优势。 **雅虎搜索引擎顶级使用技巧之二** 例如利用雅虎财经进行股市分析等。 通过以上内容,我们可以看到网络搜索不仅涉及到了搜索引擎本身的应用技巧...
《通俗易懂的WordPress函数简明教程》是一篇专为WordPress初学者编写的教程,源自月夜的《用好WordPress不可不知的函数》。本文旨在帮助读者理解和掌握WordPress中的常用函数,以便更好地自定义和优化自己的博客。...
- **String** 是一个不可变类,意味着一旦创建,其内容就不能更改。这是由于String在Java中被声明为final,确保了它的不可变性。 - **StringBuffer** 和 **StringBuilder** 都是用来处理可变字符串的类。它们在...
这段代码在博客首页可能显示为:“月夜 – 分享网络知识·享受快乐生活”,在文章页则可能显示为:“用好WordPress不可不知的50个函数 | 月夜 – 分享网络知识·享受快乐生活”。 #### 3. `wp_get_archives()` 函数...
从中可以看到既定的设计是当不返回任何值的时候应该等同于返回true,但是笔者在开发中发现必须明确返回值,否则上传进程将停止响应,不知是否是一个bug呢? - 传入参数 file object:文件对象 + ...
1.“世间安得有奇…”(姚羹湖)之言——世间确有奇,且未必事事都可解,不可解处不必强解,不能解未必是无知。马未都先生论收藏曾言此,杨琪老师讲梵高曾言此。 2.“考据家不足与言诗”(张箦斋)——就像读史必究...
以下是一些关键知识点: 1. **解析HTML**:Jsoup可以将HTML字符串或文件转换为一个`Document`对象,这个对象代表了整个HTML文档的结构。例如,可以使用`Jsoup.parse()`方法来解析HTML内容。 2. **选择器(Selector...
* fxnotifyurl:异步通知地址,是异步接收支付结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数。 * fxbackurl:同步通知地址,是支付成功后跳转到的地址,不参与签名。 * fxpay:请求类型,是请求...
IOC使得对象之间的依赖关系得以解耦,提高了代码的可测试性和可维护性;而AOP则允许开发者在不修改原有业务逻辑的情况下,插入额外的功能,如日志记录、事务管理等。 SpringMVC是Spring框架的一部分,专门用于处理...
在Android平台上,音频和视频的播放是移动应用开发中不可或缺的一部分。本文将深入探讨如何在Android中使用不同的组件和技术来实现音频和视频的播放功能,包括`MediaPlayer`媒体播放器、`SoundPool`音效池以及`...
MySQL则是一款开源的关系型数据库管理系统,以其高速、稳定和可扩展性闻名,是处理大量数据的理想选择。 在系统设计上,"休闲斗地主小游戏 v1.0"遵循了经典的三人斗地主规则,这是一种流行于中国的扑克牌游戏,玩家...
本书既考虑到实际开发中经常遇到的困惑和难题,也分析了解决问题的思路和方法,更总结出项目开发中不可或缺的技术点及思想。读者可以在欣赏一个个有趣例子的过程中,不知不觉具备开发真正商业项目的能力。 本书集...
本书既考虑到实际开发中经常遇到的困惑和难题,也分析了解决问题的思路和方法,更总结出项目开发中不可或缺的技术点及思想。读者可以在欣赏一个个有趣例子的过程中,不知不觉具备开发真正商业项目的能力。 本书集...
它允许我们在不刷新整个页面的情况下导航到不同的URL,提供路由配置和组件化的路由。 4. **API接口调用** - **获取电影数据**:项目可能通过调用第三方API,如IMDb或The Movie Database (TMDB),获取电影信息。这...
【标题】"仿探探交友小程序源码,修复版充值接口 7.0.2" 涉及的知识点: 1. **小程序开发**:此项目是一个基于微信小程序的社交应用,模仿了知名的探探应用,提供用户交友功能。小程序是一种轻量级的应用形态,无需...