7

这是一个示例网址:

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 版本可以尝试,但这似乎不太可能是罪魁祸首。另外——有什么理由我不应该写一个钩子来在发布时通过调试器运行所有东西吗?

4

1 回答 1

2

Facebook 将废弃的数据缓存在他们身边,以便在用户分享时更快地响应。在Like Button的文档中它说:

Facebook 什么时候抓取我的页面?

Facebook 需要抓取您的页面以了解如何在网站周围显示它。

Facebook 每 24 小时抓取一次您的页面,以确保属性是最新的。当 Open Graph 页面的管理员单击 Like 按钮以及将 URL 输入 Facebook URL Linter 时,该页面也会被抓取。Facebook 会观察您 URL 上的缓存标头 - 它会按优先顺序查看“过期”和“缓存控制”。但是,即使您指定更长的时间,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),如果它匹配记录您发回的响应,然后将其与您在共享时获得的结果进行比较,如果它不一致尝试提交错误报告。至于每次发布时“挂钩”调试器请求,我建议不要这样做,如果事情按预期工作,这似乎是不必要的流量。我相信解决问题比使用变通方法更好。

于 2012-05-15T00:18:42.990 回答