analyticslanding-pagescro

GA4 Conversion Tracking Setup for Landing Pages

Published June 22, 2026

GA4 Conversion Tracking Setup for Landing Pages

GA4 conversion tracking setup is the part most founders skip, and then they wonder why their landing page data feels useless. This guide walks through exactly what to configure: the events that matter, how to mark them as conversions (now called key events), and how to make UTM attribution actually show you which campaigns drive signups.

I'll assume you already have GA4 installed on your landing page. If you don't, drop the gtag.js snippet from Admin > Data Streams > Web into your <head> and come back.

Step 1: Decide what counts as a conversion before touching GA4

Most landing pages have one primary goal. Pick it before you open the admin panel.

For a SaaS waitlist: email submitted. For a free trial page: account created. For a paid product: checkout completed. For a lead magnet: download triggered.

You can track secondary actions too, but they shouldn't be marked as key events. If everything is a conversion, nothing is. I see founders mark scroll depth, video plays, and outbound clicks all as conversions, and then their reporting becomes meaningless. Pick one primary, two secondary at most.

Step 2: Understand the GA4 event model

GA4 doesn't use the old "goals" system from Universal Analytics. Everything is an event. Some events fire automatically, some you have to send manually, and any event can be promoted to a "key event" (what Google now calls conversions, since the rename in 2024).

Three categories you'll work with:

Automatic events: page_view, session_start, first_visit, scroll (when enhanced measurement is on). You don't have to do anything for these.

Recommended events: Google's predefined event names like sign_up, generate_lead, purchase. Use these names exactly when possible, since GA4 has built-in reports tied to them.

Custom events: Anything you make up, like hero_cta_click or pricing_toggle_yearly.

Use recommended event names whenever they fit. They light up reports that custom events don't.

Step 3: Turn on enhanced measurement

Go to Admin > Data Streams > [your stream] > Enhanced measurement. Toggle it on.

This gives you scrolls (90% depth), outbound clicks, site search, video engagement, and file downloads without writing any code. For most landing pages, this covers 30% of what you need.

What it does NOT cover: form submissions on most modern builders, button clicks that don't navigate, and any custom interaction. That's the next step.

Step 4: Track the form submission (the part that breaks)

GA4's automatic form_start and form_submit events fire based on standard HTML <form> elements. If your landing page uses Typeform, Tally, ConvertKit embeds, or a custom React form with no <form> tag, these events will not fire. This trips up almost everyone.

Three reliable ways to fire a conversion event on form submit:

Option A: gtag direct call. On the success state of your form, run:

gtag('event', 'generate_lead', {
  form_id: 'waitlist_hero',
  value: 1
});

Option B: Google Tag Manager trigger. If your form redirects to a thank-you page, create a GTM trigger on Page View where Page Path equals /thank-you, and fire a GA4 event tag with event name generate_lead.

Option C: dataLayer push. For embedded forms with callbacks (Typeform, Tally, etc.), push to window.dataLayer in the callback, then trigger from GTM.

Pick whichever matches your stack. I prefer Option A for single-page landing pages because it has the fewest moving parts.

Step 5: Mark the event as a key event

After you fire the event at least once (use DebugView, covered below), go to Admin > Events. You'll see your event in the list. Toggle "Mark as key event" on the right.

Note: it can take up to 24 hours for an event to appear in this list after first firing. If you don't see it, wait, or use DebugView to confirm it's actually arriving.

Once it's marked as a key event, it shows up in the Conversions report and you can use it as the denominator in funnel and attribution reports.

Step 6: Configure UTM attribution properly

UTMs are how GA4 knows which campaign sent a visitor. Get the five parameters right and your attribution works. Get them wrong and traffic ends up bucketed as "direct" or "referral."

The five parameters:

  • utm_source - where the click came from (twitter, newsletter, producthunt)
  • utm_medium - the channel type (social, email, referral, cpc)
  • utm_campaign - your campaign name (launch_week, summer_promo)
  • utm_content - variation within a campaign (hero_button, footer_link)
  • utm_term - paid search keyword, usually only for Google Ads

Rules I follow:

  1. Always include source, medium, and campaign at minimum.
  2. Use lowercase. Twitter and twitter become two different sources.
  3. Standardize medium values. Pick email OR newsletter, not both.
  4. Don't UTM your internal links. It overwrites the original session source.

For tag building, use Google's Campaign URL Builder. Save a spreadsheet of every tagged URL you ship so future-you knows what utm_campaign=lp3_v2 meant.

Step 7: Verify everything with DebugView

This is the step everyone skips and then spends two weeks confused about why no data is showing up.

Install the Google Analytics Debugger Chrome extension. Turn it on. Open your landing page. Then in GA4, go to Admin > DebugView.

You should see events streaming in real time: page_view, session_start, any scroll or click events from enhanced measurement, and the custom events you fire. Submit your form. The generate_lead event should appear within a few seconds.

If it doesn't appear, the event isn't firing. Open Chrome DevTools > Network > filter by collect, submit your form, and check whether a request to google-analytics.com/g/collect includes your event name. If yes, GA4 has it. If no, the gtag call isn't running.

Step 8: Build the report that actually tells you something

The default GA4 reports are not great for landing pages. Build a custom Exploration.

Go to Explore > Blank. Add these dimensions: Session source / medium, Session campaign, Landing page. Add these metrics: Sessions, Key events, Session key event rate.

Set technique to Free Form. Drop source/medium and campaign as rows, landing page as a secondary row, and metrics as values. You now have a table showing every traffic source, what campaign tagged it, which page they hit, and what percentage converted.

This is the report you actually want. Save it.

Common mistakes that break the data

Filtering out your own traffic too late. Add your IP to Admin > Data Streams > Configure tag settings > Define internal traffic before you launch. Test traffic counted as real traffic skews everything.

Setting attribution to last-click only. GA4's default is data-driven attribution. Leave it. Last-click undercredits awareness channels.

Counting page_view on the thank-you page as the conversion. Works, but you lose the ability to pass conversion value, form ID, or any context. Fire a real event instead.

Not tracking outbound clicks to your app. If your "Start Free Trial" button leaves your landing page domain, enhanced measurement catches it as click with outbound: true. Mark that as a key event if signup happens on a different domain.

Pair GA4 with behavioral data

GA4 tells you what happened. It doesn't tell you why someone bounced before submitting. For that, you need a heatmap or session recording tool running alongside GA4.

I've written comparisons of the best heatmap tools for landing page UX and Hotjar alternatives that are free or much cheaper if you want to add that layer. Diagnosing rage clicks and drop-off patterns is the natural next step once GA4 shows you which pages convert poorly.

What to do next

Configure your primary key event today. Verify it in DebugView. Tag your next three campaigns with proper UTMs. Build the Exploration report and check it weekly.

If you want PagePulse to audit your landing page and flag the conversion leaks GA4 can't see (the dead clicks, the confusing copy, the broken mobile layouts), run your URL through our analyzer. We'll show you the specific issues hurting the conversion rate you're now tracking accurately.