我刚刚注意到,我们习惯使用的冗长、复杂的Facebook url现在是这样的:

http://www.facebook.com/example.profile !/页面/另一个页面/ 123456789012345

据我所知,今年早些时候,它只是一个普通的类似url片段的字符串(以#开头),没有感叹号。但是现在它是shebang或hashbang(#!),以前我只在shell脚本和Perl脚本中见过。

新的Twitter url现在也有#!符号。例如,一个Twitter配置文件的URL现在看起来是这样的:

http://twitter.com/ !/ BoltClock

是# !现在在url中扮演一些特殊的角色,比如某个Ajax框架或其他什么,因为新的Facebook和Twitter界面现在主要是Ajax化的? 在我的url中使用这个会对我的Web应用程序有任何好处吗?


当前回答

这种技术现在已弃用。

这用于告诉谷歌如何索引页面。

https://developers.google.com/webmasters/ajax-crawling/

这种技术基本上已经被使用JavaScript History API的能力所取代,该API是与HTML5一起引入的。对于像www.example.com/ajax.html#这样的URL !key=value,谷歌将检查URL www.example.com/ajax.html?_escaped_fragment_=key=value以获取内容的非ajax版本。

其他回答

首先,我是raganwald所引用的《单页界面宣言》的作者

正如raganwald解释得很好,FaceBook和Twitter中使用的单页接口(SPI)方法最重要的方面是在url中使用哈希#

角色!是仅为谷歌目的添加的,这个符号是谷歌的“标准”,用于在AJAX上爬行网站(在极端的单页面界面网站)。当谷歌的爬虫发现一个URL与#!它知道一个替代的传统URL存在,提供相同的页面“状态”,但在这种情况下,在加载时间。

尽管有#!组合是非常有趣的搜索引擎优化,只支持谷歌(据我所知),与一些JavaScript技巧,你可以建立SPI网站搜索引擎优化兼容的任何网络爬虫(雅虎,必应…)

SPI宣言和演示不使用谷歌的格式!在哈希中,这个符号可以很容易地添加,SPI爬行可以更容易(更新:现在!使用符号,并与其他搜索引擎保持兼容)。

看看这个教程,是一个简单的ItsNat SPI站点的例子,但你可以为其他框架选择一些想法,这个例子是SEO兼容的任何网络爬虫。

困难的问题是生成任何(或选定的)“AJAX页面状态”作为纯HTML进行SEO,在ItsNat是非常简单和自动的,同一站点是在同一时间SPI或基于页面进行SEO(或当JavaScript被禁用的可访问性)。对于其他web框架,你可以遵循双站点方法,一个站点是基于SPI的,另一个页面是基于SEO的,例如Twitter使用这种“双站点”技术。

我一直以为!只是指出后面的散列片段对应于一个URL,使用!取代站点根或域。理论上,它可以是任何东西,但谷歌AJAX爬行API似乎喜欢这种方式。

当然,散列只是表示没有真正的页面重新加载,所以是的,它是用于AJAX目的的。编辑:Raganwald做了一个可爱的工作,更详细地解释了这一点。

这种技术现在已弃用。

这用于告诉谷歌如何索引页面。

https://developers.google.com/webmasters/ajax-crawling/

这种技术基本上已经被使用JavaScript History API的能力所取代,该API是与HTML5一起引入的。对于像www.example.com/ajax.html#这样的URL !key=value,谷歌将检查URL www.example.com/ajax.html?_escaped_fragment_=key=value以获取内容的非ajax版本。

如果您考虑采用这种hashbang约定,我会非常小心。

Once you hashbang, you can’t go back. This is probably the stickiest issue. Ben’s post put forward the point that when pushState is more widely adopted then we can leave hashbangs behind and return to traditional URLs. Well, fact is, you can’t. Earlier I stated that URLs are forever, they get indexed and archived and generally kept around. To add to that, cool URLs don’t change. We don’t want to disconnect ourselves from all the valuable links to our content. If you’ve implemented hashbang URLs at any point then want to change them without breaking links the only way you can do it is by running some JavaScript on the root document of your domain. Forever. It’s in no way temporary, you are stuck with it.

您确实希望使用pushState而不是hashbang,因为使您的url变得丑陋并可能永远损坏是hashbang的一个巨大而永久的缺点。

为了更好地跟进这一切,Twitter (hashbang URL和单页界面的先驱之一)承认,从长远来看,hashbang系统是缓慢的,他们实际上已经开始改变决定,回到老派的链接。

关于这方面的文章在这里。