Facebook like - 显示缓存版本 og:image,刷新或重新索引的方式?

Posted

技术标签:

【中文标题】Facebook like - 显示缓存版本 og:image,刷新或重新索引的方式?【英文标题】:Facebook like - showing cached version og:image, way to refresh or reindex it? 【发布时间】:2011-11-26 05:04:17 【问题描述】:

Facebook 喜欢和缓存的 og:image 存在问题。

长话短说: Facebook 已经缓存了我们喜欢的图像的旧版本。元内容 URL 无法更改。有什么办法可以刷新吗?

长篇大论: 我正在处理的网站有一个 og:image 的元标记,Facebook 在喜欢页面时使用该标记。此元标记在站点的所有页面上使用相同的图像 URL。图片只是网站的品牌形象。

问题是该网站最近更新了他们的品牌,我们无法更新 Facebook 喜欢的图片。当用户点击点赞链接时,在 Facebook 上发布的帖子仍会显示旧的品牌形象。

元标记类似于:

<meta property="og:image" content="http://[domain].com/images/bookmark/apple-touch-icon.png"/>

每当点赞进入 Facebook 时,图片的 URL 就会更改为缓存的 Facebook URL,类似于:

http://external.ak.fbcdn.net/safe_image.php?d=AQDajxm-qgVNdfEL&w=90&h=90&url=http%3A%2F%2F[domain].com%2Fimages%2Fbookmark%2Fapple-touch-icon.png

此网址显示网站品牌的旧版本。已经一个多星期了,还没有更新。

有没有办法强制 Facebook 重新索引图像/清除它的缓存?或者,Facebook 会定期自动执行此操作吗?我找不到任何相关信息。

我知道更改元标记中的 URL 可以解决问题,但元标记是由跨多个站点使用的代码生成的,并且无法更改。我还尝试了其他人向我建议的 delinter 工具。没有运气。

【问题讨论】:

您是否在服务器上缓存页面?尝试在 URL 的末尾附加 ?123 之类的内容,然后再次尝试 Facebook 调试器。 不起作用。我确定添加查询字符串会创建一个新的缓存,但 og:image 仍然显示较旧的缓存图像。这个站点上有数百个页面,都使用相同的 og:image URL。我认为 FB 认识到这一点,并独立于类似的 URL 缓存了 og:image URL,并使用它而不是为每个喜欢的 URL 创建单独的 og:image 缓存文件。问题是,似乎没有任何方法可以清除该缓存。我可以浏览多个页面的来源,看到 og:image URL 每次都更改为相同的 external.ak.fbcdn.net.. URL。 这不是这个链接到的问题的重复。此外,正如链接问题的答案所说,2013 年的今天只是简单地重新整理 URL,实际上并不能解决缓存问题。 @cosmicbdog - 我重新打开了这个。你会给我们一个很好的答案吗? :) @Kev 不幸的是,我还没有给任何人一个很好的答案!大声笑但是如果我找到了这个问题的答案,我一定会发布它。 【参考方案1】:

将您的网址插入他们的linter,它应该会重新加载其缓存

【讨论】:

已经试过了,还是不行。结果调试器页面上的 og:image 仍然显示缓存的版本。我猜 og:image 的缓存与输入调试器的 URL 无关。 这行得通,但我首先必须更改 og:image URL(在服务器上和标签中)以获取更改。然后,您可以稍后将其更改回原始 URL,它会再次获取更改(如果您遇到 OP 无法永久更改它的问题)。另外,我认为这个问题不应该结束。这是与链接问题不同的问题。 这行得通,它是如此的蹩脚,这就是它的工作方式。现在有 200 个 URL 需要“lint” 要更改 og:image URL,只需将“?v=1”添加到图像路径。无需重命名文件。 经过几次尝试后为我工作。单击初始“调试”单击后显示的两个按钮,然后才起作用。【参考方案2】:

您可以使用 Facebook 的对象调试器,它允许您输入页面 URL,然后在下一页您可以在“获取新抓取信息”的请求中重新提交它。这将清除给定 URL 的 Facebook 缓存 - 并不是说​​在所有缓存节点周围传播可能需要一些时间。

Facebook 的对象调试器可以在这里找到: https://developers.facebook.com/tools/debug/

我们最近发现 Facebook 正在使用针对相对 URL 的查询字符串缓存 URL,并且查询字符串被忽略,这弄乱了我们纯粹基于查询字符串提供的一些动态图像。

事实证明,您可以指定最后修改的时间戳(以 Unix 时间戳格式),以帮助确保 FB 在抓取您的网站时,始终获取正确的图像。

