Facebook和Whatsapp元标记缓存问题

时间:2018-03-11 05:15:48

标签: caching metadata facebook-opengraph meta-tags open-graph-protocol

问题陈述

我通过Facebook和Whatsapp分享网址。这些消息传递应用程序倾向于生成丰富的预览"以共享链接的缩略图的形式。到目前为止,一切似乎都运作良好

但是,如果我更改链接指向的内容,那么下次与完全不同的人共享相同的链接时,更改不会反映出来!这适用于Facebook和WhatsApp中的丰富预览缩略图。我发送消息的新人仍然看到上一个用户从我那里收到的旧缩略图。

例如,以下是我发送给ALICE的带有链接的消息后,消息传递应用程序呈现的缩略图的快照: Facebook thumbnail before editing content

这是我编辑链接指向的内容后,消息传递应用程序呈现的另一个缩略图的快照。我将名称更改为Pro3并将价格更改为549并向BOB发送了一条新消息...但是BOB看到了与ALICE相同的缩略图预览! thumbnail after editing content

不是很好的解决方案

  1. 稍微更改网址并不是一个非常适合我的解决方案。
  2. Facebook调试器上的scrape选项只适用于该平台,并不适合,因为它必须手动完成,这意味着它无法扩展!
  3. 我需要帮助

    我首选的解决方案是使用Cache-ControlPragma标记(根据网络标准)来禁用缓存,但它似乎无法正常工作。

    这是我的代码

     '<title>' + metaData.title + '</title>' +
        '<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">\n' +
        '<meta http-equiv="Pragma" content="no-cache">\n' +
        '<meta http-equiv="Expires" content="0">\n' +
        '<meta http-equiv="refresh" content="0; url=http://my.site.com/my/products">' +
        '<meta name="description" content="' + metaData.description + '" />\n' +
        '<meta property="og:type" content="product" />\n' +
        '<meta property="og:title" content="' + metaData.title + '" />\n' +
        '<meta property="og:description" content="' + metaData.description + '" />\n' +
        '<meta property="og:image" content="' + metaData.imageUrl + '" />\n' +
        '<meta property="og:image:width" content="' + metaData.imgWidth + '"/>\n' +
        '<meta property="og:image:height" content="' + metaData.imgHeight + '" />\n' +
        '<meta property="og:image:alt" content="' + metaData.imgAlt + '"/>' +
        '<meta property="og:url" content="' + metaData.url + '" />\n' +
        '<meta name="og_site_name" property="og:site_name" content="' + metaData.domainName + '" />' +
        '<meta name="keywords" content="' + metaData.keywords + '">' +
    

    有人可以建议另一种值得尝试的方法,或者帮助我解决当前方法可能出错的问题吗?

3 个答案:

答案 0 :(得分:2)

我希望这个问题与Facebook和Whatsapp CDN相关......

显然在Facebook上你可以使用the debugger tool并强制Facebook刷新它已缓存的网址。 (可能使用API​​来强制刷新),但我没有在Whatsapp上找到这个选项...

最佳解决方案是您的“不好的解决方案”:

  

更改网址

强制CDN重新缓存/更新新内容。

答案 1 :(得分:2)

您不需要在代码中添加no-cache元标记来控制缓存方法,不知何故,这是与标准性能相关的错误解决方案(应该缓存我们需要缓存的内容)。 / p>

在这种情况下,我认为你应该只为你需要的东西阻止缓存。您最后可以将版本控制添加为时间戳。像这样:

<meta property="og:image" content="' + metaData.imageUrl + '?v=' + timestamp + '" />\n

这样,只要你的应用程序被加载,就会重新下载文件,因为在理解的情况下,文件总是新的。如上所述,只需添加到您需要避免缓存的元标记中。

答案 2 :(得分:1)

没有简单的解决方法。这就像控制其他人对您的URL做了什么。您希望他们在每次共享URL时抓住您,但共享服务会想要缓存信息,以便将资源保存在他们的端点以获取资源

那你能做什么?

  • 您可以在分享时更改网址。我通常会添加?_=<epochtim>来执行此操作。这也适用于缩短的网址
  • 您可以看到302 Temporary Redirect阻止服务缓存网址。因此,在这种情况下,您将拥有网址http://site/r/<path>,它应该会导致302 with http://site/?_ =`。如果看着302这些网站决定再次刮,那么这种方法可以帮助

这里没有万无一失的解决方案,我认为人们不能指望一个