分類: 數據分析

數據分析行銷科技

Apple滅了IDFA,業界怎麼說?

privacy war

前言:隱私權保護風潮崛起
身為Marketing Data或是數位廣告分析從業工作者,合法的追蹤分析、績效評量、優化廣告精準度是工作中很重要的一部分,也因此「第三方Cookie已死」這個預言一直從多年前開始就被默默的關注。大規模的Cookie送葬典禮起始於2019年5月,Firefox開始預設阻擋第三方Cookie,掀起了隱私權保護風潮;Safari和Chrome也在系統設定中添加關閉追蹤的選項。由於大部分使用者不見得關心追蹤不追蹤的問題,也因此第三方Cookie雖然被判死刑也上了香點了燭,但遲遲還沒拖去埋葬,大家還是陸續收一些零散的第三方Cookie。同行們還在處理Cookie後事,搞得怨聲載道的,沒想到又來了個諸神黃昏, IDFA (Identifier for Advertising 廣告識別碼) 也即將被滅絕。由於MDPA協會以推廣行銷數據專業為宗旨,因此也針對IDFA滅絕事件去做追蹤筆記並整理重點,提供大家參考。

 

2020 WWDC如此說
三個星期前,也就是2020年6月22日,蘋果在年度WWDC (Worldwide Developers Conference 全球開發者大會) 上宣布一系列的用戶隱私權保護措施,其中影響最大的就是 iOS 14 將限制 IDFA 的作用。 Read More

Google Tag Manager數據分析

埋碼小撇步,讓你的GTM更乾淨

前言

現今的數位行銷不管是從網站的事件追蹤或是廣告成效的追蹤,都需要追蹤碼的安裝設定,安裝流程也從早期需要透過資訊工程師的協助,到後來埋碼工具如GTM的推出與快速的普及,讓追蹤碼的埋設這件事情變得更有彈性。而伴隨著AI的興起,藉由傳遞更多的網站訊號給廣告系統,能讓廣告系統學的更快更好,進而提升廣告的成效,但隨著投遞的平台越來越多,可能會讓GTM的可閱讀性變差也讓之後的維護變複雜,下面舉個簡單的例子來說明。

假設今天我們有一個行銷活動,並為了這個行銷活動的宣傳做了一頁式的活動網頁,之後也會做為廣告投遞的到達頁面,為了追蹤客戶在網站上的行為,規劃了以下的追蹤事件來完整追蹤頁面的活動。

代碼名稱 說明
pageview 載入頁面
page_scroll_25 瀏覽頁面百分之 25
page_scroll_50 瀏覽頁面百分之 50
page_scroll_75 瀏覽頁面百分之 75
submit_btn 按下送出按鈕
thankupage 完成活動報名

埋碼規劃

在這個活動中,我們預計會先投放Google Ads以及Facebook的廣告,所以一開始我們會有三個明確的需求,除了最基本的將資料送回GA外,我們也希望讓廣告系統不只收到【完成活動報名】這個事件,而是可以收到過程中的每個事件來加速廣告系統的優化,因此我們將資料彙整到一個埋碼的對照表中,來最為後續埋碼的依據。

常見作法

筆者這邊採用GTM內建的【自訂HTML】類型來埋設Facebook的Pixel、【Google Ads 轉換追蹤】來追蹤Google Ads的轉換事件,加上標準的Google Analytics分析來完成上表的追蹤項目,這是目前常見的埋設方式,可以看到在每一個類別中搭配每一種廣告格式,我們都要針對每個類別分別新增六個代碼,當投放的廣告管道或追蹤的事件還不多時還容易處理,當隨著業務的發展帶動廣告渠道的多元化,加上網頁的追蹤埋設好埋滿的狀況下,整個GTM就會變得很複雜且難以維護,所以下面筆者將會介紹一個方式來減少代碼的數量,並讓埋碼的邏輯可以更一目了然且更易於維護。

作法介紹

