UTM và chất lượng dữ liệu
Bạn sẽ học được
- Năm tham số UTM và quy ước đặt giá trị.
- Vì sao phần lớn "direct traffic" thực ra không phải direct.
- Viết truy vấn kiểm tra chất lượng tham số.
- Đối soát số liệu giữa nền tảng, analytics và kho dữ liệu.
- Quy trình quản trị để lỗi không tái diễn.
Khái niệm cốt lõi
Mọi phân tích marketing phụ thuộc vào việc gắn thẻ đúng. Năm tham số UTM:
| Tham số | Ý nghĩa | Ví dụ |
|---|---|---|
utm_source | Nguồn | facebook, google, newsletter |
utm_medium | Loại phương tiện | paid_social, cpc, email |
utm_campaign | Chiến dịch | tet_2026_launch |
utm_content | Mẫu quảng cáo | video_a, banner_1 |
utm_term | Từ khoá | mua_giay_the_thao |
Quy ước quan trọng hơn tên cụ thể:
- Chữ thường toàn bộ.
Facebookvàfacebooklà hai nguồn khác nhau với mọi công cụ. - Dùng gạch dưới giữa các từ.
paid_social, không phảipaid social. - Không dấu, không khoảng trắng.
- Tên chiến dịch có kỳ:
tet_2026, không phảicampaign1. - Một bảng quy ước được chia sẻ cho mọi người tạo chiến dịch.
Direct traffic không phải lúc nào cũng direct
Khi người dùng bấm từ ứng dụng Facebook sang trang, tham số có thể bị mất. Khi đó phiên được ghi là direct dù thực chất đến từ quảng cáo.
Hệ quả:
- Kênh trả phí bị đánh giá thấp.
- Direct bị thổi phồng.
- Last-touch gán công sai.
Nếu direct chiếm 30–40% phiên, hãy kiểm tra trước khi tin vào bất kỳ báo cáo quy công nào.
SELECT
COALESCE(NULLIF(utm_source, ''), 'direct') AS nguon,
COUNT(*) AS phien,
ROUND(100.0 * COUNT(*) / SUM(COUNT(*)) OVER (), 1) AS ty_le_pct
FROM sessions
WHERE started_at >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY 1
ORDER BY 2 DESC;Nếu direct quá cao, kiểm tra: thẻ trên các mẫu quảng cáo, chuyển hướng qua trang trung gian, ứng dụng trong webview có giữ tham số không.
Kiểm tra chất lượng tham số
1. Biến thể chữ hoa/thường:
SELECT
lower(utm_source) AS nguon_chuan,
COUNT(DISTINCT utm_source) AS so_bien_the,
array_agg(DISTINCT utm_source) AS cac_bien_the
FROM sessions
WHERE utm_source IS NOT NULL
GROUP BY 1
HAVING COUNT(DISTINCT utm_source) > 1;Kết quả dạng này là danh sách việc cần sửa: Facebook, facebook, FB nên gộp thành một.
2. Giá trị không khớp quy ước:
SELECT utm_medium, COUNT(*) AS n
FROM sessions
WHERE utm_medium IS NOT NULL
AND utm_medium NOT IN ('paid_social', 'cpc', 'email', 'organic', 'referral')
GROUP BY 1
ORDER BY 2 DESC;3. Chiến dịch thiếu tham số:
SELECT
COUNT(*) FILTER (WHERE utm_source IS NULL AND utm_medium IS NOT NULL) AS thieu_source,
COUNT(*) FILTER (WHERE utm_medium IS NULL AND utm_source IS NOT NULL) AS thieu_medium
FROM sessions
WHERE started_at >= CURRENT_DATE - INTERVAL '30 days';4. Tham số mới xuất hiện bất thường: chạy danh sách giá trị mỗi tuần và so với tuần trước. Giá trị mới không nằm trong quy ước là dấu hiệu ai đó vừa tạo chiến dịch sai.
Đối soát ba nguồn
Ba nguồn số liệu luôn lệch nhau:
| Nguồn | Ví dụ 30 ngày |
|---|---|
| Nền tảng quảng cáo | 18.000 đơn |
| Analytics | 14.500 đơn |
| Kho dữ liệu (từ sự kiện) | 14.200 đơn |
Nguyên nhân:
- Chặn theo dõi: người dùng chặn cookie/script.
- Cửa sổ quy công khác nhau: nền tảng 7 ngày click, analytics 30 ngày.
- Múi giờ: nền tảng báo theo múi giờ tài khoản, kho dữ liệu theo UTC.
- Đơn trùng hoặc huỷ: nền tảng đếm đơn tạo, kho đếm đơn hoàn tất.
- Mất tham số: như phần trên.
Quy tắc đối soát:
- Chọn một nguồn chuẩn — thường là kho dữ liệu.
- Đối soát theo ngày và theo kênh, không chỉ tổng tháng.
- Ghi nhận chênh lệch thường xuyên (ví dụ analytics luôn thấp hơn 15–20%).
- Điều tra khi chênh lệch vượt ngưỡng bình thường, không điều tra mọi chênh lệch.
SELECT
ngay,
SUM(don_nen_tang) AS don_nen_tang,
SUM(don_kho) AS don_kho,
ROUND(100.0 * (SUM(don_nen_tang) - SUM(don_kho))
/ NULLIF(SUM(don_kho), 0), 1) AS chenh_lech_pct
FROM reconciliation_daily
WHERE ngay >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY 1
ORDER BY 1;Quản trị dữ liệu
Ba việc giữ cho dữ liệu sạch lâu dài:
- Tài liệu quy ước: một trang liệt kê giá trị hợp lệ cho từng tham số, kèm ví dụ. Ai tạo chiến dịch cũng phải đọc.
- Người chịu trách nhiệm: một người hoặc một nhóm duyệt tên chiến dịch mới.
- Kiểm tra định kỳ: chạy báo cáo chất lượng hằng tuần, xử lý giá trị lạ trước khi chúng tích tụ.
Chi phí sửa dữ liệu cũ tăng theo thời gian. Sửa một chiến dịch sai ngay tuần đầu mất vài phút; sau sáu tháng phải viết mapping và giải thích lại mọi báo cáo.
Lỗi thường gặp
- Đổi quy ước giữa chừng: lịch sử bị tách đôi, không so sánh được.
- Dùng UTM cho liên kết nội bộ: phiên bị cắt, số liệu nhiễu.
- Không gắn thẻ email: email rơi vào direct.
- Đặt tên có ngày cụ thể trong
utm_campaignnhưng không có quy ước: mỗi chiến dịch là một giá trị mới. - Tin tuyệt đối vào số nền tảng: chi phí đúng, chuyển đổi thường phồng.
- Không ghi múi giờ: hai báo cáo lệch một ngày.
Thực hành
- Viết truy vấn tìm các biến thể chữ hoa/thường của
utm_source. - Kiểm tra tỷ lệ direct trong 30 ngày.
- Đối soát số đơn giữa nền tảng và kho dữ liệu theo ngày.
- Viết quy ước UTM cho một chiến dịch Tết.
- Liệt kê ba nguyên nhân chênh lệch và cách kiểm tra từng nguyên nhân.
Lỗi thường gặp
| Triệu chứng | Nguyên nhân | Cách sửa |
|---|---|---|
| Direct chiếm 35% | Mất tham số từ ứng dụng | Kiểm tra webview, chuyển hướng |
| Cùng kênh có 4 tên | Không có quy ước | Chuẩn hoá và mapping lịch sử |
| Số đơn nền tảng cao hơn kho | Cửa sổ quy công, chặn theo dõi | Ghi nhận và đối soát theo ngày |
| Chiến dịch mới không xuất hiện | Thiếu utm_campaign | Kiểm tra mẫu quảng cáo |
| Báo cáo lệch một ngày | Múi giờ | Chốt múi giờ báo cáo |
| Không ai biết giá trị hợp lệ | Thiếu tài liệu | Viết và chia sẻ quy ước |
Tóm tắt
- UTM cần quy ước: chữ thường, gạch dưới, có kỳ, có tài liệu.
- Direct cao bất thường thường là tham số bị mất.
- Kiểm tra biến thể, giá trị lạ, tham số thiếu và giá trị mới mỗi tuần.
- Chọn một nguồn chuẩn và đối soát theo ngày.
- Quản trị tốt rẻ hơn sửa dữ liệu lịch sử rất nhiều.
Use ← → to move between lessons