Google Universal Analytics has been the most popular website tracking platform for nearly a decade. With Google sunsetting Universal Analytics, GA4 is one of the best options available.
Despite calling it a Google Analytics 4 Migration, we aren’t simply copying over the current tracking. We want to understand what’s currently tracking, see what items can be added/removed/updated, and then align our tracking plan with the new data structure of Google Analytics 4.
The process below walks you through my recommended approach for setting up a GA4 property based on an existing GA3 one. It’s not a perfect solution, but it has helped me set up consistent and reliable GA4 accounts for dozens of websites.
Phase 1: Audit Your Universal Analytics
While a more in-depth Google Analytics Audit is recommended, I’d recommend reviewing the following items at a minimum. This ensures you carry over the necessary tracking to set up your Google Analytics 4 correctly.
High-Level Questions
How/where is the Google Analytics code installed? (Hardcoded, Google Tag Manager, 3rd Party, etc.)
Are the Analytics.js or gtag codes customized?
Is the website Ecommerce? What platform?
What domains need to be tracked, and is cross-domain tracking needed?
Property Settings
Review how the property has been set up, and see what should be carried over to the new property in GA4. Not all Universal Analytics settings are available in the new Google Analytics 4 property, but the items to pay attention to are listed below.
What accounts are linked? (Search Console, Google Ads, Big Query, etc.)
What custom dimensions and custom metrics are in use?
Should any custom audiences be carried over?
What sites are on the Referral Exclusion List?
View Settings
Is site search in use? What is the query parameter and/or search categories?
What time zone and currency is being used?
Are there any filters in place?
Have your channels been customized at all?
Audit Your Universal Analytics (optional):
With the end of universal analytics, the main benefit to reviewing your historical data is to help identify any issues within the account, hopefully preventing those from being carried over during your Google Analytics 4 Migration. Below is not an exhaustive list, but it should catch any of the major issues.
Review your current UTM strategy – specifically the naming convention and how that data appears in Univeral Analytics.
Review your page reports – are there duplicate pageviews, parameters causing issues, or different domains being tracked?
Review your data for PII – the most common places I see PII are in the page reports and the event reports. Make sure you aren’t passing any data into Google Analytics that shouldn’t be there.
Review your direct traffic – are your events/goals skewing to this data source, where is this traffic entering the site, and is any clear bot traffic falling into this channel?
Phase 2: Map Out Your Current Tracking
Goals
The goals you’re using in Universal Analytics will most likely align with the events you’ll tag as conversions in GA4. Mapping your current goal structure helps you see the key metrics you’re reporting on. A lot of times, Google Analytics isn’t a perfect representation of what’s important to a company, so be sure to interview stakeholders for the metrics they look at most.
Event Tracking
Assuming you have event tracking in your universal analytics property, we want to use that to inform the new Google Analytics 4 setup. You don’t need to carry over parallel tracking for every event, but you should understand what is being tracked. You should also review the site for additional tracking opportunities.
Keep in mind that GA4 automatically tracks some events. When the code is added to the site, GA4 will automatically start tracking and collecting data for page views, youtube videos, scroll tracking, file downloads, outbound link clicks, and site searches. These events can be turned off in the data stream settings if you don’t want to collect this data, or would prefer to track things through Google Tag Manager.
Channels
Custom Channel Groups are a great way to view your traffic at a high level. They consolidate different traffic sources into a single channel so that you can compare those buckets of traffic to each other. I prefer the source/medium level for most of my reporting, but it’s still worth implementing the custom channels.
Audiences
Audiences are a powerful feature within Google Analytics that allow for deeper levels of analysis, and more advanced targeting options through remarketing. We want to identify what audiences are currently in place, see how they are being used, and decide which ones are worth including in your Google Analytics 4 Migration.
Custom Dimensions/Metrics
Custom dimensions and metrics within Google Analytics reporting make the data more business relevant and useful. You can pass in valuable qualitative fields as custom dimensions and create custom metrics for those quantitative values in your reports. GA4 takes custom fields to a new level with the flexibility of parameters, so any existing custom parameters should be considered in the new setup.
Filters
As of writing this, you can only create IP filters to remove internal traffic from being tracked. Depending on the other filters, you may be able to achieve a similar result using the Modify Event function inside GA4. It’s not a perfect replacement for GA3 filters, but you can edit parameters on incoming events right inside the GA4 interface.
Phase 3: Create Your GA4 Account
Create the GA4 Property
Google Analytics 4 Properties are similar to properties in GA3, where most of the time a property is created for each website. Some settings can be adjusted at the property level, as well as settings within each of the data streams in the property.
Create the GA4 Data Stream
Data streams in GA4 are the equivalent of a GA3 Property tracking code. A unique tracking ID is associated with each stream, similar to the UA ID in Universal Analytics. The data stream is created right after the property has been set up, and you can have multiple data streams in a single property.
GA4 Data Stream Settings
The data stream settings are similar to the setting in Universal Analytics, but they include settings from the GA3 properties and views. The main settings to update:
What domains should be tracked?
This helps with cross-domain tracking and tells Google Analytics which domains are related.
What IPs should be filtered out?
Removing internal traffic from the reports provides more accurate data overall.
Should the Session Timeout and Engaged Session Timer be adjusted?
I normally keep the default 30-minute Session Timeout and will adjust the Engaged Session Timer from 10 to 30 seconds for most clients. These adjustments can be different and depend on the website.
What Unwanted Referrals need to be added?
Similar to the Referral Exclusion List in Universal Analytics. Adding a domain to this section doesn’t remove it from appearing as a traffic source in your reports; rather, it prevents a new session from starting if an existing one is already in place. This is necessary if visitors move between domains during their visit.
Set User/Access Levels
Who should have access to the account, and what level of access do they need? I’ll usually bring this up to the client and let their team handle cleaning up the user list, as they know best who should have access to their Google Analytics account.
Update the Date Settings
Nothing is worse than having the wrong time zone in your Google Analytics account. Having things off by an hour or two can prevent Google Analytics data from lining up with other platforms, making reporting a nightmare. Generally, you want to set the time zone to where the client/website is.
Accept the Data Collection Settings
This section of the property settings is for turning on Google Signals and adjusting the data retention settings from two to fourteen months. Accepting this has potential legal ramifications, so I normally let the client approve these items and advise them to speak to their legal team if they deem it necessary.
Review the rest of the Property Settings
The primary action I take in this section is linking Google Analytics 4 to their other accounts, including Google Ads, Search Console, Ad Manager, Big Query, and Optimize. The rest of the settings I keep as default, although they should be reviewed and assessed based on the needs of your client.
Phase 4: Align GA3 with the GA4 Tags
This phase is the most difficult one. We need to review the Universal Analytics tracking to be carried over, translate those events/goals into GA4 naming conventions, customize the parameters for those new GA4 events, and then implement the tags into Google Tag Manager. You need to be well-versed in all the platforms and the best practices for implementation.
Translate GA3 to GA4 Events
In Phase 2, you mapped out all of the events and goals from your universal analytics property and any new items you’d like to track. This step is about giving those items event names in Google Analytics 4. For each item, I’ll see if any of Google’s recommended events work; if not, I’ll create a custom event.
My event naming strategy normally combines the Category and Action from Universal Analytics. For phone or email clicks on the website, I’ll use phone_clicks and email_clicks. That event tells me exactly what is happening and removes any question of what is being tracked. Other examples include contact_form_submit, location_page_view, and get_direction_click. If you haven’t picked up on it, using lowercase and underscores is recommended.
Work through all of the items you’d like to track events in GA4. Normally I map out one event and its parameters at a time, and then I move on to the next one. It’s a tedious process, but this helps to ensure the quality and accuracy of your Google Analytics 4 data.
Select Parameters
Parameters help add context to the data being tracked automatically. For the phone_clicks example above, I’d want to know what phone number was clicked, what the clicked text was, and what page they were on. Some of these parameters will be passed through automatically, but I generally will push through everything that I would find useful.
Check out the standard parameters first, then use custom parameters to fill in the blanks. Using Google Tag Manager, I would pass through the {{Click URL}] as the link_url, the {{Click Text}} as the link_text, and the {{Page URL}} as the page_location. If I wanted to create a custom metric, I would add another parameter called “phone_clicks” with a value 1.
Implement in Google Tag Manager
Google Tag Manager is the most reliable method of implementing Google Analytics 4 tracking on your website. You can control what events fire, where/when they fire, and what variables are passed alongside the event. There are also built-in GA4 Configuration and Event tags, making the implementation process straightforward.
Test that everything works
Test that your entire setup is working correctly. Start by putting Google Tag Manager into preview mode and using the Tag Assistant to test each event. You should also have Google Analytics 4 active, so you can watch both Debug Mode and the Real Time reports. If you don’t see something firing or the data doesn’t come through cleanly, this is your time to fix it.
Phase 5: Configure GA4
All of your work from the earlier phases will finally pay off. This section should fly by if you’re using the migration template I created. We want to mark the items as conversions, add custom audiences, create custom dimensions/metrics, and modify the channels. If you have ecommerce tracking, this is also the time to ensure things are passing through correctly.
Mark GA4 as Conversions
Everything in GA4 is tracked as an event. Marking an item as a conversion changes the “is a conversion field” from no to yes, and that’s about it. Google Looker Studio recently released conversion counts and rates for GA4 conversions, but nothing else changes inside the GA4 interface. I recommend tagging anything that would have been a goal in GA3 as a conversion in GA4. This should include your key performance indicators (KPIs).
Add Custom Metrics/Dimensions
Custom Metrics and Dimensions are one of my favorite parts of Google Analytics 4. They let you send custom data alongside your events, making in-platform analysis much better. As of writing this, they can only apply to Event, User, or Item scopes; the Session Scope isn’t available as of yet.
The custom dimensions and metrics you added to your events in Phase 4, should be copied into Google Analytics 4 now. Make sure you copy the parameter exactly as you have it in GTM. The name and description can have any text you want.
Update Default Channel Groups
This is a recently released feature. Go into your property settings, and click Channel Groups under the data settings. You can’t edit the Default Channel Group, but you can copy it and make your own. Name it something relevant to the website, and then add/modify all the channels you need. Be sure to note that there are a number of new channels compared to universal analytics, mostly breaking each channel out by paid and organic.
Add Custom Audiences
Click into Audiences from your property settings, and click “new audience” to create a new one. Setting up audiences early is recommended, as they take time to collect data. You don’t need to copy every audience from GA3, but focus on the ones you’re currently using and bring those in first.
Review Ecommerce Tracking
Review each ecommerce event and ensure the data is being passed into GA4 correctly. There are many different ecommerce platforms, so there isn’t a one-size-fits-all solution. But work through each event in debug mode or with collected data, and ensure the events are firing at the right time and all of the necessary parameters are being passed through.
Phase 6: Customize The Reporting
GA4 Collections & Reports
Unlike GA3 where every universal analytics account looks exactly the same, Google Analytics 4 allows you to customize the reports on the main screen. From the Reports screen, you can click on Library. Then you can build out Collections, Overview Reports, and Detail Reports. For now, the customization capability leaves a lot to be desired, but I’m looking forward to having more control of these reports in the future.
Pro Tip – click “edit” in the top right corner of an existing report, and you can edit that existing report or duplicate it into a new one. The recommendation is to set up a few helpful reports customized to the client’s need and then add/customize more as the data is worked with.
Explore Reports
Google Analytics 4 added Explorer Reports, a huge upgrade to performing analysis from inside the analytics tool. You can build customized reports that focus on a smaller set of data, and save them to easily be accessed in the future. They have much more functionality than the custom reports and dashboards available within GA3.
While most of the reports I build are Free Form data tables, the Funnel Exploration reports are an excellent addition. You can build out custom funnels based on specific events, unlike GA3 where you were restricted to pageviews. These funnel reports can also be imported into the Detail Reports, making funnels easily accessible to everyone in the account.
Looker Studio
My preferred way of sharing data with clients. GA4 dashboards in Looker Studio get built once and automatically update with data moving forward. When they are built correctly, all of the data you need can easily be reviewed upon loading.
In June 2023, Google updated their GA4 looker studio connection, adding more than 170 new fields to the data source. This update included Google Ads data, landing pages, count and conversion rate for individual conversions, and avg. session duration. There was a messy workaround to get this data into looker studio before, so I’m glad they simplified the process.
Merge Google Analytics 3 with Google Analytics 4
I’ll write an entire guide on this in the future, but many of my clients have been asking if we can merge the historical data from a universal analytics account with the new data from Google Analytics 4. The short answer is that merging universal analytics data can be aligned with Google Analytics 4 data, but there are a few caveats to remember.
The data structure is completely different between the analytics platforms. We want to identify similar fields, and remove the rest. Below are two examples of how you can merge the universal analytics data with Google Analytics 4.
Traffic Report
Dimensions: Date, Source, Medium, Campaign
Metrics: Sessions, Goal Completions (by goal name), and Conversion Events (by event_name)
Content Report:
Dimensions: Data, Source, Medium, Page/page_location, Page Title/page_title
Metrics: Pageviews, Unique Pageviews, Views, and Users (GA4)
It won’t be a perfect solution, but it should help you maximize the value of your historical data. Bring all the data into Big Query or Google Sheets, which are friendly with the Google Analytics API. Try to get used to the new data structure in your GA4 property, as the sooner you switch to the new platform, the better.
FAQs
What is a GA4 migration?
A GA4 Migration is migrating the tracking setup of GA3 into the new format of Google Analytics 4. With unique data structures, reporting capabilities and platform capabilities, a fresh look is recommended, not simply copying/pasting the current tracking.
Can you migrate your data into GA4?
Historical data from GA3 can not be imported to GA4. Exporting the historical data from GA3 is recommended, as it will only be available until June 2024. You are able to combine GA3 and GA4 data outside of the tools using a platform like Google Sheets or Looker Studio.
Why should I migrate to GA4?
Data will stop flowing into GA3 at the end of June 2024, so GA4 is recommended to track your website analytics. Going through the migration process above will ensure you're carrying over the important tracking from your website.
What happens if I don't migrate to GA4?
Google will automatically migrate to a GA4 property, but it will not be customized to your website. The data's usability will be limited compared to a properly planned GA4 property. There is a GA4 setup assistant which is better, but it's still not great compared to setting everything up yourself.