Universal Analytics stopped processing data in July 2023. If you haven't completed your GA4 migration, you're running your business on a measurement gap. If you migrated hastily — copied your UA event structure across, set up goals without thinking about conversion quality, and never connected GA4 to BigQuery — you may have GA4 in place but not a GA4 setup that's actually useful for decision-making. This guide covers both scenarios: a proper migration from scratch and an audit of existing GA4 implementations that aren't performing as they should.
UA vs GA4: The Fundamental Model Difference
Universal Analytics was built around sessions and pageviews. Every interaction was slotted into a session, and reports were structured around session-based dimensions: bounce rate (sessions with one interaction), sessions per user, pageviews per session. Goals in UA were event- or destination-based, and each hit type (pageview, event, social, transaction) was a separate entity.
GA4 is built around events and parameters. Every interaction — page view, scroll, click, purchase, custom event — is an event with associated parameters. There are no separate hit types; everything is an event. Sessions still exist as a derived concept, but they're not the primary unit of analysis. Users are the primary unit, and their behaviour is described through event sequences rather than session metrics.
This shift has practical implications. Bounce rate in UA (single-page sessions) is replaced in GA4 by Engagement Rate (sessions with at least 10 seconds of engagement, a page view, or a conversion). Average session duration is replaced by Average Engagement Time. These are generally more meaningful metrics — a user who reads a long article and leaves without clicking anything was counted as a 100% bounce in UA but as an engaged session in GA4. But the transition requires recalibrating what "good performance" looks like in the new metrics framework.
Step 1: Build a Measurement Plan Before Implementing Anything
The most expensive mistake in any GA4 implementation is tracking everything without a measurement plan and ending up with a data lake full of events that nobody knows how to interpret. I've audited GA4 accounts with 200+ custom events where the marketing team could only meaningfully use 8 of them — and the 8 they needed were either missing or inconsistently configured.
A measurement plan is a simple document that maps your business questions to the data you need to answer them. Start with three to five primary business objectives — for example, "increase qualified demo requests from paid search" or "improve free-to-paid trial conversion rate." For each objective, define the key events and parameters that measure progress toward that objective. For "increase qualified demo requests," you need a generate_lead event with source, medium, campaign, and lead_type parameters. That's it — not 15 different events for every micro-interaction on the page.
This scoping discipline is what separates GA4 setups that produce useful insight from those that produce overwhelming noise.
Step 2: Design the Data Layer With Your Development Team
GA4's power comes from custom parameters attached to events. Without a data layer, you're limited to GA4's auto-collected events (page_view, click, scroll, file_download, video_engagement) and whatever you can scrape from the DOM in GTM. With a properly designed data layer, you can attach meaningful business context to every event: page_type, user_type, product_category, lead_score, subscription_tier, form_id.
Work with your development team to define the data layer specification before any GTM implementation begins. The specification should list every event, every parameter, the data type and expected values for each parameter, and the trigger condition (what user action causes this event to be pushed to the data layer). This upfront documentation prevents the common pattern where developers push events with inconsistent parameter names across different parts of the codebase.
For a B2B SaaS company, a minimal but well-designed data layer covers: page_view with page_type and user_login_status parameters, form_start and form_submit with form_id and form_name parameters, generate_lead with lead_source and lead_type parameters, and cta_click with cta_text and cta_destination parameters. That's enough data to answer most strategic marketing questions without creating complexity that becomes unmanageable.
Step 3: GTM Implementation and Configuration
Implement GA4 through GTM rather than directly in page code — this gives you the flexibility to add, modify, or remove tags without code deployments, and it centralises your measurement implementation in a way that's auditable and maintainable.
The GTM setup for GA4 requires: one GA4 Configuration tag that fires on All Pages (this initialises the GA4 tracker and sends page_view events), and individual GA4 Event tags for each custom event in your measurement plan. Each Event tag is triggered by a Custom Event trigger that listens for the corresponding data layer event name.
Configure Enhanced Measurement in the GA4 Data Stream settings — this enables automatic tracking of scrolls (90% scroll depth), outbound clicks, site search (if you have an internal search function), video engagement (for YouTube embeds), and file downloads. These are genuinely useful events that don't require custom implementation. However, review each Enhanced Measurement toggle and disable any that are causing problems — the outbound click event sometimes fires on form submission links and can create confusing data.
For cross-domain tracking (if your website spans multiple domains — for example, your marketing site on domain.com and your app on app.domain.com), configure cross-domain measurement in the GA4 Data Stream settings. Without this, GA4 treats a user crossing from one domain to another as a new session with direct traffic source, destroying attribution accuracy for any user who converts on a subdomain.
Step 4: Conversion Configuration
This is where GA4 migrations most frequently go wrong. The UA goal structure (up to 20 goals, configured in the admin interface) has been replaced by GA4's conversion events, which are simply events that you've marked as conversions. Any event in GA4 can be marked as a conversion with a toggle — and this ease of setup leads to the mistake of marking too many events as conversions.
The rule I follow: only mark 3-5 events as conversions, and those events should represent genuine business outcomes, not engagement signals. Generate_lead is a conversion event. Cta_click is not. Form_submit might be, if it's the last step before a lead enters your CRM. Scroll_depth is not. Session_start is emphatically not.
Why does this matter? Because your conversion events feed Smart Bidding in Google Ads and Smart Campaigns in Meta. If you import GA4 conversions that include page_view or scroll events, you're telling the bidding algorithms to optimise for pageviews — which they will do very efficiently, while completely failing to drive actual business results.
For e-commerce: implement the standard GA4 purchase event with transaction_id, value, currency, and items parameters. The transaction_id must be unique per transaction and consistent — it's how GA4 deduplicates conversions if the same transaction is tracked from both the data layer and a server-side import.
Step 5: BigQuery Export and Looker Studio
The BigQuery integration is one of GA4's most significant advantages over UA, and it's free for standard GA4 properties (you pay only for BigQuery storage and query costs, which are minimal for most businesses). Enable it from Admin > BigQuery Links as soon as your GA4 property is set up.
With BigQuery, you have access to raw, unsampled, hit-level data for every event in your GA4 property. This unlocks analyses that aren't possible in the GA4 interface: custom funnel analysis that doesn't follow GA4's predefined paths, cohort analysis based on custom user properties, revenue attribution modelling using your own logic, and join operations that combine GA4 event data with CRM or offline data.
For reporting, connect GA4 to Looker Studio (formerly Google Data Studio) to build dashboards tailored to your specific metrics and business questions. The GA4 connector for Looker Studio allows direct access to GA4 report data. For more complex analysis that uses BigQuery data, use the BigQuery connector and write queries that produce the specific aggregations you need.
Consent Mode: A Requirement, Not an Option
Google's Consent Mode (v2, which became required for EEA/UK advertisers in March 2024) allows GA4 and Google Ads to use modelling to fill gaps in data when users decline cookies. Without Consent Mode, you lose conversion data for all users who don't consent to tracking — which, depending on your audience and cookie banner configuration, can be a significant proportion of your traffic.
Implement Consent Mode through GTM using a Consent Initialisation trigger and the appropriate consent commands (gtag('consent', 'default', {...})). Integrate with your cookie consent platform (CookieYes, Cookiebot, OneTrust) to update consent state based on user choices. Verify the implementation using GTM's Preview mode and GA4's DebugView — you should see consent_update events when users interact with your cookie banner.
In the Indian market, while there's no equivalent to GDPR yet, implementing Consent Mode is still good practice — it prepares you for upcoming privacy regulations and demonstrates data ethics to users who are increasingly privacy-aware.
Preserving UA Data and the Parallel Tracking Period
UA data stopped processing in July 2023, but previously collected data remained accessible in the UA interface until July 2024. If you haven't exported your historical UA data, it's now gone from the interface — but your GA4 property should have data from whenever you set it up.
For historical comparison purposes, export key UA reports (channel performance by month, goal completions by source/medium, landing page performance) to Google Sheets or BigQuery before the access window closed. If you still have access to a UA 360 property (which had an extended deadline), prioritise exporting conversion and channel data that will inform how you interpret GA4 trends.
Common Migration Mistakes
- Copying UA event names directly to GA4. UA had categories, actions, and labels. GA4 has event names and parameters. Mapping "Category: Form, Action: Submit" to an event named "Form" with action "Submit" is not correct GA4 structure. The event name should be the action: form_submit.
- Not filtering internal traffic. Traffic from your office IP addresses and your development team inflates engagement metrics and corrupts conversion data. Define internal traffic filters in GA4 Admin > Data Streams > Configure Tag Settings > Define Internal Traffic, and then create a filter that excludes this traffic in Admin > Data Filters.
- Failing to configure the reporting time zone and currency. GA4 defaults to US time zone and USD. Set your property to the correct time zone (Asia/Kolkata for Indian businesses) and currency (INR) immediately — changing these later affects how historical data is bucketed by day and how conversion values are reported.
- Ignoring the session timeout setting. GA4 defaults to 30-minute session timeout and 2-day engagement session timeout. For business types with longer browsing sessions — B2B SaaS, education, financial services — consider extending the session timeout in Data Stream settings to reduce session fragmentation that artificially inflates session counts.
- Not linking GA4 to Google Ads. The GA4-Google Ads link enables audience sharing, conversion imports from GA4, and the ability to see GA4 sessions and engagement data within the Google Ads interface. Link the two properties in GA4 Admin > Google Ads Links as part of the initial setup.
Next Steps
A complete GA4 implementation isn't a one-time project — it's an ongoing measurement infrastructure that requires regular maintenance. Set a quarterly review cadence to check for new events firing unexpectedly (which can happen after site updates), validate that conversion counts are consistent with CRM data, review and update your measurement plan as business objectives evolve, and check that all GTM tags are functioning correctly after any site changes.
For a deeper dive into the data layer design that underlies a clean GA4 implementation, read the companion guide on GTM Data Layer Best Practices. And for understanding how to use GA4 data for budget allocation decisions, the Marketing Attribution Models guide covers how to choose the right model for your funnel maturity.