我制作了一个基于Ajax的网页。 出于兼容性原因,我做了一个“锚点导航”来支持所有浏览器和历史按钮。
现在,我有以下链接: http://www.harddance.at/#!/newsdetails/62/HoH+weibliche+Acts+bestaetigt
当用户将此链接发布到Facebook时,它看起来像这样:
我有一个“?_escaped_fragment_?”在链接描述中。 Facebook正在解析错误的内容。
抱歉我的英语不好。
答案 0 :(得分:2)
我会从这个问题OpenGraph on Ajax Based Website
中看到以下信息Open Graph标记必须存在于使用纯HTTP GETable的HTML页面上。
这是因为当用户与OG对象交互时(比如,执行操作等),Facebook将在OG URL上执行HTTP GET,并期望看到标记中返回的OG标记。
解决方案是为每个对象创建规范网址。这些URL包含基本的HTML标记,包括OG标记。
在对这些URL的请求中,如果您看到包含“facebookexternalhit”的传入useragent字符串,则呈现HTML。如果不这样做,则提供302重定向到您的ajax URL。在ajax URL上,您发布的类似按钮和任何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的刮刀,则只需返回代表艺术家Monet的标记。
对于真实世界的例子,请看Deezer,Rdio和Mog都使用这种设计模式。
答案 1 :(得分:0)
请在可能有助于您调试此问题的其他帖子上查看我的回答:
http://facebook.stackoverflow.com/a/8887746/558021
我怀疑这个问题是由于缺少og:tags
而造成的。
答案 2 :(得分:0)
现在,我看到以下“事实”:
Facebook,在“/#!/之后使用Elements创建一个GET参数。 所以,我可以为Facebook Crawler创建“OpenGraph”页面,我已经解决了我的问题! 提示有自己的“OpenGraph”页面,我来自:OpenGraph on Ajax Based Website
克里斯
if(isset($ _ GET ['_ escaped_fragment_'])和preg_match(“/ facebookexternalhit / is”,$ _SERVER ['HTTP_USER_AGENT'])){
$link_details = explode("/", strip_tags(html_entity_decode($_GET['_escaped_fragment_']))); $show_page = $link_details[1]; $show_id = urldecode($link_details[2]); $show_title = urldecode($link_details[3]); // Eventdetails if($show_page=="eventdetails") { include("./includes/opengraph_eventdetails.php"); } // Newsdetails if($show_page=="newsdetails") { include("./includes/opengraph_newsdetails.php"); } exit(); }