web-dev-qa-db-ja.com

FacebookおよびWhatsappメタタグキャッシュの問題

問題文

FacebookとWhatsappでURLを共有しています。これらのメッセージングアプリは、共有リンクのサムネイルの形式で「リッチプレビュー」を生成する傾向があります。これまでのところすべてがうまく機能しているようです

ただし、リンクが指すコンテンツを変更した場合、次回、まったく同じ人と同じリンクを共有したときに、変更が反映されません。これは、FacebookとWhatsAppの両方のリッチプレビューサムネイルに適用されます。私がメッセージを送った新しい人は、前のユーザーが私から受け取った古いサムネイルをまだ見ています。

たとえば、リンク付きのメッセージがALICEに送信された後にメッセージングアプリによってレンダリングされたサムネイルのスナップショットを次に示します。 Facebook thumbnail before editing content

これが、リンク先のコンテンツを編集した後にメッセージングアプリによってレンダリングされた別のサムネイルのスナップショットです。名前をPro3に、価格を549に変更し、BOBに新しいメッセージを送信しましたが、BOBにはALICEと同じサムネイルプレビューが表示されます。 thumbnail after editing content

良い解決策ではない

  1. URLを少しでも変更することは、私に適した解決策ではありません。
  2. Facebookデバッガーのスクレイプオプションはそのプラットフォームでのみ機能し、手動で実行する必要があるため、適切に適合しません。つまり、スケーリングできません。

助けが必要なもの

私の推奨する解決策は、キャッシュを無効にするためにCache-ControlおよびPragmaタグを使用することです(Web標準による)が、キャッシュは無効になっているようです。

これが私のコードです

 '<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 + '">' +

誰かが試してみる価値のある別のアプローチを提案したり、現在のアプローチで私が間違っている可能性のあることを修正するのを手伝ったりできますか?

11
Varun Sukheja

この問題はFacebookとWhatsappに関連していると思います [〜#〜] cdn [〜#〜] ...

どうやらFacebookでは デバッガツール を使用して、FacebookにキャッシュされたURLを強制的に更新させることができます。 (おそらくAPIを使用して更新を強制する)、しかしWhatsappでこのオプションが見つかりませんでした...

最良の解決策は、「良くない解決策」の1つです。

URLを変更する

これにより、CDNは新しいコンテンツを再キャッシュ/更新します。

6
A STEFANI

これに対する簡単な解決策はありません。これは、他の人があなたのURLで何をしているかを制御するようなものです。 URLを共有するたびにあなたにスクレイピングしてもらいたいが、共有サービスは情報をキャッシュしたいので、リソースをフェッチするためにリソースがエンド側に保存されます。

それで、あなたは何ができますか?

  • 共有するときにURLを変更できます。私は通常?_=<epochtim> そうするには。これは短縮されたURLでも機能します
  • 302 Temporary Redirectは、URLをキャッシュすることをサービスに推奨しません。したがって、その場合はhttp://site/r/<path>および302 withhttp:// site / ?_ = `。 302を見て、これらのサイトが再びスクレイピングすることにした場合、アプローチは役立ちます。

誰にでもできる証拠ソリューションはありません。期待できるとは思いません。

2
Tarun Lalwani

キャッシュメソッドを制御するためにno-cacheメタタグをコードに追加する必要はありません。何らかの理由で、標準としてのパフォーマンスに関連する悪いソリューションです(キャッシュする必要があるものをキャッシュする必要があります)。

この場合、必要な場合にのみキャッシュを回避する必要があると思います。最後に、バージョン管理をタイムスタンプとして追加できます。このようなもの:

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

この方法で行くと、ファイルが常に新しいため、アプリが読み込まれるたびにファイルが再ダウンロードされます。上で述べたように、キャッシュを回避する必要があるメタタグに追加します。

2
Sakata Gintoki