Facebook的开放图不清除缓存


174

我在使用Open Graph的元标记时遇到了麻烦。好像Facebook正在缓存我的meta标签的旧值。属性的旧值og:titleog:url仍在使用,即使我已经改变了他们。

在网站的某个页面上运行Lint ,结果如下:

Facebook Open Graph皮棉截图

请注意,有两个值og:titleog:url,最后一个占了上风。但是,最后两个条目是我用于此站点的OLD条目。我现在正在使用这些元标记(您可以验证是否查看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?是否有人遇到相同的问题?


我想这就像历史吗?我看到FB获取最新titleurl你(在信息表),何必呢?
ifaour 2011年

问题是,facebook Like计数仍然是大约200+ 的OLD og:url(pinq.dk),而不是pinq.dk/tilbud/landsdaekkende/lissy
Ardee Aram

我不认为这是历史。og:url的更多部分(应该是)设置了两次,最后一个是盛行的。某种程度上,已经从代码中删除的旧值仍然会影响元值。
Ardee Aram

3
好吧,请阅读此内容。尤其是“ 编辑元标记”部分。我不确定是否相关,但可能会有所帮助。稍后将对此进行检查,对不起队友!
ifaour 2011年

2
可能就是这样。“您可以通过更新页面的<meta>标签来更新页面的属性。请注意og:title和og:type最初只能进行编辑-在页面收到50个赞之后,标题变为固定,而页面收到10,000个赞之后类型是固定的。这些属性是固定的,以避免使已经喜欢该页面的用户感到惊讶。在达到这些限制后更改标题或类型标记不会执行任何操作,您的页面将保留原始标题和类型。” 谢谢ifaour!
Ardee Aram

Answers:


304
  1. 转到http://developers.facebook.com/tools/debug
  2. 输入网址,然后输入 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

我希望这有帮助。


30
param fbrefresh可能不是必需的,因为调试工具会在没有对象的情况下刷新该对象。
alexandru.topliceanu 2012年

7
除非使用此参数,否则它不会清除缓存。
UmurKontacı2012年

26
不正确,添加该参数不会对调试工具的操作产生任何影响
Igy

7
不需要使用fbrefresh参数,但是您确实需要以拥有该域的FB应用程序的管理员身份登录,否则不会更新缓存。
费利佩·勃拉姆

3
我可以验证添加fbrefresh参数是否对我有用。如果共享URL,即使调试器显示了正确的数据,它也会使用旧数据。但是,一旦我将调试器与fbrefresh参数一起使用,那么即使是普通共享也使用了正确的数据。
冰淇淋

82

投票最多的问题已经过时了:

这些是截至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刮板也不会更新或重新缓存该图像。(即使在图片网址末尾传递?last_update = [TIMESTAMP]对我也不起作用)。
  • 对我而言,唯一有效的解决方法是为图像分配一个新名称。

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

  • 当您调用调试器将更改拖放到页面的og:tags上时,该URL的所有以前的Facebook共享仍将显示旧的图像/视频。无法更新所有以前的帖子,出于安全原因,这是设计使然。否则,某人将能够假装用户共享了他/她实际上没有共享的内容。

它似乎没有返回我的页面的共享数量。我在这篇文章中读到:“ stackoverflow.com/questions/3581488/… ”,您需要在页面上有一个Facebook like / share按钮,以便此端点的输出包含任何信息。
WillyBurb

确保标记位于页面的HEAD而不是页面的主体中-调试器将对此进行警告,但是它们将被忽略(是的,我知道您提到的这个我只是想强调一点)
Simon_Weaver

@Oriol Esteban您是否找到其他更新图像的方法?
Petr 2015年

3
@Oriol当我最近尝试这个,我不得不POST自检到这个网址(根据developers.facebook.com/docs/sharing/opengraph/...
格伦牛逼

1
关于更改og:video的url时如何抓取缓存的任何想法 我对视频进行了少量编辑,并更改了网址,facebook继续显示旧版本!我显然是在调试中(从那里正确显示的)进行了调试,但在发布中却没有!... 这真让我抓狂!
RayOnAir 2015年

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 2014年

嗨,我正在尝试这种方法,但是遇到了一些错误,$ this-> output('<script type =“ text / javascript”> $(document).ready(function(){$ .post(“ graph .facebook.com “,{id:”'。$ this-> content ['canonical']。'',scrape:true},function(response){console.log(response);});}); < / script>');
monsterboy'14

我收到以下错误Uncaught ReferenceError:未定义$(匿名函数),任何帮助将不胜感激:)
monsterboy 2014年

@monsterboy $-这是jQuery函数的快捷方式。$ .post()与jQuery.post()相同,要使用此库,必须首先将其导入:<script src =“ code.jquery.com/jquery-latest.min.js ” type =“ text / javascript “> </ script>
Zhorzh Alexandr 2014年

@ZhorzhAlexandr thx为您解答,但我使用wordpress,我每天可以编辑一篇帖子,因此我如何在共享之前每次使用此脚本?
2014年

12

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


根据其他答案,您可以使用fbrefreshURL参数强制刷新。
Sam Mussmann

1
@SamMussmann似乎仅(即使这样做)刷新OG标签内容的缓存,而不刷新从所述内容的URL找到的实际图像。EG:您保持OG标签不变,但是更改图像文件(保持名称不变),图像本身将保留在缓存中。除了Seb所说的那样,我必须清除映像文件名才能找到清除方法。
尼克M

@Nick M您还找到其他解决方案吗?
Petr 2015年