这可以通过包含以下 OG 元标记来完成:

<meta property="og:updated_time" content="123465789" />

对于动态站点,您需要生成内容值 - 使用 PHP 可以插入当前的 Unix 时间戳,如下所示:

<meta property="og:updated_time" content="<?=time()?>" />

【讨论】:

如果 og:image url 没有改变,它会使用旧的(缓存的)版本吗? javascript 生成 unix 时间戳。 var t = Math.floor((new Date().getTime()) / 1000);***.com/a/47231065/6213524【参考方案3】:

我想到了一个可能的解决方案...如果你在 URL 的末尾添加一个随机字符串会怎样?

喜欢www.server.com/something.php?v=&lt;?php echo rand() ?&gt; 要么 www.server.com/something.jpg?v=&lt;?php echo rand() ?&gt;

我猜 facebook cahce 对象取决于 url...随机更改它...可能会有所帮助。

【讨论】:

这对我有用,我现在想的是:这会导致 Google 和 Seo 出现问题吗? 关于一般的 google 和 Seo,我可以说我已经更新了一些我们正在做 seo 的网站,使用上面的逻辑,我们没有注意到任何关于惩罚或 Seo 问题,但是这个完全是经验性的 但无法统计分享次数 好吧,当用户点击“like”链接时,我已经通过 ajax 调用手动跟踪此事件来解决这个问题。【参考方案4】:

在这篇文章发表 7 年后,这仍然是一个问题,但它不是 facebook 的缓存:这是人为错误(请允许我详细说明)

OG:TYPE 会影响您的图像抓取:

    https://ogp.me/#type_article 不一样 https://ogp.me/#type_website

请注意 og:type=website 将导致该网址的任何 /sub-pages/ 变为“规范”。这意味着无论您做什么,都无法使用刮板更新图像。

考虑一下这个“假设和常见错误”

-&lt;meta property="og:type" content="website" /&gt; => https://www.example.org(父) -&lt;meta property="og:type" content="website" /&gt; => https://www.example.org/sub-page/ -&lt;meta property="og:type" content="website" /&gt; => https://www.example.org/sub-page/child-2/ - Ergo:/sub-page//child-2/ 将继承父级的 og:image

那些不是“所有网站”,1是网站,其他是文章。

如果您这样做,Facebook 会认为所有这些都是规范的,并且会将 FIRST og:image 放入所有这些中。 (试试看,你会看到) - 如果你将 og:url 设置为你的根域或父域,你告诉 facebook 它们都是规范的。 (这是有充分理由的,但它离题了)

考虑这个解决方案(这是大多数人“真正想要的”)

-&lt;meta property="og:type" content="article" /&gt; => https://www.example.org/sub-page/ -&lt;meta property="og:type" content="article" /&gt; => https://www.example.org/sub-page/child-2/

如果您现在这样做,Facebook 将大大减少抓取新图片的问题。

最后,是的,这里的缓存破坏者、随机变量、更改 url 和建议都可以工作,但如果未正确指定 og:type,它们看起来就像 "intermittent voodoo"

PS:请记住,即使您“认为”可以看到最新版本,CDN 或服务器端缓存也会服务于 Facebook 的抓取工具。 (我不会花任何时间在这上面,只是指出如果不仔细检查会浪费你大量的时间。)

【讨论】:

这应该是今天公认的答案。【参考方案5】:
    更新图片时更改 og:image 的 URL

例子

<meta property="og:image"         content="https://abc.lk/img/share-english.jpg" />

<meta property="og:image"         content="https://abc.lk/img/share-english-1.jpg" />

    转到https://developers.facebook.com/tools/debug/sharing

    添加 url - 点击调试

    检查已报废时间并再次单击报废

【讨论】:

【参考方案6】:
<meta property="og:image" content="https://example.com/image.jpg?v=<?= time() ?>" />

这是我的解决方案,使用 ?v=UNIX_TIMESTAMP 但您仍然需要再次获取页面。

https://developers.facebook.com/tools/debug/sharing

【讨论】:

以上是关于Facebook like - 显示缓存版本 og:image,刷新或重新索引的方式?的主要内容,如果未能解决你的问题,请参考以下文章

Facebook 打开没有元 og:image 的图形图像

Facebook无需登录即可获得自定义对象的喜欢数

在 facebook 上分享链接会显示错误的图片

facebook 分享按钮显示错误的缩略图

类似框上的 Facebook 描述未显示在 Facebook 墙上

共享网址链接不会在Facebook上显示缩略图