在Facebook中共享URL不会引入og:标记信息,直到通过调试器运行(即使调试器没有给出错误)

时间:2012-05-14 20:00:38

标签: facebook opengraph sharing

以下是一个示例网址:

http://www.motherjones.com/mojo/2012/05/reince-priebus-lgbt-workplace-discrimination

以上用于在粘贴到Facebook状态更新框时不提取图像,标题或说明 - 它仍然是一个裸URL。然后我通过调试器运行它,没有发现任何问题。现在,它会在粘贴到状态更新框中时显示标题,图像和说明。

为了比较,这是我尚未调试的帖子。粘贴到更新框时,它不会转换。然而,只要我或其他任何人通过调试器运行它,它就会开始引入标题(尽管这个没有图像或描述)。

http://www.motherjones.com/kevin-drum/2012/05/health-insurers-required-credit-obama-when-sending-out-rebate-checks

这可能只是一个时间问题 - FB在我们的网页上准备元数据的速度很慢 - 但我们注意到共享开始正常工作需要数小时甚至数天。这篇文章在流量达到顶峰之后很久,所以它对我们没什么好处。

我们在4月9日左右开始看到这一点。

我的问题:我们的网页有什么东西让Facebook慢慢刮掉它们吗?我错过了什么?如果有问题,为什么调试器不告诉我?看起来似乎有一个稍微更新版本的doctype尝试,但这似乎不是罪魁祸首。另外 - 是否有任何理由我不应该在发布时编写一个钩子来通过调试器运行所有内容?

1 个答案:

答案 0 :(得分:2)

Facebook将报废数据缓存在一起,以便在用户分享时更快地响应。 在Like Button的文档中,它说:

  

Facebook什么时候刮我的页面?

     

Facebook需要抓住你的页面以了解如何展示它   该网站。

     

Facebook每24小时擦除一次页面以确保属性   最新。当Open Graph的管理员也会抓取该页面   页面单击Like按钮,并在URL输入时   Facebook URL Linter。 Facebook会在您的网址上观察缓存标头 - 它   将按优先顺序查看“Expires”和“Cache-Control”。   但是,即使你指定了更长的时间,Facebook也会刮掉你的   每24小时一次。

     

刮刀的用户代理是:“facebookexternalhit / 1.1   (+ HTTP://www.facebook.com/externalhit_uatext.php)“

正如您所看到的,当您使用linter(也称为调试工具)时,它会清除已使用URL的缓存并将其替换为新数据,这就是您在调试页面后获得不同共享结果的原因。 它并不恰到好处,但你说有时需要几天,但也许他们的文档在这个问题上并不完全准确,毕竟他们有很多东西要废弃。

如果页面是新的,那就是它之前没有报废,没有缓存,你应该在共享时得到正确的结果,只有当你需要清除缓存时才更改og数据。 因此,如果您更新报废页面的数据,请务必稍后进行调试,您只需向服务器端调试工具中使用的相同URL发出http请求,您无需使用Web界面。

如果事情仍然无法正常工作,您可以检查传入请求的用户代理字符串并与之进行比较  facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)如果匹配日志您发回的响应,则将其与共享时获得的结果进行比较,如果不一致则尝试提交错误报告。 至于“挂钩”每个发布的调试器请求,我建议反对它,似乎不必要的流量如果的东西按预期工作。我认为最好先解决问题,然后再使用一种解决方法。