2017-12-21 7 views
0

Wir haben eine einzelne Seite Angular App mit dem Facebook-Pixel, die über GTM injiziert wird. Bei der ersten Injektion gehen wir wie folgt vor:Facebook Pixel Benutzerdefinierte Abmessungen erscheinen nur auf der ersten Seite

<script> 
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? 
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; 
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; 
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, 
document,'script','https://connect.facebook.net/en_US/fbevents.js'); 
fbq('init', '<OUR ID>'); // Insert your pixel ID here. 
</script> 

Hinweis: Es gibt kein Pageview-Ereignis. Wir drücken dann eine eigene „virtuelle Seitenaufruf“ Ereignis an den GTM Datalayer, die zu einem Tag führt, die den Seitenaufruf an Google Analytics (adaequat) sendet, und löst eine Injektion des folgenden Codes auch:

<script> 
fbq('track', 'PageView', { 
    dim1:{{dim 1 macro}}, 
    dim2:{{dim 2 macro}}, 
    dim3:{{dim 2 macro}} 
}); 
</script> 

On JEDER Seitenaufruf wird das obige fbq an das DOM angehängt, wobei die richtigen Dimensionen aufgefüllt werden (indem die Quelle der Seite angezeigt wird).

Auf dem ersten Seitenaufruf HIT zu Facebook sind die Dimensionen im Aufruf vorhanden (durch Anzeigen der Netzwerkregisterkarte), aber auf den SUBSEQUENT Seitenaufrufen wird ein Treffer an Facebook gesendet, aber es werden keine Dimensionen gesendet, obwohl sie vorhanden sind in dem an das DOM angehängten Code vorhanden.

In den meisten Fällen ändern diese Dimensionen nicht Treffertreffer, sondern können sich je nach den Aktionen ändern, die der Benutzer während seiner Sitzungen ausführt.

Irgendwelche Gedanken, warum die nachfolgenden Treffer die benutzerdefinierten Dimensionen NICHT enthalten?

Antwort

0

Erhaltene Feedback vom offiziellen Facebook-Team, scheint es, dass dies von Entwurf ist. Bei jedem nachfolgenden Aufruf mit einem Pageview-Ereignis werden keine benutzerdefinierten Daten in der Nutzlast gesendet.

0

Sie versuchen, eine Nutzlast jedes Mal zu aktualisieren, wenn eine Verlaufsänderung in einer Angular-App passiert, und führen den fb-Code erneut mit der aktualisierten Nutzlast aus?

würde ich eine Datalayer auf der Front-End-Implementierung:

<script> 
window.dataLayer = window.dataLayer || []; 
window.dataLayer.push({ 
    event: 'virtualPageView', 
    pagePath: '/newPath', //update this path from your angular route, 
         //or use GTMs built in history-change trigger 
         //and a variable that gets the URL fragment 
         //to update your pageview's path variable. 
    customDimenson1: 'value1', 
    customDimenson2: 'value2', 
    customDimenson3: 'value3' 
}); 
</script> 

Erstellen Sie einen Trigger vom Typ Kundenspezifischer Ereignis mit dem Namen virtualPageView. Erstellen Sie 4 Variablen des Typs Datenschichtvariable, für pagePath, customDimension1-3. Erstellen Ihre benutzerdefinierte HTML-Tag, die Ihr FBQ Ereignis enthält:

<script> 
fbq('track', 'PageView', { 
    dim1:{{customDimenson1}}, 
    dim2:{{customDimenson2}}, 
    dim3:{{customDimenson3}} 
}); 
</script> 

Erstellen Sie eine andere Benutzerdefinierte HTML Tag, das Feuer auf die eingebauten Trigger Alle Seiten, da sie nur dann ausgeführt werden muss, einmal für Ihre Einzel Seitenanwendung mit Ihrem Basiscode:

<script> 
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? 
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; 
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; 
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, 
document,'script','https://connect.facebook.net/en_US/fbevents.js'); 
fbq('init', '<OUR ID>'); // Insert your pixel ID here. 
</script> 

Ich hatte Probleme mit SPA für aktualisierte Variablen. Manchmal ist es eine Race Condition, manchmal sind es Bugs in GTM oder Code. Sie können auch versuchen, die Ausführung zu verzögern, indem Sie einen 100ms-Timer verwenden (schlechter Rat).

+0

Hi Unterstreicht, das ist, wie ich bereits implementiert habe, und wie ich bereits sagte, funktioniert der FIRST Anruf perfekt und enthält die benutzerdefinierten Dimensionen. Bei nachfolgenden Aufrufen sind keine Dimensionen enthalten, der Treffer wird jedoch weiterhin an FB gesendet. Das gleiche Tag, das den ersten Anruf erstellt, macht auch den zweiten Anruf –

+0

ich sehe. Deine ursprüngliche Frage war sehr kurz, also dachte ich, du hättest vielleicht ein paar Schritte verpasst. Ich erinnere mich an ähnliche Probleme mit blacksocks.com, die auf eine SPA-Seite verschoben wurden.Hatte viele nicht aktualisierende Variablen und andere Probleme. Ich müsste wirklich tief in das GTM-Setup einsteigen, um mehr zu erfahren. Normalerweise sollten Ereignisse, einschließlich eines Ereignis-Schlüsselwerts, ausreichen, um alles, was daran hängt, zu aktualisieren. – Underlines

Verwandte Themen