有關另類執行方式的貼士,包括透過單一頁面的網頁應用程式使用像素,以及透過按鈕點擊次數和頁面捲動來追蹤轉換。
如果您在受《一般資料保護規章》(GDPR)約束的國家/地區經營業務,請參閱我們的 GDPR 文件以了解如何符合相關規定。
雖然您可以使用 IMG 標籤安裝像素,但建議您參閱我們的執行指南,以了解替代方法。
如需使用輕量級執行方式安裝像素,您可選擇使用 <img>
標籤來安裝。若要這樣做,請在網站標題或正文中的開頭和結尾 <noscript>
標籤之間加入以下程式碼,然後將 {pixel-id}
替換為您的像素編號,以及把 {standard-event}
替換為標準事件。
<img src="https://www.facebook.com/tr?id={pixel-id}&ev={standard-event}" height="1" width="1" style="display:none"/>
使用 <img>
標籤安裝的像素亦支援參數,您可以將參數加入查詢字串中。例如:
<img src="https://www.facebook.com/tr?id=12345 &ev=ViewContent &cd[content_name]=ABC%20Leather%20Sandal &cd[content_category]=Shoes &cd[content_type]=product &cd[content_ids]=1234 &cd[value]=0.50 &cd[currency]=USD" height="1" width="1" style="display:none"/>
以下範例展示了如何使用虛擬像素 ID(12345
)和自訂參數(例如 cd[currency]=USD
),在虛擬網站的各個主要頁面中安裝 Meta 像素 IMG 標籤。
在商品頁面中,一個像素負責追蹤 PageView
事件,另一個像素則負責追蹤 ViewContent
事件:
<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=12345&ev=PageView"/>
<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=12345&ev=ViewContent"/>
在加到購物車頁面中,一個像素負責追蹤 PageView
事件,另一個像素則負責追蹤 AddToCard
事件:
<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=12345&ev=PageView"/>
<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=12345&ev=AddToCart&cd[currency]=USD&cd[value]=0.00"/>
在購買頁面中,一個像素負責追蹤 PageView
事件,另一個像素則負責追蹤 Purchase
事件:
<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=12345&ev=PageView"/>
<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=12345&ev=Purchase&cd[currency]=USD&cd[value]=0.00"/>
Meta 的彙總事件成效衡量協定可以讓您衡量來自 iOS 14.5 或更新版本裝置用戶的網站及應用程式事件。系統可能會使用經過專門設計的統計模型,可在資料有所欠缺或不完整時讓您更全面地了解成效。
我們強烈建議您在使用像素 IMG 標籤時,跟隨本文件中「使用 IMG 標籤安裝像素」部分的指示,或放棄使用 IMG 標籤並改為跟隨我們的執行指南操作。
如果您使用運行時間 JavaScript 來產生 JavaScript 圖像類別以設定 IMG 像素,但沒有將該圖像類別附加至網站的 DOM 樹狀結構(例如使用第三方 JavaScript 函式庫傳送 IMG 像素),則您必須加入以下程式碼,否則 Meta 將不會收到您的 IMG 像素資料。
var nativeBridge = window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.receiveImgPixel; if (nativeBridge) { const postObj = { id: {pixel-id}, ev: {standard-event}, cd: {stringified-custom-data}, dpo: {data-processing-options}, // Optional CCPA param dpoco: {data-processing-option-country}, // Optional CCPA param dpost: {data-processing-option-state}, // Optional CCPA param }; nativeBridge.postMessage(JSON.stringify(postObj)); }
如果您將像素 IMG 放入擁有 sandbox
屬性的 iframe,則您必須加入 allow-scripts
值,否則 Facebook 將不會收到您的 IMG 像素資料。
我們擴展了 AEM 的功能,以在廣告客戶的優化像素事件獲觸發時,考慮來自所有與廣告客戶相關網頁的轉換。這些特定情況包括廣告客戶使用短網址產生器或根據地理位置作重新導向、有多個業務範圍,或者依靠代理商刊登廣告。如果您符合任何一種情況並想啟用 AEM,我們建議您執行以下事項:
訪客點擊按鈕後,Meta 像素的 JavaScript 程式碼會自動偵測並傳送相關表格欄位給 Meta。
假設您有一個電子商務網站,而點擊「加到購物車」按鈕不會將用戶帶往新頁面。您可能想在點擊按鈕時啟動事件。
在這個範例中,我們會在載入頁面時啟用 ViewContent
標準事件。當有人點擊「加到購物車」按鈕時,我們就會啟用 AddToCart
標準事件。
為此,請首先載入您想在載入頁面時觸發的 Meta 像素程式碼:
<!-- Facebook Pixel Code --> <script> fbq('track', 'ViewContent', { content_name: 'Really Fast Running Shoes', content_category: 'Apparel & Accessories > Shoes', content_ids: ['1234'], content_type: 'product', value: 0.50, currency: 'USD' }); </script> <!-- End Facebook Pixel Code -->
然後,在載入新的頁面時或點擊「加到購物車」按鈕後觸發 AddToCart
。處理按鈕點擊有多種方法。以下是在按鈕新增 eventListener
的範例。
<!-- Somewhere there is a button that performs Add to Cart --> <button id="addToCartButton">Add To Cart</button> <!-- Add Pixel Events to the button's click handler --> <script type="text/javascript"> var button = document.getElementById('addToCartButton'); button.addEventListener( 'click', function() { fbq('track', 'AddToCart', { content_name: 'Really Fast Running Shoes', content_category: 'Apparel & Accessories > Shoes', content_ids: ['1234'], content_type: 'product', value: 4.99, currency: 'USD' }); }, false ); </script>
您可以透過多種方法處理點擊事件,不過請務必在點擊後呼叫 fbq
函數。
視乎執行像素的具體方式,像素協助工具可能會在有人點擊按鈕前顯示錯誤。您可以點擊按鈕來確認像素能正確觸發,以解除像素協助工具的錯誤。
在這個範例中,假設您有一個網誌,而且想追蹤已閱讀文章所有內容的用戶。除捲動至頁面結尾外,用戶並無其他動作。
以下是載入像素的頁面 HTML 範例:
<!DOCTYPE html> <html> <head> <!-- Facebook Pixel Code --> <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', '<FB_PIXEL_ID>'); fbq('track', "PageView"); </script> <noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=<FB_PIXEL_ID>&ev=PageView&noscript=1" /></noscript> <!-- End Facebook Pixel Code --> </head> <body> <h1>Scroll Page until the Lead event is fired</h1> <div style="height: 120vh; width: 100vw; background-color: #00f;"></div> <h1 id="fb-fire-pixel">Lead event will fire when this phrase enters the screen</h1> <div style="height: 120vh; width: 100vw; background-color: #000;"></div> </body> </html>
當擁有 id=fb-fire-pixel
的 h1
素材出現時,我們應該觸發 Lead
標準事件。如要確定某項素材會在畫面上顯示,我們可在頁面上新增以下程式碼:
// This code should be loaded together with Meta Pixel var executeWhenElementIsVisible = function(dom_element, callback) { if (!(dom_element instanceof HTMLElement)) { console.error('dom_element must be a valid HTMLElement'); } if (typeof callback !== 'function') { console.error( 'Second parameter must be a function, got', typeof callback, 'instead', ); } function isOnViewport(elem) { var rect = elem.getBoundingClientRect(); var docElem = document.documentElement; return ( rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || docElem.clientHeight) && rect.right <= (window.innerWidth || docElem.clientWidth) ); } var executeCallback = (function() { var wasExecuted = false; return function() { if (!wasExecuted && isOnViewport(dom_element)) { wasExecuted = true; callback(); } }; })(); window.addEventListener('scroll', executeCallback, false); };
之後,我們需要定義當畫面上顯示該素材時觸發像素的方法:
// Get the element that should be visible to trigger the pixel fire var element = document.getElementById('fb-fire-pixel'); // Then, set the event to be tracked when element is visible // Note that second parameter is a function, not a function call executeWhenElementIsVisible(element, function() { fbq('track', 'Lead'); });
在這個範例中,假設您想追蹤已閱讀頁面一定長度或百分比的用戶。除捲動至所需的頁面長度或百分比外,用戶並無其他動作。
第一個範例是追蹤用戶所閱讀的頁面長度。在這個範例中,當用戶已閱讀多達 500px 的頁面長度時,我們就會觸發潛在顧客像素。
var executeWhenReachedPageLength = function(length, callback) { if (typeof length !== 'number') { console.error( 'First parameter must be a number, got', typeof length, 'instead', ); } if (typeof callback !== 'function') { console.error( 'Second parameter must be a function, got', typeof callback, 'instead', ); } function getWindowLength() { return window.innerHeight || (document.documentElement || document.body).clientHeight; } function getCurrentScrolledLengthPosition() { return window.pageYOffset || (document.documentElement || document.body.parentNode || document.body).scrollTop; } var executeCallback = (function() { var wasExecuted = false; return function() { if (!wasExecuted && getCurrentScrolledLengthPosition() > length) { wasExecuted = true; callback(); } }; })(); if (getWindowLength() >= length) { callback(); } else { window.addEventListener('scroll', executeCallback, false); } }; executeWhenReachedPageLength(10, function() { fbq('track', 'Lead'); });
第二個範例是追蹤用戶所閱讀的頁面百分比。在這個範例中,當用戶已閱讀 75% 的頁面時,我們就會觸發潛在顧客像素。
var executeWhenReachedPagePercentage = function(percentage, callback) { if (typeof percentage !== 'number') { console.error( 'First parameter must be a number, got', typeof percentage, 'instead', ); } if (typeof callback !== 'function') { console.error( 'Second parameter must be a function, got', typeof callback, 'instead', ); } function getDocumentLength() { var D = document; return Math.max( D.body.scrollHeight, D.documentElement.scrollHeight, D.body.offsetHeight, D.documentElement.offsetHeight, D.body.clientHeight, D.documentElement.clientHeight ) } function getWindowLength() { return window.innerHeight || (document.documentElement || document.body).clientHeight; } function getScrollableLength() { if (getDocumentLength() > getWindowLength()) { return getDocumentLength() - getWindowLength(); } else { return 0; } } var scrollableLength = getScrollableLength(); window.addEventListener("resize", function(){ scrollableLength = getScrollableLength(); }, false) function getCurrentScrolledLengthPosition() { return window.pageYOffset || (document.documentElement || document.body.parentNode || document.body).scrollTop; } function getPercentageScrolled() { if (scrollableLength == 0) { return 100; } else { return getCurrentScrolledLengthPosition() / scrollableLength * 100; } } var executeCallback = (function() { var wasExecuted = false; return function() { if (!wasExecuted && getPercentageScrolled() > percentage) { wasExecuted = true; callback(); } }; })(); if (getDocumentLength() == 0 || (getWindowLength()/getDocumentLength() * 100 >= percentage)) { callback(); } else { window.addEventListener('scroll', executeCallback, false); } }; executeWhenReachedPagePercentage(75, function() { fbq('track', 'Lead'); });
假如您想追蹤在觸發像素事件幾秒前與您的網站互動的用戶。您可以使用 setTimeout
函數執行此動作。
// Delay pixel fire by 3 seconds var seconds = 3; setTimeout(function() { fbq('track', 'Lead'); }, seconds * 1000);
這個函數可用於追蹤頁面的「深入」瀏覽,這代表用戶不會太快捲動頁面,而且真的在閱讀內容。
如果您想知道誰在您的網站看過某個數量的文章,您可以使用連線階段計算器並在這種情況發生時載入 Meta 像素程式碼。
連線階段是每項網站要求的指定時間範圍內,用戶與您網站進行的一組互動。只要您偵測到用戶在指定時間範圍內的動態,就可以增加頁面瀏覽次數。
假設每個 site_request
有變數 sessionCountViews
,您便可根據計到的頁面瀏覽次數新增 Meta 像素程式碼。
僅計算第 6 篇查看過的文章(範例)
if (site_request.sessionCountViews == 6) { fbq('track', "ViewContent", { sessionCountViews: site_request.sessionCountViews, }); }
如果您在同一個頁面擁有多個像素,並想使用每個不重複像素選擇觸發特定的事件,則應該使用 trackSingle
及 trackSingleCustom
功能。
在啟動了多個像素的頁面使用 track
函數(不論是使用多個基底程式碼還是在一個基底程式碼中合併多個像素),可能會造成觸發次數過多或意外行為,因此只應在特定情況下使用。
例如,我們針對兩個已啟動的像素觸發 PageView
事件,並選擇在其中一個像素觸發標準事件(Purchase
),以及在另一個像素觸發自訂事件。
fbq('init', '<PIXEL_A>'); fbq('init', '<PIXEL_B>'); fbq('track', 'PageView'); //fire PageView for both initialized pixels // only fire the Purchase event for Pixel A fbq('trackSingle', '<PIXEL_A>', 'Purchase', { value: 4, currency: 'GBP', }); // only fire the custom event Step4 for Pixel B fbq('trackSingleCustom', '<PIXEL_B>', 'Step4',{ //optional parameters });
在一些較罕見的情況下,您可能只想將事件傳送至其中一個已安裝至網站的像素。例如,用來限制已傳送至網站上其中一個像素的資料。這些方法會追蹤單個像素的像素觸發情況。您可使用下列方式呼叫這些方法:
fbq('trackSingle', 'FB_PIXEL_ID', 'Purchase', customData); fbq('trackSingleCustom', 'FB_PIXEL_ID', 'CustomEvent', customData);
Meta 像素會傳送您網站上的按鈕點擊次數和網頁中繼資料(例如根據 Opengraph 或 Schema.org 格式架構整理的資料),協助您改善廣告刊登和成效衡量,並自動執行像素設定程序。如果您想設定 Meta 像素,以停止傳送此等額外資訊,則可在 Meta 像素基底程式碼的初始呼叫上方加入 fbq('set', 'autoConfig', 'false', 'FB_PIXEL_ID')
。
<!-- Facebook Pixel Code --> <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'); // Line to enable Manual Only mode. fbq('set', 'autoConfig', false, 'FB_PIXEL_ID'); //Insert Your Facebook Pixel ID below. fbq('init', 'FB_PIXEL_ID'); fbq('track', 'PageView'); </script> <noscript> <img height="1" width="1" style="display:none"src="https://www.facebook.com/tr?id=FB_PIXEL_ID&ev=PageView&noscript=1"/> </noscript> <!-- End Facebook Pixel Code -->
如果您的網站設有《內容安全政策》,則您應允許從 https://connect.facebook.net
載入 JavaScript。備註:像素可從兩個路徑載入指令碼:/en_US/fbevents.js
及 /signals/config/{pixelID}?v={version}
。