The most practical GA4 implementation guide. Covers dataLayer, custom events, and GTM. Read →
GA4 replaced Universal Analytics in 2023. Everything is an event. Auto-collected events: page_view, scroll, click, session_start. For business-critical actions (signups, purchases), you add custom events.
<!-- Option 1: gtag.js (paste in head of every page) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXXXXX');
</script>
// Option 2: Next.js (App Router — recommended)
import { GoogleAnalytics } from '@next/third-parties/google';
// In layout.tsx:
// <GoogleAnalytics gaId="G-XXXXXXXXXX" />
// Track signup
async function handleSignup(formData) {
const user = await createUser(formData);
gtag('event', 'sign_up', { method: 'email' });
}
// Track purchase
gtag('event', 'purchase', {
transaction_id: 'T-12345',
value: 29.99,
currency: 'USD',
items: [{ item_id: 'PRO', item_name: 'Pro Plan', price: 29.99, quantity: 1 }]
});
// Track button click
document.getElementById('cta-btn').addEventListener('click', () => {
gtag('event', 'cta_click', { button_id: 'hero_cta', page: window.location.pathname });
});
| Metric | Meaning |
|---|---|
| Users | Unique visitors in the period |
| Engagement Rate | % sessions with 10s+ or 2+ pages (replaces Bounce Rate) |
| Conversion Rate | % users who completed a key event |
| Avg Engagement Time | Mean time users were actively on the page |
Mark your most important events as "Conversions" in Admin → Events. They appear in the Conversions report and can be imported into Google Ads for campaign optimization.
// If you operate in EU, use Consent Mode v2
gtag('consent', 'update', {
analytics_storage: 'granted', // User accepted analytics
ad_storage: 'denied', // User denied ads
ad_user_data: 'denied',
ad_personalization: 'denied',
});