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=<?php echo rand() ?>
要么
www.server.com/something.jpg?v=<?php echo rand() ?>
我猜 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/ 变为“规范”。这意味着无论您做什么,都无法使用刮板更新图像。
考虑一下这个“假设和常见错误”
-<meta property="og:type" content="website" />
=> https://www.example.org(父)
-<meta property="og:type" content="website" />
=> https://www.example.org/sub-page/
-<meta property="og:type" content="website" />
=> https://www.example.org/sub-page/child-2/
- Ergo:/sub-page/
和 /child-2/
将继承父级的 og:image
那些不是“所有网站”,1是网站,其他是文章。
如果您这样做,Facebook 会认为所有这些都是规范的,并且会将 FIRST og:image 放入所有这些中。 (试试看,你会看到) - 如果你将 og:url 设置为你的根域或父域,你告诉 facebook 它们都是规范的。 (这是有充分理由的,但它离题了)
考虑这个解决方案(这是大多数人“真正想要的”)
-<meta property="og:type" content="article" />
=> https://www.example.org/sub-page/
-<meta property="og:type" content="article" />
=> 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,刷新或重新索引的方式?的主要内容,如果未能解决你的问题,请参考以下文章