wake-up-neo.com

Problem mit dem Cache für Facebook und Whatsapp-Metatags

Problemstellung

Ich teile URLs über Facebook und WhatsApp. Diese Messaging-Apps generieren in der Regel eine "reichhaltige Vorschau" in Form einer Miniaturansicht für den freigegebenen Link. Alles scheint soweit gut zu funktionieren

Ändere ich jedoch den Inhalt, auf den mein Link verweist, und wenn ich das nächste Mal denselben Link mit einer völlig anderen Person teile, werden die Änderungen nicht reflektiert! Dies gilt für umfangreiche Vorschaubilder in Facebook und WhatsApp. Die neue Person, die ich mitgemeldet habe, sieht immer noch die alte Miniaturansicht, die der vorherige Benutzer von mir erhalten hat.

Hier ist zum Beispiel eine Momentaufnahme der Miniaturansicht, die von den Messaging-Apps gerendert wird, nachdem eine Nachricht mit einem Link von mir an ALICE gesendet wurde:  Facebook thumbnail before editing content

Und hier ist eine Momentaufnahme einer anderen Miniaturansicht, die von den Messaging-Apps nach dem Bearbeiten des Inhalts, auf den mein Link verweist, gerendert wird. Ich habe den Namen in Pro3 und den Preis in 549 geändert und eine neue Nachricht an BOB gesendet ... aber BOB sieht die gleiche Miniaturansicht wie ALICE!  thumbnail after editing content

Keine guten Lösungen

  1. Eine leichte Änderung der URL ist keine Lösung, die zu mir passt.
  2. Die Scrape-Option im Facebook-Debugger funktioniert nur für diese Plattform und ist nicht geeignet, da sie manuell ausgeführt werden muss, dh sie kann nicht skaliert werden!

Womit ich Hilfe brauche

Meine bevorzugte Lösung ist die Verwendung von Cache-Control- und Pragma-Tags (gemäß Webstandards) zum Deaktivieren des Caches, aber es scheint nicht zu funktionieren.

Hier ist mein Code

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

Kann jemand bitte einen anderen Ansatz vorschlagen, der einen Versuch wert ist, oder mir helfen, das zu korrigieren, was ich mit dem aktuellen Ansatz falsch mache?

8
Varun Sukheja

Ich gehe davon aus, dass dieses Problem relativ zu Facebook und Whatsapp CDN ... ist.

Anscheinend können Sie auf Facebook das Debugger-Tool verwenden und Facebook zwingen, die zwischengespeicherte URL zu aktualisieren. (Vielleicht API verwenden, um die Aktualisierung zu erzwingen), aber ich habe diese Option bei WhatsApp nicht gefunden ...

Die beste Lösung ist eine Ihrer "Nicht guten Lösungen": 

URL ändern

welche zwingen das CDN implizit, den neuen Inhalt neu zu zwischenspeichern/zu aktualisieren.

2
A STEFANI

Sie müssen das no-cache-Metatag nicht in Ihre Codes einfügen, um die Cachemethode zu steuern. Irgendwie ist dies eine schlechte Lösung für die Leistung als Standard (sollten Caches die Caches enthalten).

In diesem Fall denke ich, sollten Sie die Caches nur für das, was Sie nur brauchen, verhindern. Sie können die Versionierung zuletzt als Zeitmarke hinzufügen. Etwas wie das:

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

Gehen Sie auf diese Weise vor, wird die Datei jedes Mal erneut heruntergeladen, wenn Ihre App geladen wird, da die Datei immer neu ist. Wie bereits gesagt, fügen Sie einfach in Ihr Meta-Tag das hinzu, das Sie benötigen, um das Caching zu vermeiden.

2
Sakata Gintoki

Dafür gibt es keine einfache Lösung. Dies ist wie das Kontrollieren, was andere Personen mit Ihrer URL machen. Sie möchten, dass sie Sie jedes Mal kratzen, wenn Sie eine URL freigeben, der Freigabedienst möchte jedoch Informationen zwischenspeichern, so dass Ressourcen an ihrem Ende zum Abrufen der Ressourcen gespeichert werden

Also, was kannst du machen?

  • Sie können die URL ändern, wenn Sie sie freigeben. Normalerweise füge ich einen ?_=<epochtim> hinzu. Dies funktioniert auch bei Ihrer verkürzten URL
  • Sie könnten von einem 302 Temporary Redirect sehen, dass der Dienst davon abgehalten wird, die URL zwischenzuspeichern. In diesem Fall haben Sie die URL http://site/r/<path> und dies sollte einen 302 withhttp: // site/ ? _ = `Verursachen. Wenn man sich die 302 ansieht, entscheiden sich diese Standorte für ein erneutes Abkratzen, dann könnte der Ansatz helfen

Es gibt hier keine narrensichere Lösung und ich glaube nicht, dass man eine erwarten kann

1
Tarun Lalwani