The Problem
GA4 is event based, so you can track almost anything, and that is exactly why so many implementations fall apart. Nobody decides up front what should be measured, so every campaign or feature adds a few events in its own style. A year later the property looks like this:
- Duplicate events inflate the counts.
- The same action has three names, such as
form_submit,formSubmit, andcontact_form. - Parameters are collected and never used in a report.
- Key events disagree with what Google Ads or the CRM reports.
The reports still load, so nobody notices. The problem surfaces later, when someone asks a hard question and the data cannot answer it.
How GA4 Models Data
Four building blocks make the rest of the setup easier to reason about.
Events
Everything in GA4 is an event: a page view, a scroll, a form submission, a purchase. Some are collected automatically, some come from enhanced measurement, and the rest are custom events you define.
Parameters
Each event carries parameters that describe it, such as the form name, the value of a purchase, or the plan a user picked. A parameter only appears in standard reports after you register it as a custom dimension or metric.
User properties
These describe the user rather than one action, for example customer type or membership level, and they are useful for segmenting audiences across sessions.
Key events
These are the events you mark as important to the business. GA4 used to call them conversions. They drive reporting and can be imported into Google Ads.
Most of a good setup comes down to deciding these four things on purpose: which events exist, which parameters each one carries, which user properties matter, and which events count as key events.
What a Good Setup Includes
I build around the journey the business cares about, from first visit to conversion, instead of the default template. In practice that means:
- An event taxonomy where every event and parameter is named and scoped deliberately, so reports stay readable as the site or product grows. Where Google has a recommended event name, such as
generate_leadorpurchase, I use it. - Cross-domain and cross-device tracking, so a user who starts on a landing page and converts in an app, checkout, or booking system is counted once.
- Enhanced measurement that is tuned after it is switched on. Scroll, engagement, video, and file-download tracking should reflect real intent instead of firing on everything.
- Custom key events and audiences for the actions that bring in revenue, such as qualified leads, completed onboarding, and repeat purchases.
- Funnel and exploration reports on top of the data, so you can see where users drop off and where something is working better than expected.
- Property settings that match the business: data retention, internal traffic filters, and unwanted referrals, configured on day one.
An Example Tracking Plan
The tracking plan turns the taxonomy into a document that developers and marketers can both check. For an illustrative lead generation site, part of it might look like this:
| Event | When it fires | Key parameters |
|---|---|---|
view_item |
A visitor opens a service or product page | item_id, item_category |
form_start |
A visitor interacts with a form for the first time | form_id |
generate_lead |
A form is submitted and the server accepts it | form_id, lead_type, value |
purchase |
An order is confirmed | transaction_id, value, currency |
generate_lead fires when the server accepts the form, so failed submissions never count as leads. Small definitions like that are what make the numbers line up with the CRM later.
Where It Fits
GA4 sits at the end of the measurement chain and can only report what the layers before it let through.
- A visitor lands on the site
- Consent defaults load, then update on their choice
- The site pushes events into the data layer
- Google Tag Manager fires the tags consent allows
- GA4 records the journey, Google Ads receives the conversions
Events reach GA4 through Google Tag Manager, and Consent Mode V2 decides whether they may be stored at all. The same events often become the conversions that Google Ads Conversion Tracking bids on, so a naming mistake in GA4 can turn into a bidding mistake in Ads.
Common Mistakes
- Two installations at once: a GA4 tag hardcoded on the site and another in Tag Manager, so every page view is counted twice.
- Personal data in parameters: email addresses or phone numbers sent in event parameters or page URLs. This breaks Google’s policies and is hard to clean up afterward.
- Payment gateways as referrers: a user goes to the payment page and comes back, and the purchase is credited to the gateway instead of the campaign that brought them.
- Internal traffic counted as customers: the team’s own visits inflate engagement and trigger test key events.
- Short data retention: exploration reports keep two months of data by default, so year-over-year analysis is impossible unless someone changed it.
- Unregistered parameters: the data is sent but never registered as a custom dimension, so it never shows up in reports.
Why It Matters
Bad tracking leads to bad decisions long before anyone looks at a report. Budget goes to the wrong channel, a “high-performing” campaign turns out to be a tracking artifact, and the part of the funnel that drives growth stays invisible because GA4 was never set up to see it.
When GA4 is set up properly, the team argues with the data instead of about it.
How I Approach It
1. Audit
I review the current setup to find what is firing, what is duplicated, what is missing, and where the data disagrees with reality.
2. Map the customer journey
From first touch to conversion, and after conversion where it matters, for this particular business model.
3. Architect the tracking plan
I define the events, parameters, and key events, then build them in Google Tag Manager as a documented structure the team can maintain after I leave.
4. Validate
Every event is checked against real user behavior in DebugView and Preview mode before it ships.
5. Hand off
With documentation and reports that marketing, product, and finance can all read the same way.
Before You Trust the Numbers
The checklist I run before I call a GA4 setup done:
- Each page view is recorded once.
- Every key event fires once per real action and matches a count from another system.
- Consent states change what is collected, as expected.
- Internal traffic is filtered, and payment domains are excluded as referrers.
- Data retention is set to the longest option available.
- The custom parameters that matter are registered and visible in reports.
If your data cannot answer a hard question yet, it is not ready to run a business on. If you want a second look at your setup, get in touch.