Facebook在共享时用“_escaped_fragment_”替换#!v个URL

时间:2013-02-14 17:03:00

标签: ajax facebook url gwt mvp

我正在尝试从Facebook上的应用分享此网址: http://www.example.com/#!v;id=NH1NlYov3bKJ

但是,它会自动替换为: http://www.example.com/?_escaped_fragment_=v%3Bid%3DNH1NlYov3bKJ

此网址错误,并且未从网页检索正确的标题,说明和图片。我能做什么?感谢

4 个答案:

答案 0 :(得分:8)

为什么您的网址包含序列#!?你能改变吗?由于ajax内容不可抓取,因此序列是(Google)规范的一部分,以使此内容可以抓取,并且大多数互联网大鱼现在都在使用它。

它是如何运作的?假设你有一个像www.example.com/folder#!id=4这样的网址。这意味着url的一些内容由ajax传递,它取决于信息id = 4,称为hash。 Google抓取工具会尝试读取页面www.example.com/folder?_escaped_fragment_=id=4,根据规范,抓取工具希望找到同一页面的无ajax版本。

我根本不喜欢它,但它有效,这就是为什么Twitter,Facebook,Groveshark和许多其他大鱼都在使用该规范。因此,当你在facebook(100%ajax页面)中分享groovehark歌曲时,facebook知道在哪里可以找到同一页面的非ajax版本。但是因为Facebook也试图改变你的网址。

答案 1 :(得分:6)

根据Google指南停止使用#!或处理转义片段查询。


请参阅Google's "Full Specification" for Webmasters

  

包含以感叹号开头的哈希片段的每个网址都被视为#!网址。请注意,任何URL最多可包含一个哈希片段。每个漂亮的(#!)URL都有一个相应的丑陋(_escaped_fragment_)URL,它是通过以下步骤派生的:

     
      
  • 哈希片段成为查询参数的一部分。
  •   
  • 哈希片段在查询参数中通过前面的_escaped_fragment _ =
  • 表示   
  • 当哈希片段成为查询参数的一部分时,某些字符会被转义。这些字符如下所列。
  •   
  • URL的所有其他部分(主机,端口,路径,现有查询参数等)保持不变。
  •   

在这种情况下,Facebook最初正在做这个非常丑陋(或客户端动态到可抓取)的步骤。请记住,_escaped_fragment_表单应该会生成可重复的快照

答案 2 :(得分:0)

Hacky我知道,但是我将使用.htaccess和mod_rewrite来捕获_escaped_fragement_网址。在我的情况下,这是因为我制作了一个纯粹的.html / .js单页面webapp,我需要抓住搜索引擎想要一个快照,但你可以使用相同的技术将丑陋的_escaped_fragment_重写为正确的格式为您的网站。

答案 3 :(得分:-1)

另一个想法是在共享之前通过快捷服务推送正确的网址,例如http://goo.gl/