解决了。我通过在PHP脚本的图像网址中添加?t = TIMESTAMP来解决此问题,我们在其中生成标签。目前,它可以工作。
Petr 2015年

刚尝试重命名图像文件并更新了meta标签值,但也无法正常工作。
Antonio Ooi

7

我在使用时遇到了同样的问题 og:image,通过Facebook调试器或通过实际帐户进行测试,多次尝试重命名文件或清除FB缓存均无效。

新的Facebook准则规定图像尺寸应为1200 x 630或具有该纵横比,这似乎是错误的,对我来说唯一有效的方法是使用正方形尺寸的图像。

编辑* 几个小时后,我又回到了1200 x 630的水平,它神奇地起作用了,这非常神奇。

我也将文件重命名为f * ^ * kfacebook.jpg,不确定它是否有帮助,但感觉很好。


6

基本上,答案是耐心;)

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

在此处输入图片说明


Facebook的开发者对象缓存,每7天到期,而Facebook将自动重新抓取物体时,它的下一次使用。
Venugopal

4

事实证明,我们只是碰到了这个问题,我们没有删除正确的url,因为真实的url有一个查询字符串(就机器人而言,这是不同的页面)。

http://example.com/

!==

http://example.com/?utm_campaign=foo

linter 将重新缓存您的页面,您无需等待。



4

Ooook,终于有了帮助(我使用IP.Board)。我要做的是:

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

感谢作者的这个话题!

编辑:还有什么您需要记住有关图像要求。目前(2013年1月)为:-双向至少200像素-最大比例为3:1



3

要添加的一件事,URL是区分大小写的。注意:

apps.facebook.com/ HELLO

然后在棉短绒的眼睛里是不同的

apps.facebook.com/ 你好

确保使用在应用程序的开发人员设置中输入的确切网站网址。linter会返回属性,否则将不刷新缓存。


3

抱歉,正确的答案是:

没有万无一失的方法来用即时结果更新打开的图形og:image url。一直缓存到fb更新为止(据报道每24小时更新一次)

这是一些据报道可以被其他人使用的东西,但是我对其中任何一个都取得了零成功。

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

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


1

我发现,如果您的图像为72dpi,则会出现图像尺寸错误。请改用96dpi。希望这可以帮助。


1
  1. 转到http://developers.facebook.com/tools/debug

  2. 粘贴在页面的URL中,然后单击“调试”。如果您的站点使用的是URL别名,请确保使用与Facebook用于共享页面的URL相同的URL(例如:如果通过该URL共享页面,则在Drupal中使用node / *路径而不是别名)。

  3. 单击“在共享对话框中查看此”链接上的“共享预览”部分

最好的解决方案!谢谢
MeV


0

有过类似的经历。网站链接在facebook生成的预览中显示404。原来og:url元数据有误。几天前我们已经修复了它,但是在预览中仍然看到404。我们在https://developers.facebook.com/tools/debug/上使用了该工具,并强制刷新(不必附加任何参数)。在我们的例子中,Facebook在24天后没有刷新缓存小时,但该工具帮助将其强制执行。


0

它是一个缓存,它会刷新,这是缓存偶尔要做的事情。因此,等待最终将起作用,但有时您需要更快地做到这一点。更改文件名有效。


那为什么是-1?从字面上看,没有人回答过更改文件名的最简单解决方案,它实际上不像其他(+/- 5)个投票通过的答案那样,至少或不曾这样做,但已经过时了。Ofc如果您由于某种原因无法更改文件名,此答案将无济于事。
Srneczek

0

我也有这个问题。搜寻器会显示正确的信息,但是共享URL仍旧填充旧数据。

我解决这个问题的方法是使用feed方法,而不是share方法,然后手动填充数据(share方法未公开)

像这样:

shareToFB = () => {
    window.FB.ui({
    method: 'feed',
    link: `signup.yourdomain.com/?referrer=${this.props.subscriber.sid}`,
    name: 'THIS WILL OVERRIDE OG:TITLE TAG',
    description: 'THIS WILL OVERRIDE OG:DESCRIPTION TAG',
    caption: 'THIS WILL OVERRIDE THE OG:URL TAG'
  });
};

0

真的很容易解决。经过测试和工作。您只需在更新元标记时生成一个新的url。就像在您的网址中添加“&cacheBuster = 1”一样简单。如果更改元标记,只需增加“&cacheBuster = 2”

原始网址

www.example.com

og元标记更新时的网址:

www.example.com?cacheBuster=1

og元标记再次更新时的网址:

www.example.com?cacheBuster=2

Facebook将每个人都视为一个新的URL,并获取新的元数据。


0

多年后,这仍然是一个普遍的问题,但它并不总是在Facebook的缓存中出现:它经常是人为错误(请允许我详细说明)

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

  1. https://ogp.me/#type_article https://ogp.me/#type_website不同

请注意og:type = website将导致该URL的任何/ 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 /
-人体工程学:/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在刮取新图像方面将为您带来的麻烦要少得多。

最后,是,可以在此处使用缓存清除器,随机变量,更改网址和建议,但如果未正确指定,它们将看起来像“间歇性伏都教”og:type

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


0

最近,我在Facebook上遇到了一个不同但相似的问题,发现提到的刮板/调试页面似乎根本无法读取任何页面。我在Open Graph的元属性位于标题的下端,并且抓取器会不断通知我图像规范不正确,并且无论如何都会使用缓存的版本。我将Open Graph标签在代码中移到页面顶部附近,然后每次都运行良好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.