接下來我們會透過四個步驟的設定來達成精簡且較易於維護的效果。

    1. 設定資料層變數
        • 首先我們需要先建立多個資料變數,透過選擇【變數】→ 新增【資料層變數】,至於資料層變數的原理可以請大家參考官方文件的說明。

        • 接下來我們會設定如下表的資料層變數,這邊的名稱可以自行設定,但是建議名稱能夠一眼辨識用途,方便後續取用。
      變數名稱 資料層變數名稱
      DL_GA_action GA_action
      DL_GA_category GA_category
      DL_GA_label GA_label
      DL_Adwords_conversion_id Adwords_conversion_id
      DL_Adwords_conversion_label Adwords_conversion_label

    2. 設定觸發事件
        • 我們新增兩個觸發條件,事件類型選擇自訂事件,事件名稱一樣可以自行取名,以清楚明瞭為主。


    3. 設定轉換追蹤
      • 我們透過之前設定好的資料層變數及觸發條件來設定轉換追蹤,我們新增一個【代碼類型】通用Analytics(分析),並設定追蹤類型為【事件】,並在下方的類別、動作及標籤帶入我們剛剛設定好的資料層變數,另外設定觸發條件為我們剛剛設定的自訂事件,設定完後如下圖所示。
      • 之後我們再新增一個代碼類型【Google Ads 轉換追蹤】,並設定其中的轉換 ID及轉換標籤使用前面設定好的資料層變數,觸發條件使用前面設定的自訂事件,設定內容後下圖所示。
    4. 設定代碼
      • 進到最後埋碼的設定,我們從pageview這個事件開始做設定,首先我們新增一個自訂Html,在頁面載入的時候先執行Facebook的標準埋碼並觸發自訂事件,並透過dataLayer.push 推送相關參數到 datalayer中,並由前面三步的自訂變數、觸發事件和代碼轉換追蹤就可以將原本要新增在三個代碼的作業合併在同一個代碼完成,而其中的對應關係可以參考下面的示意圖。
      • 接著我們要來設定三個頁面滾動的追蹤,這邊我們將原本的三個觸發事件合為一個,設定可以參考下圖,另外我們新增一個Scroll Depth Threshold的內建變數並新增一個自訂html的代碼,並引用上面設定好的捲動觸發條件。
      • 我們要埋入的代碼如下,跟前面相比其實我們只新增了一個IF的判斷條件來判斷目前滾動的深度,之後就按照我們對照表埋入各階段的參數值,後續的觸發程序就跟前面的pageview是一模一樣的。
      • 用相同的方式我們可以繼續設定最後兩個事件,只有在觸發條件和參數的部分會有不同,整體的架構基本是都是一樣的,透過這樣的埋碼方式,我們可以將原本18個代碼才能完成的的事情濃縮到6個代碼,並且後續如果要在加入其他廣告的渠道,也只需要在原有的架構上新增代碼即可,如果有投放多家DPA廣告的話,也能夠透過這樣的機制來精簡代碼的複雜度,對於之後維護也會有很大的助益。

最後附上兩個版本的GTM匯出檔給各位參考,有任何的想法也歡迎進一步交流囉。

點擊下載檔案

Google Tag Manager

[GTM 教學] 什麼是 Custom templates 自訂範本

ㄧ. 什麼是 GTM 自訂範本?

Custom templates allow you to write your own tag and variable definitions so that others within your organization can use them alongside the built-in tag and variable templates.  Google Tag Manager

Custom templates 用一句話來說就是將重複性的代碼轉為模板。

GTM 官方的解釋來說,就是提供客製化代碼的模板,讓使用者可以在模板化的情況下輸入變數,輕鬆的創建和共享自訂的 JavaScript 和 HTML 設置。

二. 設定教學

首先進入 GTM Custom templates 自訂模板後,可以看到四個細項可以選擇:

  • 資訊:資訊欄位是用來告訴使用者 templates 的使用功能和敘述,不管輸入什麼都不會影響到此模板接下來程式的執行
  • 欄位:用於設定使用者的介面
  • 程式碼:當此模板被觸發時,會執行的程式,細節待會會再補充
  • 權限:可用於限制程式碼擁有多少操作權限

1. 設定欄位:

點選 Custom templates 欄位後,使用新增欄位,能選擇的類型蠻多的,有文字、下拉式選單、CheckBox、按鈕……等,這邊使用文字輸入來介紹,選擇新增文字輸入欄位後,使用者會在介面上看到一個輸入文字的方框。

在輸入文字的上方點擊齒輪,可以看到更細項的設定,而將文字輸入的命名為 endPoint,這邊的命名在待會的程式碼會用到,可以留意一下。

另外也可以限制使用者輸入的值,例如增加驗證規則,這邊設定是讓使用者需輸入 https 的規則運算式。

