FacebookとWhatsappでURLを共有しています。これらのメッセージングアプリは、共有リンクのサムネイルの形式で「リッチプレビュー」を生成する傾向があります。これまでのところすべてがうまく機能しているようです
ただし、リンクが指すコンテンツを変更した場合、次回、まったく同じ人と同じリンクを共有したときに、変更が反映されません。これは、FacebookとWhatsAppの両方のリッチプレビューサムネイルに適用されます。私がメッセージを送った新しい人は、前のユーザーが私から受け取った古いサムネイルをまだ見ています。
たとえば、リンク付きのメッセージがALICEに送信された後にメッセージングアプリによってレンダリングされたサムネイルのスナップショットを次に示します。
これが、リンク先のコンテンツを編集した後にメッセージングアプリによってレンダリングされた別のサムネイルのスナップショットです。名前をPro3に、価格を549に変更し、BOBに新しいメッセージを送信しましたが、BOBにはALICEと同じサムネイルプレビューが表示されます。
私の推奨する解決策は、キャッシュを無効にするために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 + '">' +
誰かが試してみる価値のある別のアプローチを提案したり、現在のアプローチで私が間違っている可能性のあることを修正するのを手伝ったりできますか?
この問題はFacebookとWhatsappに関連していると思います [〜#〜] cdn [〜#〜] ...
どうやらFacebookでは デバッガツール を使用して、FacebookにキャッシュされたURLを強制的に更新させることができます。 (おそらくAPIを使用して更新を強制する)、しかしWhatsappでこのオプションが見つかりませんでした...
最良の解決策は、「良くない解決策」の1つです。
URLを変更する
これにより、CDNは新しいコンテンツを再キャッシュ/更新します。
これに対する簡単な解決策はありません。これは、他の人があなたのURLで何をしているかを制御するようなものです。 URLを共有するたびにあなたにスクレイピングしてもらいたいが、共有サービスは情報をキャッシュしたいので、リソースをフェッチするためにリソースがエンド側に保存されます。
それで、あなたは何ができますか?
?_=<epochtim>
そうするには。これは短縮されたURLでも機能します302 Temporary Redirect
は、URLをキャッシュすることをサービスに推奨しません。したがって、その場合はhttp://site/r/<path>
および302 with
http:// site / ?_ = `。 302を見て、これらのサイトが再びスクレイピングすることにした場合、アプローチは役立ちます。誰にでもできる証拠ソリューションはありません。期待できるとは思いません。
キャッシュメソッドを制御するためにno-cache
メタタグをコードに追加する必要はありません。何らかの理由で、標準としてのパフォーマンスに関連する悪いソリューションです(キャッシュする必要があるものをキャッシュする必要があります)。
この場合、必要な場合にのみキャッシュを回避する必要があると思います。最後に、バージョン管理をタイムスタンプとして追加できます。このようなもの:
<meta property="og:image" content="' + metaData.imageUrl + '?v=' + timestamp + '" />\n
この方法で行くと、ファイルが常に新しいため、アプリが読み込まれるたびにファイルが再ダウンロードされます。上で述べたように、キャッシュを回避する必要があるメタタグに追加します。