我正在尝试在我的产品页面上实施Facebook的OpenGRaph协议。
在每个页面上,我都在头部上方:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#" xmlns:fb="http://www.facebook.com/2008/fbml">
然后在头部我有:
<meta property="og:title" content="This Page Title"/>
<meta property="og:type" content="product"/>
<meta property="og:url" content="http://www.mywebaddress.com"/>
<meta property="og:image" content="http://www.myimage.jpg"/>
<meta property="og:site_name" content="My Site Name"/>
<meta property="fb:admins" content="10101010101"/>
<meta property="og:email" content="hello@mywebaddress.com"/>
<meta property="og:description" content="Description of my product."/>
然后我在这个代码中有一个“喜欢”按钮:
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<div class="fb-like" data-href="http://thispagesurl" data-send="true" data-width="350" data-show-faces="false"></div>
在我看来,一切似乎都复制了Facebook Developers page上可以找到的东西,但当我'喜欢'时,Facebook似乎只是在页面标题和一般信息上找到了。
我尝试使用对象调试器'调试'页面,我收到这些警告:
Inferred Property The og:url property should be explicitly provided, even if a value can be inferred from other tags.
Inferred Property The og:title property should be explicitly provided, even if a value can be inferred from other tags.
Inferred Property The og:image property should be explicitly provided, even if a value can be inferred from other tags.
Inferred Property The og:locale property should be explicitly provided, even if a value can be inferred from other tags.
据我所知,我已按照Facebook的指示写信,但我没有快乐。任何人都可以指出我做错了吗?
提前致谢, 丹
答案 0 :(得分:51)
这些标签是否在“http://www.mywebaddress.com”上?
请记住,linter将遵循og:url标记,因为此标记应指向该内容的规范URL - 因此,如果您有一个页面,例如“http://mywebaddress.com/article1”的og:url
标签指向“http://mywebaddress.com”,Facebook也会去那里阅读标签。
如果做不到这一点,我看到没有被linter检测到看似正确的标签的最常见原因是用户代理检测向Facebook的抓取器返回的内容与手动检查时看到的内容不同
答案 1 :(得分:22)
在最后一组引号后需要一个空格
<meta property="og:url" content="http://www.mywebaddress.com"/>
应该......感谢这个
<meta property="og:url" content="http://www.mywebaddress.com" />
答案 2 :(得分:11)
大量的Facebook工具和文档存在一些混乱。很多人可能会使用共享调试器工具来检查他们的OpenGraph标记: https://developers.facebook.com/tools/debug/sharing/
但它只从Facebook缓存中检索有关您网站的信息。这意味着在您更改站点上的ogp-markup后,共享调试器仍将使用旧的缓存数据。此外,如果Facebook服务器上没有缓存数据,则共享调试器将显示错误:This URL hasn't been shared on Facebook before.
因此,解决方案是使用其他工具 - 打开图形对象调试器: https://developers.facebook.com/tools/debug/og/object/
它允许您获取新的抓取信息并刷新Facebook缓存:
老实说,我不知道如何找到这个工具来探索工具&amp; developers.facebook.com 的支持部分 - 我找不到任何链接和提及。我的书签中只有这个工具。那个Facebook:)
我还注意到一些开发人员使用name
属性而不是property
。许多解析器可能会正确处理这些标记,但根据The Open Graph protocol,我们应该使用property
,而不是name
:
<meta property="og:url" content="http://www.mywebaddress.com"/>
最后一项建议是指定完整的网址。例如,Facebook在og:image
中使用相对URL时会抱怨。所以使用完整的:
<meta property="og:image" content="http://www.mywebaddress.com/myimage.jpg"/>
答案 3 :(得分:5)
如果它有助于任何人我有同样的错误。事实证明我的页面在一段时间内没有被Facebook取消,这是一个古老的错误。页面上有一个用于修复它的刮擦按钮。
答案 4 :(得分:0)
这可能有助于一些正在努力让Facebook很好地阅读Open Graph的人......
查看浏览器使用Firefox,Chrome或其他桌面浏览器生成的源代码(许多手机不会查看源代码),并确保doctype行或head标记之前没有空白行。如果有Facebook会发脾气,把它的玩具扔出婴儿车! (最好的描述!)删除空行 - 快乐的Facebook ...花了我大约1.5 - 2小时来发现这个!
答案 5 :(得分:0)
在我的情况下,源代码中出现意外错误通知,阻止了Facebook搜寻器解析(正确设置的)og-meta标签。
我正在使用HTTP_ACCEPT_LANGUAGE
标头,该标头对于常规的浏览器请求正常运行,但不适用于搜寻器,因为它显然不会使用/设置它。
因此,对我而言,至关重要的是使用Facebook的调试器功能See exactly what our scraper sees for your URL
,因为错误通知只能在此处看到(但不能通过常规的“查看源代码”浏览器功能)。
答案 6 :(得分:0)
如果您指向错误的图像,或者您的图像文件路径以任何方式不正确,您将看到以下三个错误:
Bad Response Code: URL returned a bad HTTP response code.
Inferred Property: The 'og:image' property should be explicitly provided, even if a value can be inferred from other tags.
Missing Properties: The following required properties are missing: og:url, og:type, og:title, og:image, og:description, fb:app_id
就我而言,唯一的错误是我走错了通往 og:image
的路径 - 一旦我纠正了所有这些问题立即消失了。