如何更新Facebook开放图谱图片

35

假设您已经通过开放图谱协议的meta标签设置了网页的Facebook图像,如下所示: <meta property="og:image" content="http://ia.media-imdb.com/rock.jpg"/>

如果您想用同名的另一张图片替换/更新该图片rock.jpg,当您分享页面时,如何让Facebook相应地更新您的图片?强制Facebook使用此链接获取您页面的数据http://developers.facebook.com/tools/debug不会更新图片。

4个回答

59

这是我找到的解决此问题最一致的答案:https://dev59.com/dm025IYBdhLWcg3w1JeG#21468084

如果您懒得去那个链接,您可以用POST一个ajax请求,带上您要清除的url:

$.post(
    'https://graph.facebook.com',
    {
        id: 'http://www.site.com/my/share/url/',
        scrape: true
    },
    function(response){
        console.log(response);
    }
);

1
这个完美地运行了。这应该是最佳答案。 - Strawberry
1
我同意@Strawberry的观点,如果您知道如何在控制台中使用javascript/jQuery,那么这个解决方案是立即生效的最佳解决方案。它可以立即刷新og:image缓存,并且每次都有效。我将把它制作成一个书签小程序,谢谢 :) - jphase
非常成功。谢谢! - user2958788
1
如果您拥有Facebook开发者工具的访问权限,您也可以通过https://developers.facebook.com/tools/debug/sharing/或通过Graph API explorer进行操作,将?scrape=true&id=URL_TO_SCRAPE放入POST字段中即可。 - divillysausages
2
如果有人想使用版本化的图形URL,例如https://graph.facebook.com/v2.6,则需要一个访问令牌。这可以是Facebook应用程序访问令牌,格式为{APP_ID}|{APP_SECRET} - Nour Wolf
上面的代码返回了一个OAuthException:“需要访问令牌才能请求此资源。”但根据Nour的建议,这个可以工作:$.post( 'https://graph.facebook.com', { id: 'http://example.com', scrape: true, access_token: "{APP_ID}|{APP_SECRET}" }, function(response){ console.log(response); } );然而,这并没有更新旧的分享,只有新的分享。 :( - Eugen Baryshnikau

42

Facebook会将你的图片存储到它们自己的服务器上,并缓存24小时。缓存延迟可能会在未来发生变化,因此要检查它,只需打开Facebook从你的图片创建的图像,并检查其HTTP头中的“max-age”值。因此,即使使用此链接http://developers.facebook.com/tools/debug强制获取数据,如果更改您的图像,Facebook也不会在24小时内更新其版本。

为了解决这个问题,如果需要立即查看更改的效果,您应该重命名您的图片。因此,如果旧版本是rock.jpg,将其重命名为rock2.jpg,然后使用此链接http://developers.facebook.com/tools/debug让Facebook从您的更新的图像创建一个新图像。这将立即更新您网页的Facebook分享中的图片。


3
多年以后,这篇帖子仍然存在问题,但这不是Facebook的缓存问题:很多时候是人为错误(请允许我详细说明)。
OG:TYPE会影响到你的图像抓取:
1. og:type=article与og:type=website不同。
请注意,og:type=website会导致该网址的任何子页面成为“规范”页面。这意味着无论你做什么,都难以使用抓取器更新你的图片。
考虑这个“假设和常见错误”。
- <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 将认为所有这些都是规范的,并将在所有这些中放置第一个 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,则它们似乎像是“间歇性巫术”。
PS:请记住,即使您“认为”您可以看到最新版本,CDN或服务器端缓存也将向Facebook的抓取器提供服务。(我不会花费任何时间来解释这一点,除了指出如果没有经过双重检查,它将浪费您大量的时间。)

1
如果您正在使用任何缓存插件,请确保清除所有缓存。同时,请确保您使用的图片具有推荐的Facebook大小:1200(w)x 630(h)或600 x 315。

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