Facebook开放图谱无法清除缓存

178

我在使用Open Graph时遇到了麻烦。似乎Facebook正在缓存我标签的旧值。即使我已经更改了它们,og:titleog:url的旧属性值仍在使用。

我对我的网站上的一个页面运行了Lint,并出现了以下结果:

Facebook Open Graph lint screenshot

请注意,og:titleog:url有两个值,而最后一个值才是生效的。然而,最后两个条目是旧的条目,这些标签我已经改为如下内容(您可以查看HTML源代码进行验证):

<meta property="og:title" content="Smart og rummelig pusletaske fra Petit Amour med god plads til alt &#8211; værdi 1.099 kr &#8211; køb nu kun 599 kr   "/>
<meta property="og:description" content="Pinq.dk - Det gode liv for det halve"/>
<meta property="og:type" content="product"/>
<meta property="og:url" content="http://pinq.dk/tilbud/landsdaekkende/lissy/"/>
<meta property="og:image" content="http://pinq.dk/wp-content/themes/pinq/images/logo-top.png"/>
<meta property="og:site_name" content="Pinq" />
<meta property="fb:app_id" content="161840830532004" />

Facebook为什么要缓存og:titleog:url?有人遇到同样的问题吗?


我认为这并不是历史问题。更像是og:url被设置两次,最后生效的是最后一次。不知何故,已经从代码中删除的旧值仍会影响元数据值。 - Ardee Aram
3
好的,请看一下这个链接(http://developers.facebook.com/docs/opengraph/),特别是其中的“编辑Meta标签”部分。我不确定它是否相关,但这可能会有所帮助。稍后再查一下,抱歉伙计! - ifaour
2
大概就是这样了。 "您可以通过更新页面的<meta>标签来更新页面的属性。请注意,og:title和og:type仅在最初可编辑 - 在页面获得50个赞之后,标题变为固定,并且在页面获得10,000个赞之后,类型变为固定。为避免让已经点赞的用户感到惊讶,这些属性是固定的。在达到这些限制后更改标题或类型标签不起作用,您的页面将保留原始标题和类型。" 谢谢ifaour! - Ardee Aram
你怎么做到的?@MikeGleasonjrCouturier - user5306470
截至今天,现有的答案都对我没有用。 - user5306470
显示剩余5条评论
22个回答

310
  1. 访问 http://developers.facebook.com/tools/debug
  2. 在URL末尾加上fbrefresh=CAN_BE_ANYTHING

示例:

  1. http://www.example.com?fbrefresh=CAN_BE_ANYTHING
  2. http://www.example.com?postid=1234&fbrefresh=CAN_BE_ANYTHING
  3. 或者访问: http://developers.facebook.com/tools/debug/og/object?q=http://www.example.com/?p=3568&fbrefresh=89127348912

昨晚我也遇到了同样的问题,后来在某个网站上找到了这个解决方法。

Facebook会保存您的缓存缩略图,即使从您的服务器中删除了缩略图/图像,也不会刷新。但是,Facebook允许您使用fbrefresh进行刷新。


31
调试工具可以刷新对象,因此参数 fbrefresh 可能不是必需的。 - alexandru.topliceanu
7
除非使用该参数,否则它不会清除缓存。 - Umur Kontacı
29
不正确,添加该参数对调试工具的操作没有任何影响-在调试工具或抓取器代码中完全没有提到该参数。 - Igy
7
不必使用fbrefresh参数,但您需要以拥有该域名的FB应用程序的管理员身份登录,否则缓存将不会更新。 - Felipe Brahm
3
我可以确认添加fbrefresh参数对我很有效。如果我分享URL,即使调试工具显示正确的数据,它仍然使用旧的数据。但是一旦我在调试工具中使用了fbrefresh参数,那么即使普通分享也会使用正确的数据。 - ice cream
显示剩余14条评论

84

最受欢迎的问题已经过时:

以下是截至2014年11月应该使用的两个选项:

非开发人员

  1. 使用FB调试器:https://developers.facebook.com/tools/debug/og/object
  2. 粘贴您要重新缓存的网址。 (确保您使用与og:url标记相同的网址)
  3. 单击“再次提取刮擦信息”按钮

开发人员

  1. 以编程方式对此URL进行GET调用:https://graph.facebook.com/?id=[YOUR_URL_HERE]&scrape=true (请参见:https://developers.facebook.com/docs/games_payments/takingpayments#scraping)
  2. 确保头部中包含的og:url标记与您传递的标记相匹配。
  3. 您甚至可以解析JSON响应以获取该URL的分享数量。

有关更新图像的其他信息

  • 如果og:image URL保持不变,但实际上更改了图像,则Facebook爬虫程序不会更新也不会重新缓存它们。即使在图像URL的末尾传递一个?last_update=[TIMESTAMP]也对我没有用。
  • 对我唯一有效的解决方法是为图像分配新名称。

有关以前发布的帖子上的图像或视频更新的注意事项:

  • 当您调用调试器以刮擦页面的og:tags中的更改时,该URL的所有先前的Facebook分享仍将显示旧图像/视频。无法更新所有以前的帖子,出于安全原因设计为这样。否则,某人将能够假装用户分享了某些实际上没有分享的内容。

请确保标签位于页面的HEAD而不是BODY中 - 调试器会警告您,但它们将被忽略(是的,我知道您已经提到了这一点,我只是想强调一下)。 - Simon_Weaver
解决了。我通过在生成标签的 PHP 脚本中,将 ?t=TIMESTAMP 添加到我的图像 URL 中来解决了这个问题。目前它可以正常工作。 - Petr
谢谢你!我花了几个小时来解决这个问题,结果发现问题出在我传递的URL不一致。FB文档让我感到困惑,我误以为URL属性必须是根目录。给你点赞! - Cynthia Sanchez
3
最近我尝试了这个操作,必须将POST提交到此URL(根据https://developers.facebook.com/docs/sharing/opengraph/using-objects#update)。 - Glen T
1
有没有关于在更改og:video的URL时如何清除缓存的想法?我对我的视频进行了小修改并更改了URL,但Facebook仍然显示旧版本!我显然已经在调试中进行了清除(并且在那里正确显示),但在发布帖子时没有进行清除!...这让我疯狂! - RayOnAir
显示剩余11条评论

19

如果你有很多页面,不想手动刷新它们 - 你可以自动刷新。

假设你有一张带照片的用户个人资料页面:

$url = 'http://'.$_SERVER['HTTP_HOST'].'/'.$user_profile;
$user_photo = 'http://'.$_SERVER['HTTP_HOST'].'/'.$user_photo;

<meta property="og:url" content="<?php echo $url; ?>"/>
<meta property="og:image" content="<?php echo $user_photo; ?>"

只需将以下内容添加到您的页面:

// with jQuery
$.post(
    'https://graph.facebook.com',
    {
        id: '<?php echo $url; ?>',
        scrape: true
    },
    function(response){
        console.log(response);
    }
);

// with "vanilla" javascript
var fbxhr = new XMLHttpRequest();
fbxhr.open("POST", "https://graph.facebook.com", true);
fbxhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
fbxhr.send("id=<?php echo $url; ?>&scrape=true");

这将刷新Facebook缓存。如果您使用jQuery解决方案,请查看console.log中的“响应”-您会在那里找到“updated_time”字段和其他有用信息。


这是唯一一种对我有效的清除图像缓存的解决方案。使用 fbrefresh 对我的问题没有任何作用。 - hellatan
我遇到了以下错误 未捕获的引用错误:$ 未定义 (匿名函数) 任何帮助将不胜感激 :) - monsterboy
@monsterboy$ - 这是 jQuery 函数的快捷方式。 $.post() 与 jQuery.post() 相同。要使用此库,您必须首先导入它:<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script> - Zhorzh Alexandr
@petr 请描述一下你正在做什么。你从 https://graph.facebook.com 收到了任何响应吗? - Zhorzh Alexandr
#petr 请给我你的 og:url,你可以在这一行找到它:<meta property="og:url" content="#####"> - Zhorzh Alexandr
显示剩余6条评论

12

即使传递了fbrefresh变量,OG缩略图似乎也无法刷新。如果要在等待自动清除的情况下更新它,您需要更改与缩略图关联的元标记值的文件名并进行刷新。


根据其他答案,您可以使用fbrefresh URL参数来强制刷新。 - Sam Mussmann
1
@SamMussmann 似乎这只会(如果它真的可以)刷新 OG 标签内容的缓存,而不是从该内容的 URL 找到的实际图像。例如:您保持 OG 标签相同,但更改图像文件(保持名称相同),则图像本身将保留在缓存中。我还没有找到清除此缓存的方法,除了像 Seb 所说的那样,您必须更改图像文件名。 - Nick M
@Nick M 你找到其他解决方案了吗? - Petr
解决了。我在 php 脚本中生成标签时,通过在图片 URL 中添加 ?t=TIMESTAMP 解决了问题。目前它可以工作。 - Petr
刚试了一下重命名图像文件并更新元标签值,但还是不起作用。 - Antonio Ooi

7

基本上,答案是耐心 ;)

