智解家(All-Pass AI)GA4 埋點規格書

2026-04-01

智解家(All-Pass AI)GA4 埋點規格書

版本:v4.8 日期:2026-04-01 GA4 PropertyG-YNYMSRYLP3(已部署) Google Ads ID18007549282(已部署) GTM ContainerGTM-MS9F9PVG(已部署) API Baseapi.all-pass.ai/api/v1/ Frontend Repoallstars-rocks/lawsome-frontend


1. 命名規範

規則說明
GA4 標準事件優先使用 GA4 推薦事件名稱(sign_up, login, purchase, begin_checkout, add_payment_info
自訂配對事件{object}_{start/complete},如 sign_up_start / practice_session_complete
自訂單次事件{object}_{action},如 question_selectfilter_apply
錯誤事件{object}_error,如 signup_errorcheckout_error
參數名snake_case,如 course_namebutton_text
長度限制事件名 ≤ 40 字元、參數名 ≤ 40 字元、參數值 ≤ 100 字元
Boolean 值統一使用字串 "true" / "false"(GA4 無原生 boolean type,避免 BigQuery 不一致)

2. User Identity 策略

user_id(唯一的 User Property)

設計決策:User Properties 只保留 user_id,不追蹤 subscription_status

  • GA4 User Properties 不是 state machine,沒有 ordered updates 或 conflict resolution。訂閱狀態以 server DB 為 authoritative source。
  • 需要按訂閱狀態分析?透過 BigQuery export join server DB,比 User Property 更可靠。
  • 需要 Google Ads remarketing Audience?用 event-based Audience(例如「30 天內觸發 purchase 且未觸發 subscription_cancel 的用戶」),比 property-based 更準確。

user_id 設定時機

時機做什麼
App mount(已登入)gtag('set', 'user_id', user.id) — 在任何事件 fire 之前
註冊成功API 回傳 user data → gtag('set', 'user_id', user.id)
登入成功API 回傳 user data → gtag('set', 'user_id', user.id)
登出gtag('set', 'user_id', null)

SPA 注意gtag('set') 在 SPA page lifecycle 內持續有效(包含 route navigation),但 hard refresh 或新分頁會重置,必須在 App mount 時重新設定。

GA4 Identity 擷取(供 Measurement Protocol 使用)

Server-side 事件需要以下欄位才能正確 stitch 到 client session。前端在註冊/登入時擷取,透過 API 送到 backend 存入 user table。

欄位用途
client_id識別瀏覽器/裝置(MP 必填
session_idSession 歸因(不傳則 source/medium 為 (not set)
session_numberSession 序號

client_id vs user_id

  • client_id = GA4 自動產生,每個瀏覽器/裝置一個,匿名訪客就有。是 GA4 的主要身份軸
  • user_id = 應用程式的用戶 ID,註冊/登入後才有。是在 client_id 之上的 overlay,讓 GA4 能 stitch 不同裝置的 session。
  • 兩者不可互相取代。MP 必須提供 client_iduser_id 用於跨裝置合併。

Ad blocker fallback:若 gtag 被擋導致無法取得 client_id,server 可生成 synthetic UUID(格式:<random>.<timestamp>)。GA4 接受任意字串,但會失去與匿名瀏覽 session 的 stitch。

GA4 Property 設定:Admin → Identity → Reporting Identity 必須設為 Blended(推薦)或 Observed,否則 user_id 會被收集但在報表中被忽略。


3. 埋點架構:Client-side vs Server-side

Client-side(dataLayer.push)

UI 互動事件與即時回饋事件,透過 GTM dataLayer 實作。

Server-side(GA4 Measurement Protocol v2)

Subscription lifecycle 與部分練習事件由 server 觸發,確保資料正確性:

事件原因
sign_up註冊是否成功由 server 決定
subtopic_completeBackend 判定小題完成
chat_message_sendServer 收到聊天訊息
hint_requestServer 收到 hint 請求
purchaseTapPay 3D Secure webhook 是唯一可靠的付款確認
trial_startTrial 建立由 server 處理
trial_cancel取消邏輯由 server 處理
trial_converted試用轉付費由 server 處理

前端配合

Frontend 在呼叫 registration / login / subscription API 時,一併傳送 GA Identity 欄位client_id, session_id, session_number),讓 server 的 MP 呼叫能正確歸因到 client session。

Measurement Protocol 注意事項

項目說明
API SecretGA4 Admin → Data Streams → Measurement Protocol API secrets(不是 Measurement ID)
必要欄位client_id(必填)、user_id(建議)、session_id + session_number(歸因用)
engagement_time_msec每個事件至少設為 1(否則不被計入 active session)
timestamp_micros設為實際事件發生時間(超過 72 小時會被 GA4 靜默丟棄)

DB Schema 擴充

User table 需新增以下欄位以支援 Measurement Protocol:

欄位型別說明
ga_client_idstringGA4 client_id,註冊/登入時更新
ga_session_idstringGA4 session_id,每次登入更新
ga_session_numberintegerGA4 session_number,每次登入更新

4. 事件總覽

核心漏斗(P1)— 21 個事件

核心漏斗流程圖
Mermaid 原始碼
flowchart TD
    CTA["cta_click"] --> SS["sign_up_start"]
    SS --> SU["sign_up"]:::server
    SU --> EV["email_verify_complete"]
    LI["login"] -.->|回訪| EV

    EV -->|做題| PS["practice_session_start"]
    EV -->|購買| PW["paywall_impression"]
    EV -->|試用| TI["trial_impression"]

    PS --> SC["subtopic_complete ×N"]:::server
    SC --> TI

    PW --> AP["add_payment_info"]
    TI --> AP

    AP -->|直接購買| BC["begin_checkout"]
    BC --> PU["purchase"]:::server

    AP -->|免費試用| TS["trial_start"]:::server
    TS --> TC["trial_cancel"]:::server
    TS --> TCONV["trial_converted"]:::server
    TCONV --> PU

    PU -->|續訂| PU
    PU --> SKC["subscription_cancel"]:::server
    SKC --> SKE["subscription_expire"]:::server

    classDef server fill:#e8f5e9,stroke:#2e7d32

綠色 = Server-side(Measurement Protocol),紫色 = Client-side

Client-side 事件(13 個)

#階段事件觸發條件類型
1Landingcta_click點擊 Landing Page CTA自訂(GTM)
2註冊sign_up_start點擊註冊按鈕 / Modal 出現自訂
3回訪login登入成功(API 回傳 200 後)GA4 標準
4驗證email_verify_completeEmail 驗證成功自訂
5瀏覽question_bank_page_view進入題庫頁面自訂
6瀏覽teacher_page_view進入老師專區頁面自訂
7做題practice_session_start進入練習頁,題目載入完成自訂
8結帳begin_checkout進入結帳最終步(billing step)GA4 標準電商
9綁卡add_payment_info綁定信用卡成功GA4 標準電商
10付費牆paywall_impression訂閱方案曝光(直接購買路徑)自訂
11試用trial_impression免費試用邀請曝光(試用路徑)自訂
12模考exam_page_view進入模考頁面自訂
13帳號profile_page_view進入個人檔案頁面自訂

Server-side 事件(8 個,Measurement Protocol)

#階段事件觸發條件類型
14註冊sign_up註冊 API 成功(server confirmed)GA4 標準
15完成subtopic_complete小題總結完成(Backend 判定)自訂
16試用trial_startTrial 建立成功自訂
17試用trial_cancel試用取消或到期未轉換自訂
18試用trial_converted試用轉為付費訂閱自訂
19營收purchase付費成功(TapPay webhook 確認)GA4 標準電商
20訂閱subscription_cancel付費用戶主動取消續訂自訂
21訂閱subscription_expire付費訂閱到期未續訂自訂

低優先(P2)— 13 個事件

#事件觸發條件觸發端
22landing_scrollLanding Page 滾動至特定 SectionClient
23signup_error註冊 API 回傳錯誤Client
24login_error登入失敗Client
25dashboard_cta_click點擊 Dashboard CTAClient
26course_view進入課程頁(帶 course_idClient
27course_button_click點擊課程按鈕(查看題目/訂閱方案/進入課程)Client
28filter_apply使用篩選器Client
29hint_request「老師怎麼想」觸發 AI hintServer
30chat_message_send作答模式送出訊息Server
31exam_answer_submit模考提交答案Client
32checkout_error付款提交失敗Client
33profile_edit編輯個人資料Client
34logout點擊登出Client

5. 事件詳細規格


A. Landing Page(all-pass.ai

Landing Page — 標註 CTA 觸發位置

A-1. page_view(GA4 自動)

欄位
觸發條件進入 all-pass.ai Landing Page
類型GA4 Enhanced Measurement(自動收集)
參數型別說明
page_titlestring自動
page_locationstring自動

SPA 注意:需確認 GA4 Enhanced Measurement 的 History Change 偵測已開啟。若 SPA 內頁面切換不觸發 page_view,需補 manual firing。


A-2. landing_scroll(Client-side)

欄位
觸發條件Landing Page 滾動至特定區塊
類型GA4 Enhanced Measurement + GTM 自訂擴展
優先級P2
參數型別說明
section_visiblestringhero / demo / features / modes / teachers / testimonials用戶滑動到的最下方 Section

以 Section 為追蹤單位,可透過 GTM Scroll Depth trigger 實作。


A-3. cta_click(Client-side)

欄位
觸發條件點擊 Landing Page 任一 CTA 按鈕
類型自訂事件
優先級P1(GTM 實作)
參數型別範例值說明
button_textstring立刻體驗 / 掌握申論備考秘技按鈕文字(唯一識別 CTA)

button_textbutton_id 適合:Landing Page CTA 無固定 ID 屬性,且文字在報表中可讀性更高。可透過 GTM Click trigger 實作。


B. 帳號流程(app.all-pass.ai/login

登入/註冊入口 — sign_up_start 觸發位置

B-1. sign_up_start(Client-side)

欄位
觸發條件點擊「立即註冊」,Modal 出現
優先級P1
參數型別範例值說明
methodstringemail / google註冊方式(如可判斷)

用途:搭配 sign_up 計算註冊轉換率(start → complete),識別表單 UX 摩擦點。


B-2. sign_up(Server-side MP)

欄位
觸發條件註冊成功(API 回傳 200)
類型GA4 推薦事件(啟用 GA4 User Acquisition 內建報表)
優先級P1
參數型別說明
methodstringemail / google(GA4 標準參數)

Google OAuth:與登入走同一 API,需後端回傳 is_new_user flag 區分。


B-3. signup_error(Client-side)

欄位
觸發條件註冊 API 回傳錯誤
優先級P2
參數型別說明
methodstringemail / google
error_typestringemail_exists / invalid_password / network_error

B-4. login(Client-side)

欄位
觸發條件登入成功(API 回傳 200 後)
類型GA4 推薦事件
優先級P1

(無額外參數)

登入成功後需同時設定 user_id 並擷取 GA Identity 存入 backend(見 Section 2)。


B-5. login_error(Client-side)

欄位
觸發條件登入 API 回傳錯誤
優先級P2
參數型別說明
error_typestringwrong_password / user_not_found / network_error

B-6. email_verify_complete(Client-side)

欄位
觸發條件Email 驗證成功
優先級P1

(無額外參數,僅在驗證成功時 fire,不含 error 情境)


C. Dashboard(/dashboard

Dashboard — dashboard_cta_click 觸發位置

C-1. dashboard_cta_click(Client-side)

欄位
觸發條件點擊 Dashboard「立即練習一題」按鈕
優先級P2

(無額外參數)


D. 題庫(/question-bank

D-0. question_bank_page_view(Client-side)

欄位
觸發條件進入題庫頁面(頁面載入完成)
優先級P1

(無額外參數)

用途:追蹤題庫頁面造訪量,搭配 filter_applypractice_session_start 可計算「瀏覽 → 篩選 → 開始做題」的轉換率。


D-1. filter_apply(Client-side)

欄位
觸發條件使用任一篩選器
優先級P2
參數型別範例值說明
filter_typestringcategory / tag / answer_status / teacher篩選器類型
filter_valuestring所選值篩選值

E. 課程與老師專區

E-0. teacher_page_view(Client-side)

欄位
觸發條件進入老師專區頁面(頁面載入完成)
優先級P1

(無額外參數)

用途:追蹤老師專區造訪量。搭配 course_viewpaywall_impressionsource: teacher_view_plan)可分析老師專區的付費轉換路徑。


E-1. course_view(Client-side)

欄位
觸發條件進入課程頁面
優先級P2
參數型別說明
course_idstring課程 ID

E-2. course_button_click(Client-side)

欄位
觸發條件點擊課程頁面上任何與課程互動相關的按鈕(包含查看題目、查看訂閱方案、進入課程等)
優先級P2
參數型別範例值說明
course_idstringUUID課程 ID
button_typestringview_questions / view_plan / enter_course按鈕類型

用途:追蹤「未購買但對這門課有興趣」的用戶行為。button_type 區分不同意圖:view_questions(查看題目)、view_plan(查看訂閱方案)、enter_course(嘗試進入課程)。


E-3. paywall_impression(Client-side)

查看訂閱方案 — paywall / trial impression 出現時觸發

欄位
觸發條件付費牆或訂閱方案 Modal 出現(包含鎖定內容覆蓋層、課程頁按鈕、老師專區「查看訂閱方案」等所有入口)
優先級P1
參數型別說明
course_idstring相關課程(可為 null)
sourcestring紀錄從哪個入口觸發 paywall(見下方來源列表)

Paywall 觸發來源(source 參數值)

  • locked_content — 課程內的鎖定內容覆蓋層(未購買用戶看到的鎖定內容)
  • course_practice_button — 題目頁的「開始練習」按鈕
  • course_view_plan — 課程頁面「查看訂閱方案」按鈕
  • teacher_view_plan — 老師專區「查看訂閱方案」按鈕

E-4. trial_impression(Client-side)

欄位
觸發條件免費試用邀請出現(尚未試用過的用戶看到試用 CTA 或 Modal)
優先級P1
參數型別說明
course_idstring相關課程(可為 null)
sourcestring觸發來源(同 paywall_impression)

paywall_impression 的區別paywall_impression 是訂閱方案的曝光(直接購買路徑),trial_impression 是免費試用邀請的曝光(試用路徑)。兩者在漏斗中處於同一層級,由用戶的試用資格決定顯示哪一個。

用途:搭配 trial_start 計算試用轉換率(impression → start)。與 paywall_impression 分開追蹤,可比較兩條路徑的轉換效率。


F. 練習做題(/practice-session/{id}/chat-session/{id}

架構說明:每個 practice session 對應一題,包含 N 個 sub-questions,每個 sub-question 對應一個 chat session。用戶在「講解」(explanation) 和「作答」(qa) 模式間切換。

F-1. practice_session_start(Client-side)

欄位
觸發條件進入練習頁,session 資料載入完成
優先級P1
參數型別說明
session_idstring練習 session ID
question_idstring題目 ID
course_idstring課程 ID
entry_sourcestringdashboard_cta / question_bank / random / course

注意:需防止頁面 re-render 重複觸發。question_title, category, teacher 等 metadata 不帶在事件上,可透過 question_id join 後端資料庫取得。


F-2. subtopic_complete(Server-side MP)

欄位
觸發條件小題完成(Backend 判定 session_status: completed
優先級P1
參數型別說明
session_idstring練習 session ID
question_idstring題目 ID
subtopic_indexinteger當前小題序號(0-based)

每小題只 fire 一次。這是練習漏斗的最小追蹤單位,可看到「做了幾題就放棄」的分佈。


F-4. chat_message_send(Server-side MP)

欄位
觸發條件作答模式送出聊天訊息(Server 收到 chat API 請求時)
優先級P2
參數型別說明
session_idstring練習 session ID
question_idstring題目 ID
subtopic_indexinteger當前小題序號

F-5. hint_request(Server-side MP)

欄位
觸發條件「老師怎麼想」觸發 AI hint(Server 收到 hint API 請求時)
優先級P2
參數型別說明
session_idstring練習 session ID
question_idstring題目 ID
subtopic_indexinteger當前小題序號

AI 生成的提示(非靜態內容),由 Server 端 hint API 觸發。


G. 模考(/exam/{examSessionId}

架構說明:模考與練習是獨立流程。從 PracticeSession 的「開始模考批改」進入,建立 exam session 後跳轉到模考頁面。提交後 AI 批改耗時 20-40 秒。

G-0. exam_page_view(Client-side)

欄位
觸發條件進入模考頁面(頁面載入完成)
優先級P1
參數型別說明
question_idstring題目 ID
session_idstring練習 session ID(來源)

用途:追蹤有多少用戶從練習進入模考。搭配 exam_answer_submit 可計算模考完成率。


G-1. exam_answer_submit(Client-side)

欄位
觸發條件模考提交答案
優先級P2
參數型別說明
exam_session_idstring模考 session ID
question_idstring題目 ID
answer_lengthinteger作答字數
exam_modestringsimple / realistic
duration_secondsinteger作答耗時(秒)

exam_modeduration_seconds 為前端 UI 狀態。


H. 訂閱/付款流程

架構說明

  • 付款模式:選方案 + coupon → 選卡/綁卡 → 填寫帳單 → 送出付款
  • 試用模式:試用邀請 → 選卡/綁卡 → 填寫帳單 → 送出
  • 付款整合:TapPay(台灣),支援 3D Secure(全頁重定向)
  • 發票:台灣電子發票(手機條碼/自然人憑證/愛心碼)

Trial vs Purchase 分離設計:Trial 開始為獨立的 trial_start 事件,不進 GA4 電商漏斗。purchase 事件只在真實付費時觸發(value > 0),避免 $0 trial 拉低 AOV。

Trial 生命週期trial_starttrial_converted(轉為付費)或 trial_cancel(取消/未轉換)。不再有獨立的 expire 事件。

H-1. trial_start(Server-side MP)

欄位
觸發條件Trial 建立成功
類型自訂事件(Measurement Protocol)
優先級P1
參數型別說明
course_idstring課程 ID
plan_idstring方案 ID

H-2. trial_cancel(Server-side MP)

欄位
觸發條件試用取消或到期未轉換(用戶主動取消,或試用期滿未轉為付費)
類型自訂事件(Measurement Protocol)
優先級P1
參數型別說明
course_idstring課程 ID
days_remaininginteger取消時剩餘試用天數(0 = 到期未轉換,>0 = 主動取消)

分析用途days_remaining = 0 表示被動流失(試用到期未轉換),days_remaining > 0 表示主動取消。搭配 trial_converted 可計算 Trial-to-Paid 轉換率。


H-3. trial_converted(Server-side MP)

欄位
觸發條件試用轉為付費訂閱(試用期結束後成功扣款)
類型自訂事件(Measurement Protocol)
優先級P1
參數型別說明
course_idstring課程 ID

Trial 完整生命週期

  • trial_starttrial_converted + purchase — 試用轉付費
  • trial_starttrial_cancel (days_remaining > 0) — 主動取消
  • trial_starttrial_cancel (days_remaining = 0) — 到期未轉換

H-4. add_payment_info(Client-side)

欄位
觸發條件綁定新信用卡成功
類型GA4 推薦電商事件
優先級P1
參數型別說明
course_idstring課程 ID
payment_flowstringtrial / subscription(判斷用戶走試用還是直接訂閱)

GA4 items 陣列:GA4 電商報表需要 items 參數。由於本產品每次只購買一門課程,items 固定為 [{item_id: course_id, item_name: "課程名稱", quantity: 1}],實作時自動帶入即可,不列為獨立參數。


H-5. begin_checkout(Client-side)

欄位
觸發條件進入結帳最終步(從選卡進入填寫帳單)
類型GA4 推薦電商事件
優先級P1
參數型別說明
course_idstring課程 ID
payment_flowstringtrial / subscription

注意begin_checkout 不帶 value 參數。GA4 會將帶 value + currency 的事件自動計入 Revenue,造成雙重計算。Revenue 只在 purchase 事件計算。

GA4 items 陣列:同 H-4,自動帶入 [{item_id: course_id, ...}]


H-6. purchase(Server-side MP)

欄位
觸發條件付費成功(僅真實付費,trial 不觸發此事件)
類型GA4 推薦電商事件(啟用 GA4 Monetization 報表 + BigQuery ecommerce 欄位)
優先級P1
參數型別範例值說明
transaction_idstringsub_abc123訂閱 ID(GA4 必要,用於去重)
valuenumber990付費金額(GA4 必要,計入 Revenue)
currencystringTWD幣別(GA4 必要)
course_idstringUUID課程 ID
couponstringSAVE20(可為 null)GA4 標準 coupon 參數
purchase_typestringnew / trial_converted / renewal訂單類型(新訂閱 / 試用轉付費 / 續訂)

Trial 不觸發 purchase:Trial 走 trial_start(自訂事件),避免 $0 transaction 拉低 Average Order Value。

GA4 items 陣列:同 H-4,自動帶入 [{item_id: course_id, item_name: "課程名稱", price, quantity: 1}]。GA4 Monetization 報表需要此欄位才能顯示 Item-level 數據。


H-7. checkout_error(Client-side)

欄位
觸發條件付款提交失敗(API / TapPay / Network error)
優先級P2
參數型別說明
error_messagestring錯誤訊息(截斷 100 字元)
course_idstring課程 ID

H-8. subscription_cancel(Server-side MP)

欄位
觸發條件付費用戶主動取消續訂(取消後訂閱仍有效至到期日)
類型自訂事件(Measurement Protocol)
優先級P1
參數型別說明
course_idstring課程 ID
plan_typestringmonthly / quarterly / yearly
days_remaininginteger取消時剩餘訂閱天數(挽回窗口分析)
lifetime_valuenumber該用戶累計付費金額(TWD)

分析用途days_remaining 可建構「取消時機分佈」。Day 1 取消 = 產品問題,接近續訂日取消 = 價格敏感。


H-9. subscription_expire(Server-side MP)

欄位
觸發條件付費訂閱到期且未續訂(churn confirmed)
類型自訂事件(Measurement Protocol)
優先級P1
參數型別說明
course_idstring課程 ID
plan_typestringmonthly / quarterly / yearly
total_periodsinteger完成的計費週期數

注意:此事件只在訂閱真正結束時觸發(未續訂)。成功續訂 = 再一次 purchase(帶 purchase_type: "renewal"),不觸發 subscription_expire

付費訂閱完整生命週期

  • purchasepurchase (purchase_type: "renewal") → ... → 持續付費
  • purchasesubscription_cancelsubscription_expire(churn)

I. 個人檔案(/user-profile

I-0. profile_page_view(Client-side)

欄位
觸發條件進入個人檔案頁面(頁面載入完成)
優先級P1

(無額外參數)

用途:追蹤個人檔案頁造訪量。搭配 profile_edit 可計算「查看 → 編輯」的比例,了解用戶對 profile 功能的使用程度。


I-1. profile_edit(Client-side)

欄位
觸發條件編輯個人資料
優先級P2
參數型別說明
fieldstringname / password

I-2. logout(Client-side)

欄位
觸發條件點擊登出
優先級P2

登出後清除 user_id(見 Section 2)。


6. 漏斗設計

設計原則

典型用戶路徑

典型用戶路徑
Mermaid 原始碼
flowchart TD
    SS["sign_up_start"] --> SU["sign_up"]:::server
    SU --> EV["email_verify_complete"]

    EV -->|直接購買| PW["paywall_impression"]
    EV -->|先做題| PS["practice_session_start"]
    EV -->|試用| TI["trial_impression"]

    PS --> SC["subtopic_complete ×N"]:::server
    SC --> TI

    PW --> AP["add_payment_info(綁卡)"]
    TI --> AP

    AP -->|直接購買| BC["begin_checkout"]
    AP -->|免費試用| TS["trial_start"]:::server

    BC --> PU["purchase"]:::server

    TS --> TCONV["trial_converted"]:::server
    TS --> TC["trial_cancel"]:::server
    TCONV --> PU

    classDef server fill:#e8f5e9,stroke:#2e7d32

建議 GA4 Funnel 配置

FunnelSteps模式
註冊漏斗sign_up_startsign_upemail_verify_completeClosed
直接購買paywall_impressionadd_payment_infobegin_checkoutpurchaseOpen
Trial 轉換trial_impressionadd_payment_infotrial_starttrial_convertedOpen
做題後 Trialpractice_session_startsubtopic_completetrial_impressionadd_payment_infotrial_startOpen
Trial 生命週期trial_starttrial_convertedtrial_cancelClosed
付費訂閱留存purchasesubscription_cancelsubscription_expireOpen
練習投入度practice_session_startsubtopic_complete (×N)Open

7. 前置設定

項目說明
GA4 Reporting IdentityAdmin → Identity → 設為 Blended
MP API SecretGA4 Admin → Data Streams → Measurement Protocol API secrets → 建立
DB SchemaUser table 新增 ga_client_id, ga_session_id, ga_session_number 欄位(見 Section 3)
Custom Dimensions見下方註冊清單
Enhanced Measurement確認 History Change 偵測已開啟(SPA page_view)

GA4 Custom Dimensions 註冊清單

GA4 Free 上限:50 event-scoped custom dimensions + 50 custom metrics。

參數名Scope用途
session_idEvent練習 session 追蹤
question_idEvent題目關聯分析
course_idEvent課程 / 訂閱關聯分析
entry_sourceEvent練習進入方式分析
methodEvent註冊方式(sign_up)
button_textEventLanding CTA 分析
subtopic_indexEvent小題進度
button_typeEvent課程按鈕類型(view_questions / view_plan / enter_course)
sourceEventpaywall 觸發來源
payment_flowEvent付款流程類型(trial / subscription)
purchase_typeEvent訂單類型(new / trial_converted / renewal)
days_remainingEvent取消時機分析(trial + subscription)
plan_typeEvent方案類型分析
lifetime_valueEvent累計付費金額

8. 截圖索引

截圖檔案頁面對應事件
A-landing.pngLanding Page(viewport)A-3 cta_click
B-entry.png登入/註冊入口B-1 sign_up_start
C-dashboard.pngDashboardC-1 dashboard_cta_click
E-paywall.png訂閱方案 ModalE-3 paywall_impression

9. 修訂記錄

版本日期變更
v1.02026-04-01初版:基於 Playwright 探索的 39 事件規格
v2.02026-04-01命名規範統一、優先級重排、截圖索引
v3.02026-04-01基於前端程式碼 + Server API 分析全面重構(38 事件)
v3.12026-04-01三方 Expert Review:GA4 標準事件名、Trial 獨立、begin_checkout 移除 value、Boolean 統一字串
v4.02026-04-01User Properties 僅 user_id、Server-side MP v1、sign_up_start + sign_up server-side、trial_cancel、多路徑漏斗、移除 Week 分期
v4.12026-04-01(1) 移除 practice_session_complete(以 subtopic_complete 為最小追蹤單位)(2) 新增 subscription_cancel + subscription_expire(P1 server-side,付費訂閱生命週期)(3) purchase 新增 is_renewal + billing_period_number 參數 (4) paywall_impression 提升至 P1 (5) scrolllanding_scroll (6) course_tab_switchcourse_view(P2,帶 course_id)(7) question_select 降至 P3 (8) 移除 ai_feedback_receiveexam_feedback_viewcoupon_apply(coupon 已在 purchase/begin_checkout 參數中)(9) checkout_error 明確標記為 client-side (10) 新增付費訂閱留存 Funnel
v4.22026-04-01全事件截圖標註:每個事件在截圖上以紅框/色標標記觸發位置。新增 H-checkout 付費流程示意圖。截圖命名統一為 Section 字母編碼。
v4.32026-04-01參數精簡 + 截圖優化:filter_apply 移除 result_count、course_view 精簡、course_card_click → course_button_click(帶 button_type)、新增 paywall_impression 截圖、F-section params 統一、新增 exam_page_view(P1)
v4.42026-04-01(1) trial_expiretrial_converted(試用轉付費)(2) subtopic_complete/chat_message_send/hint_request 移至 Server-side MP (3) 所有事件標題加 Client/Server label (4) 移除 login method 參數 (5) paywall_impression 精簡為 course_id + source (6) add_payment_info/begin_checkout 精簡為 course_id + payment_flow (7) purchase 新增 purchase_type(new/trial_converted/renewal)取代 is_renewal (8) 移除多餘截圖標註(僅保留 client-side UI element 標註)(9) H-checkout 示意圖移除,保留 Mermaid funnel 圖
v4.52026-04-01移除所有截圖標註(改為純截圖);移除實作工程細節(檔案路徑、code snippets、實作流程、實作備註),僅保留事件規格與分析用途
v4.62026-04-01新增 3 個 P1 Navigation Page View 事件:question_bank_page_viewteacher_page_viewprofile_page_view(P1 事件 17→20)
v4.72026-04-01移除 preview_empty paywall source;修正典型用戶路徑:paywall_impression 為付費/試用共同入口,add_payment_info 在 begin_checkout 之前;新增 Trial 轉換漏斗
v4.82026-04-01新增 trial_impression(P1):免費試用邀請曝光,與 paywall_impression 平行。做題路徑(subtopic_complete)→ trial_impression → add_payment_info → trial_start。漏斗圖與配置全面區分直購/試用雙路徑