Mengenal DataLayer dan Custom Event
Lacak progres belajar kamu
Masuk dan daftar kursus ini untuk melacak kemajuan belajar kamu.
Sampai modul sebelumnya, semua tracking yang kamu buat mengandalkan interaksi yang bisa dideteksi GTM secara otomatis: pageview, klik, scroll, dan form submission. Tapi ada banyak situasi di mana GTM tidak bisa “melihat” apa yang terjadi, misalnya setelah transaksi berhasil diproses oleh sistem backend. Di sinilah dataLayer berperan.
Apa Itu DataLayer?
DataLayer adalah objek JavaScript yang berfungsi sebagai ‘jembatan’ komunikasi antara website kamu dan GTM. Sederhananya, website menaruh informasi ke dalam dataLayer, lalu GTM mengambil dan membacanya.
window.dataLayer = window.dataLayer || [];
Kamu bisa “mengirim pesan” ke dataLayer dengan cara:
dataLayer.push({
'event': 'nama_event',
'key1': 'value1',
'key2': 'value2'
});
Setiap kali dataLayer.push() dipanggil dengan properti event, GTM langsung tahu ada sesuatu yang terjadi dan akan mengevaluasi trigger yang sesuai.
Praktek: Tracking Pembelian (Purchase Event)
Skenario: kamu punya toko online yang memproses pembayaran. Setelah pembayaran berhasil, halaman “Terima Kasih” ditampilkan. Kamu ingin mengirim data transaksi ke GA4.
Gambar 7.1: Contoh halaman pembelian berhasil yang perlu di-track dengan dataLayer
Langkah 1: Tambahkan dataLayer.push() di halaman “Terima Kasih”
Minta developer untuk menambahkan kode ini di halaman sukses pembayaran. Idealnya, kode ini ditaruh sebelum snippet GTM container di <head>, supaya data sudah tersedia saat GTM dimuat. Tapi kalau ditaruh setelahnya pun tetap bisa berfungsi. GTM akan memprosesnya sebagai event terpisah, bukan sebagai data yang sudah ada sejak awal.
<script>
dataLayer.push({
'event': 'purchase',
'transaction_id': 'TRX-20260313-001',
'value': 350000,
'currency': 'IDR',
'items': [
{
'item_name': 'Kelas Online SEO Dasar',
'price': 350000,
'quantity': 1
}
]
});
</script>
Gambar 7.2: Halaman terima kasih dengan kode dataLayer.push() yang mengirim data transaksi
Dalam implementasi nyata, nilai-nilai seperti transaction_id, value, dan items diisi secara dinamis oleh backend. Cara implementasinya berbeda tergantung platform.
WordPress (WooCommerce)
Kalau kamu pakai plugin GTM4WP, dataLayer purchase sudah otomatis terisi di halaman Order Received. Kamu tidak perlu menulis kode manual. Cukup aktifkan opsi Enhanced Ecommerce di pengaturan GTM4WP.
Kalau mau manual tanpa plugin, tambahkan kode di functions.php tema kamu:
add_action('woocommerce_thankyou', function($order_id) {
$order = wc_get_order($order_id);
if (!$order) return;
?>
<script>
dataLayer.push({
'event': 'purchase',
'transaction_id': '<?php echo esc_js($order->get_order_number()); ?>',
'value': <?php echo $order->get_total(); ?>,
'currency': '<?php echo esc_js($order->get_currency()); ?>'
});
</script>
<?php
});
Custom HTML
Paling straightforward. Taruh script dataLayer.push() langsung di halaman terima kasih. Data transaksi biasanya di-render oleh backend (PHP, Python, dll):
<!-- thank-you.html -->
<script>
dataLayer.push({
'event': 'purchase',
'transaction_id': 'TRX-001', // diisi dinamis oleh backend
'value': 350000,
'currency': 'IDR'
});
</script>
Pakai AI Coding Tools untuk Implementasi DataLayer
Implementasi dataLayer di custom website kadang tricky karena kamu harus tahu file mana yang menangani halaman tertentu. Kalau kamu pakai Claude Code atau Gemini CLI (seperti yang dibahas di modul 2), cukup berikan prompt seperti ini:
Tambahkan dataLayer.push() untuk event purchase di halaman terima kasih.
Data yang perlu dikirim: transaction_id, value, currency, dan items.
Ambil data dari [sumber data kamu, misal: API order, URL parameter, dll].
Atau untuk tracking event lain:
Saya sudah setup GTM. Tambahkan dataLayer.push() dengan event 'form_submit'
setelah form kontak di halaman /kontak berhasil dikirim via AJAX.
Kirim juga form_id dan page_location sebagai parameter.
Tools ini bisa membaca kode kamu dan menaruh dataLayer.push() di tempat yang tepat, sesuai dengan framework yang kamu pakai.
Gambar 7.3: Contoh prompt ke AI coding tools untuk menambahkan dataLayer.push() secara otomatis
Langkah 2: Buat Trigger Custom Event di GTM
- Triggers > New
- Nama:
Trigger - Purchase - Tipe: Custom Event
- Event Name:
purchase(harus sama persis dengan nama event didataLayer.push()) - Simpan
Gambar 7.4: Konfigurasi trigger Custom Event dengan event name “purchase”
Langkah 3: Buat Data Layer Variables
Untuk mengambil data dari dataLayer, kamu perlu membuat variable:
- Variables > New (User-Defined)
- Nama:
DLV - Transaction ID - Tipe: Data Layer Variable
- Data Layer Variable Name:
transaction_id - Simpan
Gambar 7.5: Membuat Data Layer Variable untuk mengambil nilai transaction_id
Ulangi untuk variable lain yang dibutuhkan (value, currency).
Gambar 7.6: Data Layer Variables tambahan untuk value dan currency
Langkah 4: Buat Tag GA4 Event
- Tags > New
- Nama:
GA4 Event - Purchase - Tag Configuration: Google Analytics: GA4 Event
- Event Name:
purchase - Event Parameters:
transaction_id/ Value:{{DLV - Transaction ID}}value/ Value:{{DLV - Value}}currency/ Value:{{DLV - Currency}}
- Triggering: pilih
Trigger - Purchase - Simpan
Gambar 7.7: Konfigurasi tag GA4 Event — event name “purchase” dengan parameter dari Data Layer Variables
Setelah semua siap, test lewat Preview Mode. Lakukan transaksi test, lalu cek di Tag Assistant apakah event purchase muncul dan tag fired.
Gambar 7.8: Preview Mode menunjukkan event purchase berhasil fired
Konfirmasi juga di GA4 Realtime bahwa event purchase sudah masuk beserta parameternya.
Gambar 7.9: GA4 Realtime — event purchase tercatat dengan data transaksi yang lengkap
Praktek: Tracking Initiate Checkout
Selain purchase, event penting lainnya dalam e-commerce adalah begin_checkout (atau sering disebut Initiate Checkout). Event ini dikirim saat pengunjung mulai proses checkout, misalnya klik tombol “Checkout” dari halaman keranjang.
Kenapa ini penting? Karena dengan tracking begin_checkout dan purchase sekaligus, kamu bisa menghitung checkout completion rate: berapa persen orang yang mulai checkout tapi benar-benar menyelesaikan pembayaran. Kalau angkanya rendah, berarti ada friction di proses checkout yang perlu diperbaiki.
Langkah 1: Tambahkan dataLayer.push() saat checkout dimulai
dataLayer.push({
'event': 'begin_checkout',
'value': 350000,
'currency': 'IDR',
'items': [
{
'item_name': 'Kelas Online SEO Dasar',
'price': 350000,
'quantity': 1
}
]
});
Kode ini dipanggil saat user klik tombol checkout atau saat halaman checkout pertama kali dimuat, tergantung flow website kamu.
Langkah 2: Buat Trigger dan Tag di GTM
Prosesnya sama seperti purchase. Buat trigger Custom Event dengan event name begin_checkout, lalu buat tag GA4 Event yang mengirim event tersebut beserta parameternya.
Gambar 7.10: Konfigurasi tag GA4 Event untuk begin_checkout
Test di Preview Mode untuk memastikan event fired saat proses checkout dimulai.
Gambar 7.11: Preview Mode menunjukkan event begin_checkout berhasil fired
Dengan tracking checkout dan purchase aktif, kamu sekarang punya gambaran lengkap funnel checkout. Di GA4, kamu bisa bikin funnel exploration untuk melihat di mana drop-off terjadi.
Kamu mungkin perhatikan di screenshot saya menamai event-nya initiate_checkout, bukan begin_checkout yang merupakan recommended event name dari Google. Ini sebenarnya tidak masalah. Selama tujuannya sama, yaitu untuk menandai bahwa user mulai proses checkout, dan kamu konsisten memakainya di seluruh project, GA4 tetap akan merekam datanya. Bedanya, begin_checkout dikenali GA4 sebagai event standar sehingga otomatis muncul di laporan e-commerce bawaan. Kalau pakai nama custom seperti initiate_checkout, kamu perlu setup laporan manual. Pilih mana yang lebih cocok dengan kebutuhan dan konvensi tim kamu.
Custom Event untuk Kasus Lain
DataLayer dan custom event tidak hanya untuk pembelian. Beberapa contoh penggunaan yang umum:
Login berhasil:
dataLayer.push({
'event': 'user_login',
'method': 'google'
});
Add to cart:
dataLayer.push({
'event': 'add_to_cart',
'item_name': 'Jaket Outdoor Premium',
'item_price': 750000,
'item_category': 'Outerwear'
});
Video selesai ditonton:
dataLayer.push({
'event': 'video_complete',
'video_title': 'Tutorial GTM Dasar',
'video_duration': 480
});
Strategi Penamaan Event
Ini hal kecil yang dampaknya besar. Punya konvensi penamaan dari awal akan menyelamatkan kamu di kemudian hari saat melihat data di GA4.
Ada dua pendekatan, dan kamu perlu pilih salah satu lalu konsisten:
Pendekatan 1: Pakai recommended event names dari Google (disarankan)
Google punya daftar nama event standar seperti purchase, add_to_cart, sign_up, login. Kalau event yang kamu track termasuk di daftar ini, pakai nama standar Google. Keuntungannya: GA4 otomatis mengenali event ini dan menyediakan laporan bawaan yang lebih kaya.
Pendekatan 2: Nama custom untuk event yang tidak ada di daftar Google
Untuk event yang spesifik ke bisnis kamu dan tidak ada di daftar standar, buat nama sendiri. Formatnya: huruf kecil semua, underscore sebagai pemisah, pola aksi_objek. Contoh: klik_whatsapp, klik_marketplace, lihat_video_produk.
Jadi di modul-modul sebelumnya, saya sengaja pakai nama Bahasa Indonesia (klik_whatsapp, klik_daftar) karena event tersebut memang tidak ada padanannya di daftar standar Google. Tapi untuk event seperti pembelian, saya pakai purchase karena itu recommended event name dari Google.
Yang harus dihindari:
- Nama yang terlalu generik seperti
clickatauevent1 - Campuran format dalam satu project (camelCase dan snake_case sekaligus)
- Nama dengan spasi atau karakter khusus
Debugging DataLayer
Gambar 7.12: Contoh event yang tidak fired — dataLayer.push() kemungkinan tidak terpanggil
Cara cek apakah dataLayer sudah berjalan benar:
- Buka Preview Mode di GTM
- Lakukan aksi yang memicu
dataLayer.push()(misalnya selesaikan pembelian test) - Di panel Tag Assistant, cari event dengan nama yang sesuai (misalnya
purchase) - Klik event tersebut, lalu buka tab Data Layer untuk melihat isi datanya
- Pastikan semua key-value pair muncul sesuai yang diharapkan
Gambar 7.13: Event purchase muncul di Tag Assistant dengan data layer yang lengkap
Kalau event tidak muncul di Tag Assistant, kemungkinan besar dataLayer.push() tidak terpanggil. Buka Console di browser (F12 > Console), ketik dataLayer, dan periksa isinya secara manual. Kalau array-nya kosong atau tidak mengandung event yang kamu harapkan, masalahnya ada di kode website, bukan di konfigurasi GTM.
Di modul terakhir, kamu akan belajar debugging secara lebih menyeluruh dan best practice untuk mengelola GTM jangka panjang.