今天早上我检查了 Linter,og:title 和 og:url 显示正确,没有冗余值。我想 Facebook 会自动在某个特定的时间间隔清除其缓存。我只需要等待。

enter image description here


Facebook for Developers对象缓存每7天过期一次,当下次使用时,Facebook将自动重新抓取该对象。 - Venugopal

7
我曾遇到使用og:image时遇到的问题,尝试更改文件名或清除FB缓存均未能解决,无论是通过Facebook调试器还是测试实际账户都无济于事。新的Facebook指南规定图片大小应为1200 x 630或具有相同的宽高比例,但这似乎是错误的,对我有效的方法是使用具有方形尺寸的图像。编辑*几个小时后我回来用了1200 x 630的图像,它神奇般地起作用了,真是神奇。我还将文件重新命名为f*^*kfacebook.jpg,不确定是否有帮助,但感觉很好。

4

该页面不存在。 - VanAlbert

4

好的,最终帮到我了(我使用IP.Board)。我所需要做的是:

  1. 更改网站上og:image的URL(常规配置)。
  2. 尝试使用?fbrefresh=1154464gd56的方法。

感谢作者提供这个主题!

编辑:还有,您需要记住图片要求。目前(2013年1月)为止:

  • 至少在两个方向上200像素
  • 最大比例为3:1

4

很抱歉,正确答案是:

没有一种绝对可靠的方法可以立即更新open graph og:image url。它会被缓存直到Facebook更新(据报道每24小时更新一次)

以下是其他人报告有效的事项,但我尝试过它们并没有成功:

  • 选择“获取新的抓取信息”
  • 更改实际图像文件名和/或删除原始文件
  • 通过附加PHP TIMESTAMP或?任何内容向图像url添加查询字符串
  • 将“...yoursite.com/?fbrefresh=anything”查询字符串添加到调试器提取URL中
  • 在og dev页面底部选择graph API链接
  • 选择查看抓取器看到的内容-似乎不请求实时未缓存的抓取数据,即使文件不存在,它仍然显示缓存的图像URL

检查您的代码始终是确认问题不是浏览器缓存或某些缓存服务的最佳方法。如果您的代码中的元信息是最新的,并且您已尝试了所有上述方法(除非有其他建议出现),那么正确答案是您只能等待


4

根据当前文档,缓存持续时间为30天。 - patrickhawley
1
此信息的更新链接为:https://developers.facebook.com/docs/plugins/faqs。您可以将其设置为更频繁地进行抓取。 - Mousey

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