【问题标题】:Facebook and Whatsapp meta tag cache issueFacebook 和 Whatsapp 元标记缓存问题
【发布时间】:2018-03-11 05:15:47
【问题描述】:

问题陈述

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

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

例如,以下是我向 ALICE 发送带有链接的消息后消息应用程序呈现的缩略图快照:

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

不好的解决方案

  1. 稍微更改 URL 并不是一个适合我的解决方案。
  2. Facebook 调试器上的抓取选项仅适用于该平台,并且不适合,因为它必须手动完成,这意味着它无法扩展!

我需要什么帮助

我首选的解决方案是使用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 + '">' +

有人可以建议另一种值得尝试的方法或帮助我解决我在当前方法中可能做错的地方吗?

【问题讨论】:

  • “Facebook 调试器上的抓取选项仅适用于该平台,它不适合,因为它必须手动完成,这意味着它无法扩展!”为什么必须手动完成?你能不能检测到内容的变化,并在内容发生变化时调用 facebook scrape API?
  • @kamal0808 我们真的不知道是否有这样的公开可用的抓取 API,但即使有 API,我们仍然会在 whatsapp 或任何其他社交平台上面临同样的问题。跨度>
  • 那么我猜必须为每个平台单独完成。这里有一些帮助stackoverflow.com/questions/6754078/…

标签: caching metadata meta-tags facebook-opengraph


【解决方案1】:

我预计此问题与 Facebook 和 Whatsapp CDN...

显然,在 Facebook 上,您可以使用 the debugger tool 并强制 Facebook 刷新它缓存的 URL。 (也许使用 API 来强制刷新),但我在 Whatsapp 上没有找到这个选项...

最好的解决方案是你的“不好的解决方案”之一:

更改网址

这会隐式强制 CDN 重新缓存/更新新内容。

【讨论】:

  • 这个假设可以通过跨地理域发送相同的消息来验证,这些地理域必须由不同的 CDN 提供服务,对吧?请通过将相同的消息发送到不同的大洲 Varun 来测试相同的消息,并让我们知道您的实验结果。
  • 更改 URL 有效,但我使用的是 url 缩短器,在这种情况下,更改 URL 会希望 url 缩短器生成一个新的短 URL,这反过来又会让我付出巨大的代价。
  • 我检查过,不同区域的 CDN 是正确的,它会发送更新的数据@pulkitsinghal
  • 好消息,您是否仔细检查了 Tarun 在答案中所说的添加 epochtime 是否可行?
  • 最简单的解决方案
【解决方案2】:

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

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

&lt;meta property="og:image" content="' + metaData.imageUrl + '?v=' + timestamp + '" /&gt;\n

采用这种方式,每当您的应用程序加载时,该文件都会重新下载,因为据了解,该文件始终是新的。正如我上面所说,只需添加到您需要避免缓存的元标记中。

【讨论】:

  • 是的,这个解决方案可能有效,但正如我上面提到的,我正在使用 URL 缩短器,每次修改 URL 都会生成新的 shortUrl。
  • 你把这个放在哪里?作为一个来自谷歌的人,你能详细介绍一下吗?比如在哪里放置、如何放置、使用什么软件......你可以用 cloudflare 来做到这一点吗?
【解决方案3】:

对此没有简单的解决方案。这就像控制其他人对您的 URL 所做的事情一样。您希望他们在您每次共享 URL 时抓取您的信息,但共享服务会希望缓存信息,以便在其端保存资源以获取资源

那你能做什么?

  • 您可以在分享时更改网址。我通常会添加一个?_=&lt;epochtim&gt; 来这样做。这也适用于您的缩短网址
  • 您可以看到302 Temporary Redirect 不鼓励服务缓存url。因此,在这种情况下,您将拥有 url http://site/r/&lt;path&gt;,它应该会导致 302 withhttp://site/?_=`。如果查看 302 这些网站决定再次抓取,那么该方法可能会有所帮助

这里没有万无一失的解决方案,我不认为人们可以期待一个

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 2016-05-23
    相关资源
    最近更新 更多