The year is 2019 and Google Analytics has been around for 13 years, give or take. Longer if you including its ancestor, Urchin. One would think that after all this time, digital marketers would know how to use Google Analytics campaign parameters to accurately track marketing initiatives.
The reality is far from ideal and nearly every client I audit has campaign tracking issues. Is it due to the agency handling campaigns? Is it a technical issue? A configuration issue? Politics? Actual bugs?
What I can tell you is that using Google Analytics campaign parameters is not rocket science and in this post I’ll show you techniques to efficiently measure your campaigns.
Reviewing the basics: UTM parameters
The basic mechanism by which Google Analytics campaign tracking works is by using specific parameters (key/value pairs) in the URL of your campaign’s landing page. These are called UTM parameters and are named UTM after Google Analytics’ ancestor, Urchin; UTM stands for Urchin Tracking Module.
Fun fact
UTM is also a global positioning method.
In order to properly track campaigns, you need to use three (3) or more Google Analytics campaign parameters in each URLs. Let’s review the parameters available to you:
Parameter | Required | Usage | Example |
utm_source | yes | Which site/company sent traffic | utm_source=facebook |
utm_medium | recommended | Which marketing method was used to access the site | utm_medium=email |
utm_campaign | recommended | Which marketing initiative was promoted | utm_campaign=2019%20Customer%20loyalty |
utm_content | optional | Which visual element was clicked | utm_content=newsletter_hero |
utm_term | optional | Which keyword was used for paid search | utm_term=running%20shoes |
In the example column in the table above, you will notice encoded characters, for instance, %20 instead of spaces. If you are going to use special characters, make sure you encode these values first. When in doubt, use an encoder first.
As mentioned in the table above, you only need one parameter (in theory) but that is far from enough to run decent marketing campaign tracking. My recommendation (and Google’s) is to use at least three parameters:
- utm_source
- utm_medium
- utm_campaign
This means a URL using Google Analytics campaign parameters could look something like this:
https://mysite.com/promo.html?utm_source=mailchimp&utm_medium=email&utm_campaign=Spring%20Newsletter&utm_content=headerlink
Now arguably the values you insert into utm_source, utm_medium, utm_campaign et al are fair game. As long as you stay away from reserved values as set by Google. Because Google Analytics uses source and medium to pre-build Channel Groupings, you want to stay away from certain keys in utm_medium, such as:
- cpc
- cpm
- direct
- display
- organic
- referral
There are more but stay away from the ones above.
Not sure how to handle these URLs? You have 3 solutions:
- Befriend a developer 🙂
- Start with Google’s URL Builder
- Build a spreadsheet in Excel or Google Sheets
- Use campaign IDs – more on that later
Got the hang of writing URLs with Google Analytics campaign parameters? Good, let’s move on to seeing how why they can be a bad idea.
“Those UTMs don’t look so good in my URLs”
I have seen my fair share of clients claiming that newsletter recipients don’t click links “with lots of dodgy characters in them”. A fair point. So what can we do about it? We can minimize the amount of Google Analytics campaign parameters in the URL by using one of two methods:
- Using a URL shortener
- Using the Campaign ID
Let’s explore both methods.
Using a URL shortener
URL shorteners are great because they generate (surprise) a short link after you feed them long, confusing, scary URLs.
Google’s URL shortener is being phased out but there are many URL shorteners out there so go pick one.
When picking a URL shortener, make sure they are going to retain your link long enough for your links to be tracked because they tend to expire.
Using the Campaign ID
The campaign ID is a little-known gem in Google Analytics inherited from the Urchin days, back when you could use lookup table and file imports. It is brilliant in theory and very actionable in practice.
Using the campaign ID relies on the Data Import feature linked to your Google Analytics property. Go to your admin panel in GA and locate Data Import at the bottom of the Property settings column:
Then you will see a list of your data imports for the property. You can have up to 5 imports per property on a free Google Analytics account, more with Google Marketing Platform (360); In my case I already have a few imports set up so you can see my Campaigns and redirects import.
Create a new import and select Campaign data as import type. Once you’ve done that, name the export and the select the views in which data will be affected by the import. Hit save and in the next step select the campaign dimensions you will be replacing based on the ID column. I selected Source, Medium and Campaign.
Next, you need to manage the data structure by getting a schema (template for the CSV you will be generating.
Below is a sample of my import:
ga:campaignCode | ga:source | ga:medium | ga:campaign |
twowned | social | Owned | |
gpowned | social | Owned | |
fbowned | social | Owned | |
tcen | social | Top Contributor EN | |
tcfr | social | Top Contributor FR | |
isowned | social | Owned |
Whenever i use a URL with utm_id=tcen in links in posts on the Advertiser Community, as soon as the Google Analytics hit for that URL is processed, Google will populate the values “google”, social” and “Top Contributor EN” in source, medium and campaign respectively. Note that I don’t need to encode 😉
Extra credit: renaming your campaign variables
OK so let’s say you hit a wall with someone who doesn’t want to use utm_ variables “because Google can be hacked” or something. Actually this is somethgin that can happen when you migrate from another analytics stack over to Google Analytics and you have to capture old campaign tracking parameters. Actually, what I described with Campaign ID has been a native feature of Adobe Analytics, Webtrends and others.
Anyway, assuming you want to use sid instead of source, mid for medium id and cid for campaign id, you can change your Google Analytics tracking code to look for alternative parameters.
In Google Tag Manager, this is easily achieved by frist creating a variable to capture URL query element sid then assinging that variable to “Fields to set” in a page view tag or – better – in a Google Analytics Settings variables.
Now what?
Once you have your campaign URL, paste it in your links and wait for people to click.
The good news is now you should be getting cleaner campaign data!
If agencies and marketing teams cannot manage tracking URLs in 2019, there is something very sad about the state of training in our marketing schools and internships.
As mentioned in my Superweek talk in 2018, this should be basic marketing hygiene.
What about you? Are you struggling with campaign tracking? How are you managing Google Analytics campaign parameters? Let me know in the comments!
Awesome article on UTMing Julien. Particularly your knowledge of Urchin 4, I think. Also campaign renaming is little discussed online.
Yes, they were confusing until I reach your article. Thank you so much for giving all the details.
Something new for me. Thanks for sharing!
So will using utm_id instead of all the other utm parameters method still work after Google discontinue Universal Analytics later this year?
Hi Chris and thanks for your message!
Sadly, I don’t see this working for GA4. Having said that, I encourage you to export/stream your GA4 data to BigQuery where you can run UPDATE queries based on table lookups.
Great content! But I still don’t get what’s the difference between campaign id / campaign name and when use one or another…