Facebook开放图谱错误 - 推断属性

41

我正在尝试在我的产品页面上实现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."/>

接下来是一个'like'按钮的代码:

(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'));

在我看来,所有的东西似乎都是从Facebook开发者页面中找到的,但当我'喜欢'时,Facebook似乎只会选取页面标题和一般信息。

我尝试使用他们的对象调试器'debug'页面,结果出现了以下警告:

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的指示,但我没有成功。我做错了什么吗?


你能检查一下这个吗?http://facebook.stackoverflow.com/questions/11146635/facebook-like-button-og-tags - Thommie
7个回答

55

这些标签是在'http://www.mywebaddress.com'上吗?

请注意,代码检查器将遵循og:url标签,因为此标签应指向内容的规范URL。因此,如果您有一个页面,例如'http://mywebaddress.com/article1',其中包含指向'http://mywebaddress.com'的og:url标签,则Facebook将访问该页面并读取那里的标签。

如果没有这样做,则看起来正确的标签未能被检测出的最常见原因是用户代理检测返回与Facebook爬虫不同的内容,而与您手动检查时看到的内容不同。


1
哦,有时候我真想踢自己!似乎这个方法起作用了,谢谢你,Igy :) - Dan
1
我猜Facebook的某个人行动太快,弄坏了一些东西,因为我根本无法让它工作,Facebook只会选择另一张图片。他们有一个在线调试器,你输入URL,那个甚至对Facebook的URL也显示错误。 - adrianTNT
只向 Facebook 显示 OG 标签,这太愚蠢了。为什么要排除使用此元信息的 Twitter 或其他服务呢?! - Daniel W.
@Dan 那你的问题是什么?我也遇到了同样的问题,但从你的回复中看不出Igy的回复哪一部分是关键。 - Andrew-ThinkUp
1
你救了我的一天!感谢你指出这个被忽视的错误。 - Imtiaz

24

在最后一组引号后面需要加一个空格。

<meta property="og:url" content="http://www.mywebaddress.com"/>

应该是这样的……像这一个

<meta property="og:url" content="http://www.mywebaddress.com" />

7
FYI,自闭合标签不受空格的影响,加入空格是最佳实践,但对解析器没有任何影响。 - Joshua Barker
4
@JoshuaBarker 实际上,在我加入空格之前,它对我没起作用。 - manishie
4
加了空格后,我的也开始正常工作了,不过我同意加空格不应该有影响。可能是 Facebook 端的 bug? - Evan Knowles
1
谢谢。我也遇到了同样的问题,按照你所说的加了一个空格后解决了。 - Mukesh Chapagain
1
(!)认真的脸书吗?谢谢@用户。 - user5306470
显示剩余2条评论

16

更新 2020 年: "Open Graph Object Debugger" 已停止使用。请使用“分享调试器”刷新 Facebook 缓存。


有关Facebook工具和文档的问题存在一些混淆。很多人可能使用Sharing Debugger工具来检查他们的OpenGraph标记: https://developers.facebook.com/tools/debug/sharing/ 但是它只能从Facebook缓存中检索您网站的信息。这意味着在您更改网站上的ogp标记后,Sharing Debugger仍将使用旧的缓存数据。此外,如果Facebook服务器上没有缓存数据,则Sharing Debugger将显示错误:This URL hasn't been shared on Facebook before. 因此,解决方案是使用另一个工具-Open Graph Object Debuggerhttps://developers.facebook.com/tools/debug/og/object/ 它允许您获取新的抓取信息并刷新Facebook缓存:

Open Graph Object Debugger

说实话,我不知道如何在developers.facebook.com工具和支持部分中找到这个工具 - 我找不到任何链接和提及。我只有在我的书签中才能找到这个工具。这就是Facebook :)

使用 'property'-属性

我还注意到一些开发者使用name属性而不是property。许多解析器可能会正确处理这样的标签,但是根据The Open Graph protocol,我们应该使用property而不是name

<meta property="og:url" content="http://www.mywebaddress.com"/>

使用完整的URL

最后一个建议是指定完整的URL。例如,Facebook在og:image中使用相对URL时会出现问题。因此,请使用完整的URL:

<meta property="og:image" content="http://www.mywebaddress.com/myimage.jpg"/>

不错的工具。由于缓存问题,我使用其他FB工具时遇到了问题。 - redeemefy
2
使用 property 对我很有帮助。这有点令人困惑,因为在 HTML 规范级别上似乎没有定义 property 属性。 ¯\(ツ) - Kirk Woll

5
如果有人遇到类似问题,希望以下内容能够帮助到你。出现此错误是因为我的页面很久没有被Facebook抓取,这是一个旧错误。在页面上有一个"再次抓取"的按钮,点击后问题得到了解决。

1

这可能会帮助一些人解决Facebook无法正确读取Open Graph的问题...

查看使用Firefox、Chrome或其他桌面浏览器生成的源代码,并确保在doctype行或head标签之前没有空白行... 如果有,Facebook将会大发脾气并扔掉它的玩具!(最好的描述!)删除空白行-让Facebook高兴...我花了大约1.5-2个小时才发现这个问题!


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的路径有误 - 一旦我纠正了这个问题,所有这些问题立即消失了。

0
在我的情况下,源代码中的意外错误通知阻止了 Facebook 爬虫解析(正确设置的)og-meta 标签。
我使用了 HTTP_ACCEPT_LANGUAGE 头,对于常规浏览器请求来说效果很好,但对于爬虫来说却不行,因为它显然不会使用/设置它。
因此,对我来说至关重要的是使用 Facebook 的调试器功能 查看我们的爬取器针对您的 URL 所看到的内容,因为只有在那里才能看到错误通知(而不能通过常规的“查看源代码”浏览器功能)。

screenshot of the facebook debugger


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接