關於更多 Custom templates 欄位的介紹可以參考 GTM 官方這篇:Custom templates quick start guide

2. 設定程式碼:

Custom templates 程式碼的部分是使用 2019/8月官方推出的 addEventCallback 這個 API 來寫的,功能簡單來說就是當觸發 dataLayer events 完成時,發送 request 到指定 URL,可用於製作判定事件完成與否的監控器。

關於更多其他的 Custom templates API 方法可以參考 GTM 官方這篇:Custom template APIs

此次完整程式碼如下:

// Require the necessary APIs
const addEventCallback = require('addEventCallback');
const readFromDataLayer = require('copyFromDataLayer');
const sendPixel = require('sendPixel');
const getTimestamp = require('getTimestamp');

// Get the dataLayer event that triggered the tag
const event = readFromDataLayer('event');

// Add a timestamp to separate events named the same way from each other
const eventTimestamp = getTimestamp();

const endPoint = data.endPoint;
const batchHits = data.batchHits === 'yes';
const maxTags = data.maxTags;

// Utility for splitting an array into multiple arrays of given size
const splitToBatches = (arr, size) => {
  const newArr = [];
  for (let i = 0, len = arr.length; i < len; i += size) {
    newArr.push(arr.slice(i, i + size));
  }
  return newArr;
};

// The addEventCallback gets two arguments: container ID and a data object with an array of tags that fired
addEventCallback((ctid, eventData) => {

  // Filter out tags that have the "exclude" metadata set to true
  const tags = eventData.tags.filter(t => t.exclude !== 'true');
  
  // If batching is enabled, split the tags into batches of the given size
  const batches = batchHits ? splitToBatches(tags, maxTags) : [tags];
  
  // For each batch, build a payload and dispatch to the endpoint as a GET request
  batches.forEach(tags => {
    let payload = '?eventName=' + event + '&eventTimestamp=' + eventTimestamp;
    
    tags.forEach((tag, idx) => {
      const tagPrefix = '&tag' + (idx + 1);
      payload +=
        tagPrefix + 'id=' + tag.id +
        tagPrefix + 'nm=' + tag.name +
        tagPrefix + 'st=' + tag.status +
        tagPrefix + 'et=' + tag.executionTime;
      
      log(['GTM_Tag Status'],tag.status);
    
    });
    log(['GTM_This is payload'],payload);
    
    sendPixel(endPoint + payload, null, null);
  });
});

// After adding the callback, signal tag completion
data.gtmOnSuccess();

// 代碼結束時呼叫 data.gtmOnSuccess。
data.gtmOnSuccess();

可以看到 const endPoint = data.endPoint; 這邊的 endPoint 就是使用者輸入的文字框內的值,這邊將參數附加在 endPoint 後面,最後再用Custom template 提供的 sendPixel API 來向指定的 URL 發送 GET 請求,最後代碼結束時需呼叫 data.gtmOnSuccess()

3. 設定權限:

從 Custom templates 權限內可以看到讀取資料庫的部分有輸入 event ,是因為我們在程式碼內有使用到 const event = readFromDataLayer(‘event’) 所以要給予 event 的權限。

關於更多 Custom templates 其他權限可以參考GTM官方這篇:Custom template permissions

4. 設定 GTM 代碼:

設定好 templates 後,你就可以在代碼內選取剛剛設定好的範本,而畫面就是剛剛我們在範本欄位內選擇的畫面,至於執行的程式就是我們剛剛寫入的範本程式。

基本上這樣就完成了一個 GTM 的 Monitor,最後只需要再將 Request GET 的部分將資料轉入資料庫就完成囉!

那 [GTM 教學] 什麼是Custom templates 自訂範本 就到這告一段落,如有任何問題歡迎留言!

此篇文章轉載至 Max行銷誌

 

使用者在各網頁上可以設置的事件追蹤
Google Analytics數據分析

Google Analytics事件追蹤規劃、安裝與分析應用

事件追蹤是Google Analytics中非標配的強大武器,能夠蒐集使用者在網站上的互動行為,如影片觀看、按鈕點擊、畫面滑動比例等。但因為不像是基礎Google Analytics追蹤碼,只需要埋設在全站頁面上,而是必須針對想追蹤的事件行為去客製化追蹤碼,對於剛入門網站分析的人來說有點距離感,不過一旦擁有了網站事件資料,對於網站優化以及使用者的理解就可以更上一層樓。本文將說明如何規劃網站事件追蹤以及怎麼應用獲得的資料。(實際追蹤碼安裝步驟,將在文中提供參考文章與影片)

 

