网站设计中经常容易被大家忽视的一个因素就是URL的设计。
虽然现在的内容管理系统都允许各种不同程度的URL自定义,但默认的URL地址往往并不是就适合你的网站,在网站设计的最后一步通常要考虑对默认的URL进行替换。简洁的URL是网站非常重要的一个组成部分。
URL(资源定位符)用来指定方向,URL指向的东西可以和URL名称上毫无关系,但是可以通过URL访问到。
URI(资源标识符)用来指定资源,网络上每一个文件都有URI,通过URI可以找的到,为了资源区别实现的
但是同一个的URL在不同的时间段,可能指向的是不同的东西,是为了方便用户使用
URL背后最基本的理念就是一个URL代表互联网上的一个数据对象。
保证URL的唯一性是非常重要的,这样才能保证一个URL与一个数据对象匹配。
虽然这是我们的目标,但是有时候却也不是那么容易实现的,很多站长由于考虑不周全就会出现“重复”问题。
像谷歌这样的大型搜索引擎比较关注“重复问题”,因此强烈建议使用 canonical URL来轻松解决这个问题。
使用 Canonical URL标签可以减少重复内容被搜索引擎发现,因而可以提升网站在搜索结果中的表现。
URL还必需具有永久性。
这主要是说在网站发布之前计划URL的时就必需选一个比较好的URL设计。否则可能以后就可能会需要修改URL结构来改进。
如果真的有必要这么做时,请确保在服务器上设置了 HTTP 301永久迁移重定向。这样服务器才会告知浏览器和搜索引擎内容的新位置,同时才能保住旧的URL地址所积累的访问。
尽可能对用户友好
这点是URL设计时需要考虑的最根本因素。
URL设计时首先必需考虑最终用户。
搜索引擎优化(SEO )和是否易于开发应该放在第二位。而保持URL对用户友好的一种方式就是要使其言简意赅。
这意味着说要使用尽可能少的字符同时又能保证可用性。也就是说 /about 就比 /about-acme-corp-page来得好。
但是在争取简洁的同时,不能牺牲用户的友好性, 像 /13d2 这样的URL地址对终端用户来说一点意义都没有。相反的,在一些分享URL的场合下,却鼓励大家使用短链接。这对微薄还有其他共享的社交网站来说比较方便。
关于URL短网址服务,可以使用Bit.ly,也可以使用PrettyLink Pro (WordPress插件)或Short URL插件。
比较常见的反面例子就是使用数据库ID作为URL的一部分,如 /products/23。
最终用户并不会关心该产品在数据库中的记录号是多少, 因此,/products/ballpoint-pen这样的URL相对而言对用户更加友好。
一个站点的所有URL必需在格式上保持一致。
一旦选定一种URL结构之后,那么就一直遵照这种格式保持下去。
整个网站中只有部分URL结构比较良好的话,说明网站整体而言,URL结构还是糟糕的。
为了让用户能够明白你的URL地址是以某种格式运行的,那么整个网站的URL格式就必需要统一。如果你一定要改变结构(可能更新一个之前URL设计欠佳的网站),那么记得使用前面讲到的301重定向。
与一致性相关,URL结构应清晰明了易更改。
URL应该由该页面内容的重要关键词组成。
因此,如果一篇博客文章的标题非常长,那么只有那些对内容来说非常重要的关键词才应该出现在URL中。
例如,如果博客文章的标题是 “My Trip to Best Buy for Memory Cards,”
那么URL中那些不重要的虚词就没必要写进去了,
/posts/2010/07/02/trip-best-buy-memory-cards就足够了。
在URL中使用重要的关键词的一个好处就是可以提高SEO效果。
不要显示使用的技术语言
URL地址里不应该出现.html, .htm, .aspx或其他任何相关的语言标识。最终用户不会关心你的网站是用ASP.NET (.aspx), ColdFusion (.cfm), 还是使用服务器端嵌入(.shtml) 制作的,至少大部分用户都不会关心这一点。增加这些信息只会增加书写错误的可能性。
网站URL应该丢弃www,因为它不是必需的,与尽可能对用户友好以及不加入不必要的信息这两条原则都是相悖的。
不过,由于现在仍然有很多用户会输入www. 前缀,
因此, www.localhost.com 应该用301重定向到 localhost.com。
同样地,子域名也需要执行301重定向,将 www.subdomain.localhost.com重定向到 subdomain.localhost.com.。
domain.com/[关键信息]/[名称]/?[修饰符]
修饰符是修饰浏览情况而非数据数据模型,因此它们是查询字符串的组成部分并不是URL本身。
关键信息应该保持在最低的限度,URL不应该过分嵌套。
在关键信息部分的任何一个字词都必需对寻找该页面具有非常关键的作用。
域名http://domain.com
类型/posts
分类/servers
标题/nginx-ubuntu-10.04
例: http://domain.com/posts/servers/nginx-ubuntu-10.04
例: http://domain.com/news/tech/2007/11/05/google-announces-android
例:http://www.google.com/news/article23.html
所有字符都必需小写,URL中大小写混杂是非常不可取的。
如果用户输入的URL是大小写混杂的情况下,应该用301重定向到小写的页面。
实施起来就是将所有的请求都重定向到某个文件,这个文件脚步将301重定向到小写状态。
URL可能包含了文章的标题,而标题可能包含了对URL不友好的字符。因此文章的标题应该尽量对URL友好
首先是与 URL 有关的一些准则
一个 URL 必须唯一地,永久地代表一个在线对象
URL 的最基本的使命是唯一地代表 Internet 上的一个对象,URL 必须和 Internet 上的对象一对一匹配。
http://mysite.com/product/tv
http://mysite.com/product?name=tv
这种情形在现代 CMS 中更是比比皆是
针对这个问题,SEO moz 有一篇很好的文章,讲到了如何使用 Canonical URL 机制解决站点中的重复 URL 问题 。
如果有一天,你不得不更改 URL,一定使用 HTTP 301 机制,告诉浏览器和搜索引擎
你的那个 URL 所代表的对象,已经搬迁到新地址,这个机制可以保证你旧地址所获得 PR 不会被清零。
如果要在 Twitter, Facebook 一类的社会媒体网络分享你的 URL
可以使用 Bit.ly 一类的网址缩短工具,
但这种工具产生的缩短 URL 并不友好,在 Wordpress 一类的 CMS 中,可以使用 PrettyLink Pro 或 Short URL plugin 一类的可控制的地址缩短插件。
比如数据库的 ID 号, /products/23 这样的 URL 地址对用户是极不友好的,应当使用 /products/ballpoint-pen 一类的地址。
站点内的所有 URL 必须保持一致的格式和结构,这样可以为用户带来信任感,如果你必须更改 URL 格式和结构,需要使用 HTTP 301 机制。
这也是 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中的关键词
domain.com/[key information]/[name]/?[modifiers]
http://domain.com/posts/servers/nginx-ubuntu-10.04
http://domain.com/news/tech/2007/11/05/google-announces-android
W3C 的 HTTP 协议 没有限定 URL 长度上限,
然而,在不同浏览器和 Web 服务器有不同的约定:
IE 的 URL 长度上限是 2083 字节,其中纯路径部分不能超过 2048 字节。
Firefox 浏览器的地址栏中超过 65536 字符后就不再显示。
Safari 浏览器一致测试到 80000 字符还工作得好好的。
Opera 浏览器测试到 190000 字符的时候,还正常工作。
Apache Web 服务器在接收到大约 4000 字符长的 URL 时候产生 413 Entity Too Large” 错误
IIS 默认接收的最大 URL 是 16384 字符
而最近当我安装微软URLScan防注入工具后,竟然导致IIS中所有网站都无法访问。
起初怀疑IIS坏了,卸载IIS重装后问题依旧,后来建了个测试站点,发现凡是URL中包含“.”或非英文的路径均拒绝访问,会跳转至404错误。
Google搜索问题发现是URLScan导致的,找到了原因就可对症下药。
打开“C:\WINDOWS\system32\inetsrv\urlscan”,找到UrlScan.ini文件
修改其中两个配置节
AllowHighBitCharacters=1
AllowDotInPath=1
重启IIS生效,问题解决。