Facebook点赞 - 显示缓存版本的og:image,有方法可以刷新或重新索引吗?

60

在Facebook Like和缓存的OG:image上存在问题。

简而言之:Facebook已经缓存了我们旧版的Like图片,且meta content URL无法更改。有什么方法可以刷新它吗?

详细说明:我正在处理的网站有一个OG:image的meta标签,当页面被点赞时,Facebook使用它。这个meta标签在整个网站的所有页面上都使用相同的图像URL。这个图像只是网站的品牌形象。

问题是,该网站最近更新了品牌形象,我们无法让 Facebook 上的 Like 图片更新。当用户点击 Like 链接时,发布到 Facebook 上的结果仍然显示旧的品牌形象。

这个meta标签类似于:

<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

此URL显示了该站点的旧品牌版本。已经过去一周了,它仍未更新。

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

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


1
你在服务器上缓存页面了吗?尝试在URL结尾添加类似于“?123”的内容,然后再次尝试使用Facebook调试工具。 - ifaour
2
不起作用。我确定添加查询字符串会创建一个新的缓存,但是og:image仍然显示旧的缓存图像。这个网站有数百个页面,都使用相同的og:image URL。我认为FB认识到了这一点,并且已经独立于like URL缓存了og:image URL,并使用它来代替为每个URL liked创建单独的og:image缓存文件。问题是,似乎没有任何方法清除该缓存。我可以查看多个页面的源代码,并看到每次将og:image URL更改为相同的external.ak.fbcdn.net.. URL。 - FHM
这不是与此链接的问题重复。此外,就像链接问题中的答案所说,仅仅在2013年重新lint URL实际上并不能解决缓存问题。 - willdanceforfun
1
@cosmicbdog - 我已经重新打开了这个问题。你会给我们带来一个很棒的答案吗? :) - Kev
@Kev 很遗憾,我还没有用一个很棒的答案惊喜到任何人!哈哈,但如果我找到了这个答案,我一定会发布它。 - willdanceforfun
6个回答

90
将您的URL插入到其分析器中,然后它应该重新加载其缓存。

21
已经尝试过了,没有效果。在结果调试页面上的“og:image”仍显示缓存版本。我猜测“og:image”是独立于输入到调试器中的URL而被缓存的。 - FHM
12
这个方法有效,但我首先必须更改og:image的URL(包括服务器和标签中的URL),才能使其选择更改。然后你可以将其改回原始URL,它会再次选取更改(如果你遇到不能永久更改的问题)。此外,我认为这个问题不应该关闭;它是一个与链接问题不同的问题。 - joseph_morris
1
这个可行,但这样工作太糟糕了。现在有200个URL需要“lint”。 - Matt W
2
要更改og:image URL,只需在图像路径中添加“?v=1”。无需重命名文件。 - Max Oriola
1
这个页面上有一个“重新抓取”按钮。这就是刷新的功能。https://i.imgur.com/0FsidR6.png - Artem Russakovskii
显示剩余2条评论

24
你可以使用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()?>" />

2
如果 og:image 的 URL 没有改变,它会使用旧的(缓存的)版本吗? - Andy Hayden
1
使用JavaScript生成Unix时间戳。 var t = Math.floor((new Date().getTime()) / 1000); https://dev59.com/onM_5IYBdhLWcg3w2W9g#47231065 - Niklas

11

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

例如 www.server.com/something.php?v=<?php echo rand() ?> 或者 www.server.com/something.jpg?v=<?php echo rand() ?>

我猜Facebook会根据URL缓存对象……将其随机更改……可能有所帮助。


这对我有用,我现在在想的是:这会对Google和SEO造成问题吗? - cri1682
关于Google和SEO,我可以说我已经更新了一些我们正在进行SEO的网站,并按照上述逻辑进行了操作,但我们并没有注意到任何惩罚或SEO问题,但这完全是经验性的。 - Matteo Bononi 'peorthyr'
但无法计算股票数量。 - chings228
我通过手动跟踪用户单击“喜欢”链接时的ajax调用来解决了这个问题。 - Matteo Bononi 'peorthyr'

8

这篇帖子发表七年后,这个问题仍然存在,但它不是Facebook缓存造成的:这是人为错误(请让我详细说明)。

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

  1. 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 (parent)
-<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/
- 因此:/sub-page//child-2/ 将继承父页面的 og:image

这些不是“所有网站”,其中一个是网站,其他的是文章。

如果您这样做,Facebook将认为它们都是规范的,并将在其中放置第一个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,则它们将看起来像“间歇性巫术”。

注意,即使你“认为”你可以看到最新版本,CDN或服务器端缓存也会为Facebook的爬虫提供服务。 (我不会花时间解释这一点,只是指出如果没有经过双重检查,它将浪费你大量的时间。)


他们最终会找到它...在尝试了所有不起作用的东西之后(这是一种健康的经历)。我花了很长时间才找到。哈哈 - Christian Žagarskas

2
今日免费次数已满, 请开通会员/明日再来
<meta property="og:image"         content="https://abc.lk/img/share-english.jpg" />

to

<meta property="og:image"         content="https://abc.lk/img/share-english-1.jpg" />
  1. 前往https://developers.facebook.com/tools/debug/sharing

  2. 添加链接 - 点击调试(debug)

  3. 检查Time Scraped ,然后再次点击Scrape


请将属性为“og:type”内容从“WEBSITE”更改为“ARTICLE”(而不是“网站”),因为您网站上的每个页面都不是单独的网站,而是一篇文章。[请参见上面标题为“OG:TYPE effects your image scrape”的帖子] - Christian Žagarskas

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接