Facebook 的 Open Graph 抓取器获取速度慢 og:image?
Facebook's Open Graph scraper slow to fetch og:image?
上下文
我是 运行 一个基于 https 的站点,用户可以在其中创建和共享新内容(每个条目都有自己的页面)。
每个页面都有一张图片,这张图片 url 出现在页面顶部的 og:image
元标记中。
问题
Facebook 在 og:image
上的接收速度似乎很慢。当页面首次创建并且用户尝试共享 URL 时,对于前 ~1-3 次尝试,og:image
不会被 Facebook 抓取/呈现(标题和描述是)。之后,图像在共享对话框中清晰可见。
使用 Facebook 的 OG URL 调试工具时也会出现类似的问题。我第一次弹出 URL 时,它没有显示图像。如果我选择再次从源获取页面,它会显示图像。
补充说明
起初,我认为可能是站点代码最初没有显示图像,但我发送了一个 curl 请求并欺骗了 Facebook 的用户代理字符串之一(这对访问页面很重要)并且结果 HTML 包含带有正确图像 URL 的 og:image
标签。我也知道这与访问页面没有任何关系,或者 og:title
和 og:description
数据不会显示(但它是)。
我唯一的线索是它可能是 SSL 或 HTTPS 问题。我最近设置了 SSL 证书,但我不确定为什么这会导致延迟,因为它根本无法工作。
为了清楚起见,该站点在标准 LAMP 堆栈之上的 WordPress 上运行。
这个问题显然是一个相当普遍的问题。解决方案是,在创建内容时,使用内容 URL 向 facebook 的抓取工具发送请求。抓取器将拾取并处理图像,从而允许第一个共享已将图像缓存在 Facebook 中。
是的,我也注意到了这一点。 Facebook 缓存 og:image 需要很长时间。 Tumblr 会自动完成。除了糟糕的编程之外,我能想象 Facebook 这样做的唯一原因可能是因为他们有一个审查团队滚动浏览缩略图以阻止裸露和其他粗略的图像。如上所述,在创建时手动点击 Facebook 分享 url 将提示他们缓存它,希望在其他人点击之前。
一年前我就分析过这个问题。我有同样的问题。 og:image
元标记仅在多次重新抓取尝试后才更新。
这个re-scraping可以在这个页面轻松触发https://developers.facebook.com/tools/debug/
根据我以前的分析,这种行为的根本原因是 FB 爬虫似乎有一个非常非常短的超时时间。如果内容页面没有很快回复爬虫请求,FB 不会考虑这个回复。即使内容页面提供了正确的元数据和有效的 HTTP/200 回复,FB 也会忽略它,因为 "too late is too late".
除了 Sean 已经描述的 "prescraping" 之外,我没有找到任何解决方案。
在我的案例中,我有一个带有 HTTPS 设置但没有安装 SSL 证书的 azure WebApp。由于它处于生产阶段,我通过恢复到 HTTP 进行了测试。检测到所有 "og" 个标签。
因此,如果您的 SSL 配置不正确 and/or Facebook 给出 CURL SSL 错误,查看 SSL 可能会有所帮助。
上下文
我是 运行 一个基于 https 的站点,用户可以在其中创建和共享新内容(每个条目都有自己的页面)。
每个页面都有一张图片,这张图片 url 出现在页面顶部的 og:image
元标记中。
问题
Facebook 在 og:image
上的接收速度似乎很慢。当页面首次创建并且用户尝试共享 URL 时,对于前 ~1-3 次尝试,og:image
不会被 Facebook 抓取/呈现(标题和描述是)。之后,图像在共享对话框中清晰可见。
使用 Facebook 的 OG URL 调试工具时也会出现类似的问题。我第一次弹出 URL 时,它没有显示图像。如果我选择再次从源获取页面,它会显示图像。
补充说明
起初,我认为可能是站点代码最初没有显示图像,但我发送了一个 curl 请求并欺骗了 Facebook 的用户代理字符串之一(这对访问页面很重要)并且结果 HTML 包含带有正确图像 URL 的 og:image
标签。我也知道这与访问页面没有任何关系,或者 og:title
和 og:description
数据不会显示(但它是)。
我唯一的线索是它可能是 SSL 或 HTTPS 问题。我最近设置了 SSL 证书,但我不确定为什么这会导致延迟,因为它根本无法工作。
为了清楚起见,该站点在标准 LAMP 堆栈之上的 WordPress 上运行。
这个问题显然是一个相当普遍的问题。解决方案是,在创建内容时,使用内容 URL 向 facebook 的抓取工具发送请求。抓取器将拾取并处理图像,从而允许第一个共享已将图像缓存在 Facebook 中。
是的,我也注意到了这一点。 Facebook 缓存 og:image 需要很长时间。 Tumblr 会自动完成。除了糟糕的编程之外,我能想象 Facebook 这样做的唯一原因可能是因为他们有一个审查团队滚动浏览缩略图以阻止裸露和其他粗略的图像。如上所述,在创建时手动点击 Facebook 分享 url 将提示他们缓存它,希望在其他人点击之前。
一年前我就分析过这个问题。我有同样的问题。 og:image
元标记仅在多次重新抓取尝试后才更新。
这个re-scraping可以在这个页面轻松触发https://developers.facebook.com/tools/debug/
根据我以前的分析,这种行为的根本原因是 FB 爬虫似乎有一个非常非常短的超时时间。如果内容页面没有很快回复爬虫请求,FB 不会考虑这个回复。即使内容页面提供了正确的元数据和有效的 HTTP/200 回复,FB 也会忽略它,因为 "too late is too late".
除了 Sean 已经描述的 "prescraping" 之外,我没有找到任何解决方案。
在我的案例中,我有一个带有 HTTPS 设置但没有安装 SSL 证书的 azure WebApp。由于它处于生产阶段,我通过恢复到 HTTP 进行了测试。检测到所有 "og" 个标签。 因此,如果您的 SSL 配置不正确 and/or Facebook 给出 CURL SSL 错误,查看 SSL 可能会有所帮助。