首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于Ajax网站的OpenGraph

基于Ajax网站的OpenGraph
EN

Stack Overflow用户
提问于 2012-01-17 22:56:56
回答 3查看 14K关注 0票数 14

我有一个网站,这是完全基于Ajax(散列导航)。

有没有办法使用Javascript为基于ajax的网站刷新Open Graph元标记?(当我点击一个链接时,标签和这些值应该会改变)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-17 23:17:25

不是的。开放图形标记必须出现在超文本标记语言页面,这是GETable与纯超文本传输协议。

这是因为当用户与OG对象交互(例如,执行操作等)时,Facebook将在OG URL上执行HTTP GET,并期望在标记中看到返回的OG标记。

解决方案是为每个对象创建规范的URL。这些URL包含基本的HTML标记,包括OG标记。

在对这些URL的请求中,如果您看到传入的useragent字符串包含'facebookexternalhit‘,那么您将呈现HTML。如果您不这样做,您将提供一个302,它将重定向到您的ajax URL。在ajax URL上,like按钮和您发布的任何OG操作都应该指向规范的URL对象

示例:

作为一个用户,我使用的是http://yoursite.com/#!/artists/monet。我单击了一个like按钮,或者发布了一个操作,但是like按钮的href参数,或者当您发布操作时对象的URL应该是该对象的web可点击的规范URL -在本例中,可能是http://yoursite.com/artists/monet

当使用浏览器的用户点击http://yoursite.com/artists/monet时,你应该将他们重定向到http://yoursite.com/#!/artists/monet,但是如果传入的用户代理说这是Facebook的抓取器,你只需返回代表艺术家莫奈的标记即可。

有关真实世界的示例,请参见Deezer、Rdio和Mog,他们都使用此设计模式。

票数 52
EN

Stack Overflow用户

发布于 2013-02-22 20:59:29

再多做一点调查就会得出以下结论:

假设您创建了一个散列如下的应用程序:

代码语言:javascript
运行
复制
http://yoursite.com/#/artists/monet

Facebook的抓取器将调用你的网址,而不是/#/artists/monet部分。这是一个问题,因为您无法知道必须将哪些信息解析到meta og: tags中。

然后尝试使用建议的url,就像Simon说的:

代码语言:javascript
运行
复制
http://yoursite.com/#!/artists/monet

现在你会注意到Facebook的抓取器遵守了google ajax specifications,它会将#!转换成?_escaped_fragment_=,所以URL看起来像这样:

代码语言:javascript
运行
复制
http://yoursite.com/?_escaped_fragment_=/artists/monet

你可以用facebook的调试器自己检查一下:https://developers.facebook.com/tools/debug

将php脚本上传到您的服务器

  • 使用/#/部件转到facebook

  • /#/

  • 单击‘查看我们的抓取器为您的url看到的内容’-再次使用/#!/

  • click‘查看我们的抓取器为您的url看到的内容’-没有哈希再次使用‘查看您的URL的搜索器看到的内容’-哈希片段已转换为

?_escaped_fragment_=

脚本

代码语言:javascript
运行
复制
<html>
  <head>
    <title>Scraping</title>
  </head>
  <body>
    <?
      print_r($_SERVER);
    ?>
  </body>
</html>

或者总结:始终使用/#!/ (哈希)深度链接;)

票数 33
EN

Stack Overflow用户

发布于 2016-05-18 00:35:22

我运行了一个似乎有效的快速测试。依赖于FB刮板不运行JavaScript这一事实。

由于我的大多数站点都是静态的单页面应用程序,没有服务器逻辑,所以我可以使用Grunt和Gulp等工具快速生成静态页面。

如果您共享http://wh-share-test.s3-website-eu-west-1.amazonaws.com/test

当用户点击JS重定向到/#/test的链接时,Facebook将抓取测试页面的meta标签,以便我的单页面应用程序做出反应并显示正确的视图。

看起来有点老生常谈,但很管用;

代码语言:javascript
运行
复制
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>This is a shared item</title>
</head>
<body>
    <h1>This is a shared item page.</h1>
    <script>
        var path = window.location.pathname;
        window.location = '/#' + path;
    </script>
</body>
</html>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8896773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档