這一篇適合代理商人員,如果要操作新品牌的臉書廣告投放,如果遇到一個網站有多個pixel正在同時追蹤,該怎麼確保自家的Pixel可以正確發送。臉書廣告追蹤,由於品牌主可能會分給多間代理商同時進行,因此網站會有多個像素。我會建議直接使用Server伺服器追蹤來發送給其他行銷公司數據,同時也能幫助企業做好js代碼的管理。
你需要確認以下幾點:
- 你自己埋設的pixel全部都正確,觸發條件也正確。
- 別的代理商怎麼埋設。可能有使用Facebook範本、原生JS、原生JS外連檔案。
- 確定你的Facebook基礎代碼 (init),都有在事件發送前先觸發。
- 如果有重複事件發生,也確定只有埋一次,那就去追查哪個代碼是用track來寫的,逐一排除。
問題情境
<script>
... base code truncated
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '<PIXEL_A>');
fbq('track', 'PageView');
fbq('track', 'Purchase', {
'value': 4,
'currency': 'GBP'
});
</script>
<script>
... base code truncated
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '<PIXEL_B>');
fbq('track', 'PageView');
fbq('trackCustom', 'Step4'); //fires for both Pixel A and B
</script>
如上面圖+程式碼示意,當我的Pixel A已經初始化,並完成Pageview, Purchase的送出後。再來接續初始化PixelB,理想中PixelB應該會接收到PageView & Step4。 但反而PIXEL A 也會接收到 Step4。
實際案例說明
A品牌方的網站,同時擁有10個不同代理商的Pixel。每次使用者在網站瀏覽時,網站都會觸發10條Pixel的初始化碼 + 事件追蹤碼。
假設A代理商想要追蹤自訂事件,也會造成其他9間皆收到一樣的事件,或是Pageview有重複,或是怎麼調就是事件收集不到。因為fbevents.js的觸發邏輯是,init function 會把我們的像素放到JS全域變數。因此後面呼叫的pageview, purchase的事件,全部都會傳送到已經有初始化的Pixel。所以也因此容易看到有PageView重複發送,或是事件有狀況的問題。
假設對發init的代碼是設定在pageview,那他們則可以到window loaded再啟動。基本上他們的代碼還是一樣可以正常生效,而其他間的反而會從原本的有誤,變成正常接收pixel事件。
解法1 – TrackSingle
透過使用trackSingle
和 trackSingleCustom
透過這兩個方式,可以將帶碼只限定要觸發在哪一個Pixel裡面。例如
fbq('trackSingle', '<PIXEL_A>', 'Purchase', {
value: 4,
currency: 'GBP',
});
這樣就能確保持有pixleA 的代理商,能觸發正確的Purchase事件,並且正確追蹤,不會影響其他pixel。
這個解法也適用在,如果你看到有一個事件重複觸發,可能是別家的像素正在影響你收集事件,因此使用這個寫法就有用。把他的追蹤事件,指定到他們家的pixel,而不是全部已init的pixel,就能做好區域與全域的區隔。
解法2 – 更改觸發順序
把你的init那個自訂HTML提早觸發。通常網站的JS情況有無限多種,而且不是每一間公司都願意讓我們調整js。因此只能確保初始化在最前面優先執行,後續推送我們要發送的FB PIXEL事件。
更改觸發條件
這個特別適合用在能,其他行銷公司寫的js是使用外連的方式,所以你也看不到對方怎麼觸發的。但他們的代碼都是有接收成功,而你的pixel跟其他間pixel都是失敗。這時候你可以詢問對方公司要不要改一下觸發順序。
通常你會看到的代碼都是如下:
var dspyder_js=document.createElement('script');
dspyder_js.type='text/javascript';
dspyder_js.async=true;
dspyder_js.src='//spyder.tw/ad/track.js';
如果你有在網站中的GTM找到以上自訂HTML,而且在前台有看到pixel像素。那就表示他們像素不是寫在該GTM裡面。因此大多狀況都是這樣導致其他公司pixel追蹤失利,所以可以這個的觸發條件,把他往後延到window loaded。
目前台灣現況
由於多數廣告代理商人員,並沒有程式碼的概念,所以這個方式只能確保自己的像素不要影響他人,甚至追蹤到自己公司需要的事件,但不能保證其他公司也照這個規矩來埋設,因此別人家的事件或多或少還是會影響到自身。
解決的方法,要不就品牌方不要一次包這個多間公司,或是你有本事把它全部品項拿下來做,或是直接撰寫js到他們網站的原始碼 (特別是舊型的網站)。