2017 年 8 月開始,Google Analytics 推出新的追蹤流量工具 Global Site Tag (gtag.js) 來接收網頁流量數據,此工具除了提供更強大的資料收集 API 外,還對 SPA (Single Page Application) 網站提出了更簡單使用的 API。這篇將示範如何在 Angular 專案中加入 Global Site Tag 網站追蹤程式碼。
取得追蹤碼
在您的 Google Analytics 帳戶管理介面中,可以從資源 > 追蹤資訊 > 追蹤程式碼中取得專屬的全域網站代碼,程式碼長得如下:
1 | <!-- Global site tag (gtag.js) - Google Analytics --> |
上述程式碼中的
GA_TRACKING_ID請改成你專屬的追蹤編號。
安裝追蹤碼
這一步沒有難度,直接將取得的程式碼貼到 index.html 的 head 區段內。
這裡我希望做個改變,將 GA_TRACKING_ID 移至 environment 做管理,這樣做可以區分測試和正式環境,避免在開發測試時,你的測試流量也被傳送到 Google Analytics 中。
1 | <head> |
設定 Angular 專案
先來處理 environment.prod.ts,加入 GA_TRACKING_ID 的設定。
1 | export const environment = { |
接著修改 app.module.ts,主要處理 3 件事情:
- 使用
InjectionToken的方式提供environment服務,方便專案之後的使用 - 在外層宣告一個型別為
Funtion的變數gtag(後面再說明為甚麼) - 在
AppModule的constructor中執行gtag('config', 'GA_TRACKING_ID');,記得要把GA_TRACKING_ID改成environment中的設定值
1 | import {Inject, InjectionToken, NgModule} from '@angular/core'; |
步驟 2 的寫法是因為目前 Global Site Tag 所使用的 gtag.js 還有沒 Typescript 用的模組定義檔,所以再外層直接宣告一個 gtag 變數,作為暫時的替代方案,避免 Typescript 在編譯時期跟你抱怨他找不到 gtag 在哪裡。
追蹤 Pageview
完成上述的設定後,我們希望在每次路由變更的時候,能夠發送瀏覽數據給 GA,這裡我們可以從啟動的根元件 AppComponent 下手。
我們可以透過監聽路由的 NavigationEnd 事件,當成功完成路由變更時,觸發發送瀏覽數據的事件方法 gtag('event', 'page_view', { 'page_path': x.url }); }),並且將當前的網址路徑傳送過去。
1 | import {Component, OnInit} from '@angular/core'; |
這邊使用 RxJS 的
distinctUntilChanged操作符,distinctUntilChanged跟distinct一樣會把相同的元素過濾掉,但distinctUntilChanged只會跟最後一次送出的元素比較,不會每個都比。因此distinctUntilChanged只會暫存一個元素,不像distinct會在背後產生一個暫存用的 Set,當用在一個無限的 observable 時,這個 Set 可能會撐爆你的記憶體。
順道一提,Pageview Event 有三個參數可以傳送:
| 參數名稱 | 型別 | 選用 | 說明 |
|---|---|---|---|
| page_title | string | No | 網頁標題 |
| page_location | string | No | 網頁 URL |
| page_path | string | No | 以 / 開頭的網址路徑 |
測試是否成功
追蹤碼及程式碼寫完後可以用 ng serve 來測試執行,可以透過以下兩種方式來檢查是否有正確執行:
- 登入 Google Analytics 查看即時報表,當有使用者瀏覽該網站時,一分鐘內就會顯示資料
- 安裝 Chrome 擴充套件 Tag Assistant,在打開網頁後,執行 Tag Assistant 檢查是否拿到正確的 tag 資訊
更多進階使用資訊
如果你想要使用更多 Global Site Tag 額外的追蹤需求,例如事件追蹤、時間追蹤、電子商務分析、流量來源追蹤等功能,請參考以下資訊:
- 事件追蹤:客製化追蹤使用者在網頁中的行為,例如點擊特定區塊、播放影片等
- 時間追蹤:客製化追蹤時間相關資訊,例如影片播放時間、表單填寫時間
- 電子商務:瞭解客戶在購買流程中的狀況,找出導購網頁的關鍵問題
- 流量來源:除了基本的流量來源追蹤外,可在連結網址中加入 utm 參數,客製化流量來源的紀錄項目
SPA 解決方案
SPA 網站會在首次載入網頁時,會將所需資源全部載入,並在使用者點擊網站鏈接與網站互動時,以動態的方式載入後續內容。傳統的流量分析工具,會因為始終沒有發出 HTTP Request 網頁載入請求,而無法追蹤、紀錄使用者行為,造成網頁互動數據的遺失。
Global Site Tag 對 SPA 網站提供了虛擬網頁瀏覽的追蹤,根據官方文件,你可以透過下列方式,當網站動態載入內容並更新 URL 網址時,發送瀏覽數據及網址路徑至 Google Analytics 做紀錄。
1 | gtag('config', 'GA_TRACKING_ID', {'page_path': '/new-page.html'}); |
但其實,藉由上面的作法,我們也成功紀錄 Angular SPA 專案的使用者瀏覽變化。
參考資料: