Subscription PortalIMPLEMENTATION READY · GA4

GTM BUILD SHEET / v1.0

Subscription Portal → Google Analytics 4

คู่มือตั้งค่า Google Tag Manager ตาม data contract ของแอป เรียงลำดับจาก Variable → Trigger → Tag เพื่อให้ทีมสร้างและตรวจสอบได้โดยไม่ต้องตีความใหม่

26Variables
25 Data Layer + 1 Constant
15Custom Event
Triggers
16GA4 Tags
1 Config + 15 Event

ลำดับการตั้งค่า

ค้นหาชื่อ event, key หรือ tag เพื่อกรองรายการด้านล่าง

PHASE 01

Variables

สร้างทุกตัวเป็น Data Layer Variable — Version 2 โดยใส่ Data Layer Variable Name ตาม key ด้านล่างแบบตรงตัว

#Data Layer keyชื่อใน GTMTypeใช้ใน event
01site_nameDLV - site_namestringทุก event · ค่าคงที่ subscription-portal
02sso_idDLV - sso_idstring | nulluser_identity
03user_idDLV - user_idstring | nullทุก event · ใช้เป็น GA4 User-ID
04–08utm_source, utm_medium, utm_campaign, utm_term, utm_contentDLV - <utm key>string | nullutm_params + ทุก event แบบ present-only
09offering_idDLV - offering_idstringimpression, dialog, success/failure, subscribe, confirm, shopee, retry
10package_idDLV - package_idstring | nullsuccess, subscribe, confirm, purchase_cancel
11–13order_id, failure_code, failure_messageDLV - <key>string | nullpurchase success / failure / retry
14–16source_page, blocked_reason, displayed_package_countDLV - <key>string / enum / numberplan impression, subscribe, dialog actions
17–20device_id, selected_device_model, displayed_device_count, displayed_device_modelsDLV - <key>string | null / numberpurchase confirm/cancel, device list impression
21–25subscription_id, device_uuid, purchase_id, service_name, displayed_plan_countDLV - <key>string | null / numbercancel subscription, receipt, plan impression
26CONST - Measurement IDConstantG-XXXXXXX ของ GA4 property

ไม่ต้องมี JavaScript helper

displayed_device_models ถูก join เป็น comma-separated string ตั้งแต่ต้นทาง ใช้ {{DLV - displayed_device_models}} ได้ทันที

Container loading

Container ID อ่านจาก process.env.GTM_ID ใน server-side layout; GTM จึงโหลดเฉพาะ environment ที่กำหนดตัวแปรนี้

PHASE 02

Triggers

ทุกตัวเป็น Custom Event: ใส่ Event name ตรงตัวและไม่ต้องใช้ regex

#ชื่อ TriggerEvent name ที่ matchความถี่ยิงเมื่อ
01CE - user_identityuser_identity1×/sessionssoId เปลี่ยนจาก login/logout
02CE - utm_paramsutm_params1×/sessionlanding URL มี utm; ไม่มี utm ไม่ยิง
03CE - plan_impressionplan_impression1×/page viewrender การ์ดแผนเสร็จ แม้ count = 0
04–05CE - purchase_success / failurepurchase_success / purchase_failureทุกครั้งnative IAP ตอบกลับสำเร็จ / ล้มเหลว
06CE - subscribe_clicksubscribe_clickทุกครั้งกด Subscribe รวมเคสถูกบล็อก
07–08CE - dialog_cancel_click / confirm_clickdialog_cancel_click / dialog_confirm_click1×/dialogปิด dialog / กด Confirm; รวม swipe และ overlay
09CE - purchase_confirm_clickpurchase_confirm_clickทุกครั้งConfirm หน้าเลือกอุปกรณ์
10–11CE - cancel_subscription_click / download_receipt_clickcancel_subscription_click / download_receipt_clickทุกครั้งยืนยันยกเลิก / ดาวน์โหลดใบเสร็จ
12–14CE - shopee_link_click / purchase_retry_click / purchase_cancelshopee_link_click / purchase_retry_click / purchase_cancelทุกครั้งลิงก์ Shopee / ลองใหม่ / ยกเลิก IAP dialog
15CE - device_list_impressiondevice_list_impression1×/page viewรายการอุปกรณ์แสดงครบ แม้ count = 0
PHASE 03

Tags

สร้าง Config ก่อนเสมอ แล้วสร้าง GA4 Event tag ที่อ้าง Trigger และ Variable ด้านบน

#ชื่อ TagTriggerGA4 eventEvent parameters
00GA4 Config - Subscription PortalInitialization - All PagesconfigMeasurement ID = {{CONST - Measurement ID}}; User ID = {{DLV - user_id}}; user property: site_name
01GA4 - User IdentityCE - user_identityuser_identitysso_id, site_name
02GA4 - UTM ParamsCE - utm_paramsutm_paramsutm_source, utm_medium, utm_campaign, utm_term, utm_content, site_name
03GA4 - Plan ImpressionCE - plan_impressionplan_impressionoffering_id, source_page, displayed_plan_count, site_name
04GA4 - Purchase SuccessCE - purchase_successpurchase_successoffering_id, package_id, order_id, site_name
05–08GA4 - Purchase Failure / Subscribe Click / Dialog Cancel / ConfirmCE - matching eventpurchase_failure, subscribe_click, dialog_*_clickตาม contract: offering_id, failure fields, package/source/blocked fields, site_name
09GA4 - Purchase Confirm ClickCE - purchase_confirm_clickpurchase_confirm_clickoffering_id, package_id, device_id, selected_device_model, displayed_device_count, displayed_device_models, site_name
10–15GA4 - Cancel / Receipt / Shopee / Retry / Purchase Cancel / Device ListCE - matching eventcancel_subscription_click, download_receipt_click, shopee_link_click, purchase_retry_click, purchase_cancel, device_list_impressionส่ง key ตาม event และ site_name ทุก tag
REFERENCE

จุดที่ต้องระวัง

User ID ไม่ใช่ event parameter

ตั้ง {{DLV - user_id}} ในช่อง User ID ของ Google tag configuration เพื่อให้ทุก event สืบทอด identity ไม่ใช่ใส่เป็น event parameter เฉย ๆ

ป้องกัน page_view ซ้ำ

แอปเป็น SPA ใน WebView: ปิด “Send a page view event when this configuration loads” ใน tag Config หากไม่ต้องการยอด page_view เกินจริง

อ่าน funnel ของ dialog ให้ถูก

dialog_cancel_click รวมปุ่ม cancel, swipe down และ overlay tap; dialog หนึ่งครั้งจึงเป็น cancel หรือ confirm เพียง event เดียว

อย่านับ conversion ซ้ำ

dialog_confirm_click จะมาคู่ shopee_link_click เสมอ หากวิเคราะห์ conversion ให้เลือกนับเพียงจุดเดียว

กรณีต้องการ Ecommerce report

เปลี่ยน tag Purchase Success ให้ยิง GA4 recommended event purchase, map order_idtransaction_id และ offering_iditem_id

UTM เป็น last-touch และ present-only

UTM ล่าสุดถูกแนบทุก event เฉพาะ key ที่มีค่า; ไม่จำเป็นต้อง map ซ้ำในทุก tag เว้นแต่ต้องใช้กับ conversion โดยตรง