我正在尝试在 Facebook 上从我的应用程序中分享此 URL: http ://www.example.com/#!v;id=NH1NlYov3bKJ
但是,它会自动替换为: http ://www.example.com/?_escaped_fragment_=v%3Bid%3DNH1NlYov3bKJ
此 URL 错误,无法从网页中检索到正确的标题、描述和图片。我能做些什么?谢谢
我正在尝试在 Facebook 上从我的应用程序中分享此 URL: http ://www.example.com/#!v;id=NH1NlYov3bKJ
但是,它会自动替换为: http ://www.example.com/?_escaped_fragment_=v%3Bid%3DNH1NlYov3bKJ
此 URL 错误,无法从网页中检索到正确的标题、描述和图片。我能做些什么?谢谢
为什么您的 URL 包含序列#!
?你能改变它吗?由于 ajax 内容不可抓取,因此序列是(Google)规范的一部分,以使该内容可抓取,并且大多数互联网大鱼现在都在使用它。
它是如何工作的?假设您有一个像www.example.com/folder#!id=4
. 表示url的某些内容是ajax传递的,它依赖于id=4的信息,称为hash。谷歌爬虫将尝试读取页面www.example.com/folder?_escaped_fragment_=id=4
,根据规范,爬虫希望找到同一页面的无 ajax 版本。
我一点也不喜欢它,但它确实有效,这就是 Twitter、Facebook、Groveshark 和许多其他大鱼都在使用该规范的原因。因此,当您在 facebook(一个 100% ajax 页面)中分享一首grooveshark 歌曲时,facebook 知道在哪里可以找到同一页面的非 ajax 版本。但正因为如此,Facebook 也在尝试更改您的网址。
#!
根据 Google 的指南,停止使用或处理转义片段查询。
每个包含以感叹号开头的哈希片段的 URL 都被视为#! 网址。请注意,任何 URL 最多可以包含一个哈希片段。每个漂亮的 (#!) URL 都有一个对应的丑陋 (_escaped_fragment_) URL,它是通过以下步骤派生的:
- 哈希片段成为查询参数的一部分。
- 哈希片段在查询参数中通过在它前面加上 _escaped_fragment_= 来指示
- 当哈希片段成为查询参数的一部分时,某些字符会被转义。下面列出了这些字符。
- URL 的所有其他部分(主机、端口、路径、现有查询参数等)保持不变。
在这种情况下,Facebook 最初是在执行这个从漂亮到丑陋(或客户端动态到可抓取)的步骤。请记住,_escaped_fragment_
表单应生成可重复的快照。
我知道哈基,但我即将使用 .htaccess 和 mod_rewrite 来捕获 _escaped_fragement_ url。就我而言,这是因为我制作了一个纯 .html/.js 单页 web 应用程序,我需要捕捉搜索引擎何时需要快照,但您可以使用相同的技术将丑陋的 _escaped_fragment_ 重写为正确的格式为您的网站。
另一种想法是在共享之前通过快捷方式服务推送正确的 url,例如http://goo.gl/