為什麼需要網站事件追蹤?

簡單的答案是:為了蒐集更細緻的使用者行為來優化網站流程,進而使網站的目標更容易被達成。

當安裝基礎Google Analytics網站追蹤碼時,只會蒐集到網頁瀏覽資料,而無法知道使用者在該頁面做了什麼互動,例如觀看影片幾秒鐘、點擊了加入購物車按鈕等。而這些行為資料都是有價值的。假設是一個電商網站,網站的商業目標就會是購物,點擊加入購物車按鈕代表購買意願,了解哪一些人有消費意願,進而層層推進,直到下單結帳,可以幫助網站流程上的優化,使線上購物更容易完成。

 

開始規劃網站事件追蹤

設定網站目標

設定事件追蹤前必須先決定網站目標,每個網站存在的目的不同,內容型網站希望你待在網站上瀏覽的時間越長越好,因為廣告曝光是其營利的方式。電商網站則希望能快速結帳完成,瀏覽時間太長可能是使用者找不到想要的商品或是結帳流程不順暢,並不是一件好事。確立好網站的最終目標後,我們才能往回推算在到達最終目標之前,使用者在特定頁面時,有哪些關鍵事件是我們要追蹤的。以電商網站舉例,其網站目標即是完成購物,下圖為使用者在到達結帳完成頁之前,會經過的路徑頁面以及可追蹤的事件舉例。

使用者在各網頁上可以設置的事件追蹤

(圖一、以電商網站為例,使用者在各路徑頁面可追蹤的事件)

事件追蹤架構

架構影響著後續如何設置追蹤碼以及分析資料的邏輯,Google Analytics提供 4 種事件資料的組成要素,可以想像成是資料的多階層分類方式。不同的網站形式或分析目的,事件追蹤架構會有所差異。命名時英文的大小寫有區別,需特別注意。

  • 類別:一群相似功能的事件。
  • 動作:和網頁元件的特定互動。
  • 標籤:描述該事件的額外資訊。
  • 值(非必填):賦予該事件一數值。
事件追蹤架構規劃表

(圖二、文件紀錄欲追蹤的事件與其架構)

決定是否為互動匹配

事件可以分為互動匹配或非互動匹配,兩者差異在是否影響網頁的跳出率計算,其計算方式為單頁工作階段除以所有工作階段。

互動匹配:事件觸發後,不影響跳出率,該工作階段將不算入單頁工作階段。

非互動匹配:事件觸發後,影響跳出率,該工作階段算入單頁工作階段。

下方舉兩個例子說明。

點擊外部連結:追蹤網站內的外部連結點擊,並設定為非互動匹配,因此使用者點擊離開網站時,將會影響跳出率。

點擊加入購物車:追蹤加入購物車按鈕,設定為互動匹配,按鈕事件觸發後,使用者離開網站,不會影響跳出率計算。

GTM設置事件時可選擇非互動匹配

(圖三、Google Tag Manager設置中可選擇該事件是否為互動匹配)

 

使用Google Tag Manager安裝Google Analytics事件追蹤碼

因為Google Tag Manager和Google Analytics之間的整合相當完整,且介面易上手,即使沒有寫程式的背景,也可以自行將追蹤碼埋設完成,因此建議使用Google Tag Manager來執行。透過Google Tag Manager設定Google Analytics基本追蹤碼可以參考此文

由於透過Google Tag Manager裝設Google Analytics事件中間有許多步驟,筆者推薦下列影片作為入門,影片從基礎概念、抓取網頁元件、裝設事件到事件測試都有完整的操作。當然不同形式的事件追蹤方式仍有差異,此影片以常見的按鈕點擊作為範例說明。

https://www.youtube.com/watch?v=r87A-Ql2czg

 

應用網站事件數據

了解如何規劃以及安裝追蹤碼後,最後一部分來談怎麼應用所蒐集到的數據,以下將會以Google示範帳戶中的網站資料做說明,該網站販售Google相關周邊商品,主要目標為線上購買。

觀察與網站目標高度相關的網站事件

透過Google Analytics的區隔功能,可以將觸發特定事件的工作階段切割出來,因此可以觀察到特定的事件觸發會與重要的網站目標指標有關聯。從下圖可看出,有觀看過商品預覽的電子商務轉換率比沒有觀看過的高出許多。此外,區隔分析僅能看出相關性,嚴謹一點的做法會是進一步用A/B testing檢驗因果關係。

(圖四、區隔分析觸發事件與否和網站轉換率的相關性)

設定Google Analytics目標

了解哪些事件有關聯或影響網站目標後,可以進一步在Google Analytics內設定目標。相對於網站購買作為主要目標,影片觀看或是加入購物車即為次要目標。特別注意的是,每個資料檢視僅可以最多設置20個目標,因此先用上一步驟確認事件與主要目標相關性,可以避免設置過多不必要的次要目標。

設立目標後可以讓Google Analytics幫你計算目標轉換次數、目標轉換率和轉換價值,在常用的預設報表中,可隨時切換轉換目標看數據,進而可以用不同角度(新舊客、流量來源或國家地區等)去解析資料。下圖為新舊訪客報表切換轉換切至EnGoogle Analyticsged Users次要目標。(註:示範帳戶無權限設置目標,因此以帳戶既有的次要目標做截圖說明)

新舊客在次要目標轉換engaged user的數據

(圖四、用事件設置次要目標,在GA各預設報表中作分析)

打包受眾,投遞再行銷廣告

使用者到網站上瀏覽後,有很大的比例是沒有完成主要目標轉換就離開網站,以Google示範網站為例,其電子商務轉換率平均約0.14%,代表有99%以上的人都是沒有完成轉換購買。而知道特定事件和主要目標轉換有高相關性後,我們就可以在Google Analytics中打包受眾,將有觸發該事件的使用者撈出來,並將受眾資料拋給已經和該Google Analytics帳戶串接的Google AnalyticsD帳戶,執行再行銷廣告投放。

定義觸發事件的受眾

(圖四、定義觸發加入購物車事件的目標對象)

 

本文希望作為入門磚,讓讀者開始了解網站事件追蹤,事實上事件追蹤可大可小,有些可以從Google Tag Manager設定,有些需要透過撰寫程式輔助。想了解更多不同事件的追蹤可以參考這篇文章,應該可以給你許多如何監控使用者的靈感!

數據分析活動紀實

[活動筆記] Web Analytics 101 社團第三次實體聚會 3rd-Meetup 歲末分享

在與 2016 說再見之前,Web Analytics 101 舉行了第三次的實體聚會。

這次的大講主題定為 [ 從數據分析轉為行銷策略的應用 ]
討論的重點不在工具也不在技術,而是回歸到數據分析的核心上
希望讓工作中不需要接觸到追蹤佈碼的行銷人員也能有滿滿的收獲
小講的部份則是不離鼓勵社群互動的精神
以分享者為主,自定主題
希望能為大家帶來收獲滿滿的 大·平·台!

兩個長約 20~30 分鐘的分享都是關於 App 數據追蹤

  • GA埋code前,先問自己的3個問題/Sam Fu
  • 行銷人的網站數據分析迷思/Kevin Wang

 

三個10分鐘的快講

  • 衝爆轉換率—電子商務追蹤錯誤案例分享/Danny Ho
  • 如何測試GTM標籤能正確執行/Jacky Chang
  • https如何影響seo與ga/孟令強

 

以下筆記為當天的所有參與的社群成員,利用 Hackpad 共筆而成。

 

Read More

數據分析活動紀實

[活動筆記] Web Analytics 101 社團第二次實體聚會 2nd-Meetup

繼首次實體活動,購票”分”殺的盛況。即使是下著紛飛大雨還有 94% 出席率的第一次活動之後。為了持續鼓勵大家多交流,很快的在 2016 第三季,Web Analytics 101 再次的有了第二次的實體活動。這次也是請到了很多講者來分享。

兩個長約 20~30 分鐘的分享都是關於 App 數據追蹤

  • App分析到營運心得 / 楊立德
  • App 的隱形殺手:留存率 / Jason

四個10分鐘的快講

  • 喬后的網站分析小技巧 / 鍾喬后
  • 網頁點擊熱圖分析經驗分享 / 蔡明哲
  • GTM 自動事件追蹤 / Damon Liao
  • 自己的資料自己抓-爬蟲實戰案例分享 / Frank

以下筆記為當天的工作人員 Irene Sung 與 黃鈺婷 所提供

Read More