A Handy Guide to UTM Codes: Know Which of Your Campaigns Really Work

Disclosure: Our content is reader-supported, which means we earn commissions from links on Crazy Egg. Commissions do not affect our editorial evaluations or opinions.

Our traffic bounces all over the place.

We have social. We have email. We have paid ads. There’s more sites, platforms, and networks than we could possibly hope to run our campaigns on.

How do we keep track of it all?

How do we know what’s working and what’s not?

We use UTM codes.

What’s a UTM?

UTM stands for Urchin tracking parameters. They’re little pieces of data that we add to our URLs in order to see where different traffic comes from. They were introduced way back with an analytics tool called Urchin, the tool that was bought by Google and evolved into Google Analytics. Somewhere along the way, they became the industry standard for tracking marketing campaigns across tools.

These days, most analytics tools, marketing apps, marketing automation tools, and CRMs look for these parameters automatically.

There are five standard parameters.

UTM Medium: Think of this as a channel. Social, Organic, Paid, Email, Affiliates, are all core marketing channels that include multiple traffic sources.

UTM Source: The individual site within that channel. For example, Facebook would be one of the sources within your Social medium for any unpaid links that you post to Facebook. If you’re running a Facebook ad or spending money to promote a link, you’d want to label Facebook as a source within Paid. If you’re building a link for email, define which list that you’re sending the email to.

UTM Campaign: The specific campaign that you’re running. Feel free to fill this in however it makes sense to you. Names that allow you to easily identify product launches, promotional campaigns, individual emails or posts, etc. are all good.

UTM Content: This is an optional field. If you have multiple links in the same campaign, like two links in the same email, you can fill in this value so you can differentiate them. For most marketers, this data is more detailed than they really need.

UTM Term: Marketers rarely use this field these days. It’s so you can track specific keywords for paid organic campaigns. Since AdWords has it’s own tracking methodology and a deep integration with Google Analytics, you’ll rarely need to use this field.

Whenever you put a link on an external site (not your own site, more on this below), you add these parameters to your URL. Then when traffic lands on your site, you know where the visitor came from and that data appears in all your marketing and analytics tools.

Here’s a normal URL without any tracking:

And here’s the same URL with four UTM parameters added:

In this hypothetical example, we have a set of active users for a product that are going to receive an email. The campaign isn’t set to every email subscriber on file, only users that are defined as “active.”

Let’s break down each individual element of this URL to really understand it.

  • – Same page as the normal URL
  • ? – this tells your browser that everything after this point is just data
  • utm_source=active%20users – we’ve defined “active users” as our UTM Source. Since spaces can’t be used in a URL, the space is replaced with “%20”
  • & – this tells our marketing tools that we’ve finished defining the previous UTM and we’re about to start a new one
  • utm_medium=email – we’ve defined the UTM Medium as “email”
  • utm_campaign=feature%20launch – we’ve defined the UTM Campaign as “feature launch”
  • utm_content=bottom%20cta%20button – we’ve defined the UTM Content has “bottom cta button” so we can track traffic down to the individual link of the campaign

Feel free to skip Content and Term if you don’t have a need for them. But definitely get in the habit of always using Medium, Source, and Campaign consistently. Many analytics tools assume that all three are used together. And by skipping one, you can create data gaps in your reporting.

Google has a UTM Builder to help you put together these trackable URLs whenever you need them.

Campaign URL Builder

Email UTM Examples

Here’s an email sent by CreativeLive:

12 classes 19 Each

The button uses this URL and UTM parameters:

This email is from Rover:


The button uses this URL with these UTMs:

Note: a lot of email tools auto populate UTMs on every link which is why you’ll see some email links using the UTM Term parameter. This data is rarely, if ever, looked at by the marketing team.

Another example from the hotel chain, 1 Hotels:

Revive Recharge Recycle

The URL and UTMs that the button uses:

Paid UTM Examples

A paid ad from The Information on Facebook:

The Information

Note: They’re using a custom “offer” parameter along with the normal URM parameters.

An ad from uBiome on Facebook:


The URL:

An ad from Electronic Arts on Twitter:


The URL:

Note: you can see that they’re using “social” for the medium. Since this is a paid ad, I’d use a medium of “paid” instead. This will keep all the paid traffic sources under the same “paid” channel in your reporting.

Social UTM Examples

A tweet from Tomasz Tunguz:

Tomasz Tunguz

The URL:

A tweet from Shane Barker:

Shane Barker

The URL:

A Facebook post from The Points Guy:

The Points Guy

The URL:

The Key to UTMs: Clean Data

I’ve worked with hundreds of teams and different analytics implementations. By far, the biggest problem with UTMs is getting a team to use them consistently.

UTMs are pretty flexible, you can add whatever values to each parameter you want. Want to segment your marketing channels into your “fluffy bunny” medium, your “rainbows” medium, and your “pink unicorns” medium? Go for it! Completely up to you.

This flexibility has a downside though, flexibility also means a lack of consistency.

Let’s use an example, say you want to tag all your links from paid channels with the same medium parameter.

What do you define that medium as?

Well, you have a LOT of options:

  • Paid
  • paid (yes, these are case sensitive in some tools)
  • CPA (cost per acquisition)
  • cpa
  • PPC (pay per click)
  • ppc
  • CPC (cost per click)
  • cpc

It’s incredibly common for different people on the same team to use different terms for the same medium, source, or campaign. It’s even pretty easy to use different terms yourself! We all get busy, forget what we used in the past, and tweak something accidentally. I catch myself doing this regularly.

Whenever this happens, your data fragments.

Now, some tools will attempt to group some of the more common variants for you. Google Analytics has a range of parameters that it groups into particular mediums.

But many tools don’t, they take the data exactly as it comes.

Messy data means that you’ll have a terrible type trying to see what’s going on. The problem can range from constantly having to manually massage a few rows yourself to having reports so messy that it’s impossible to see where anything is coming from.

How do we fix this?

Whenever working with a new team or site, I always start with a basic Google Spreadsheet. Then I build a few columns that have dropdown selections, especially for medium and source. I’m paranoid about forcing consistency for those two values. And then I let folks fill in the campaign and name parameters however they like. If you keep medium and source clean, the majority of your reporting problems will go away.

With a quick formula, you can even get the spreadsheet to build the final tracking URL for you.

The workflow goes like this for the whole team:

  1. For all external links, go to the team’s UTM spreadsheet
  2. Add your destination URL in the first column
  3. Pick the medium from a dropdown of only 5-10 options
  4. Pick the source from a dropdown of 20-30 options (this list will be longer since each channel has a few sources within it)
  5. Fill out the campaign field
  6. Fill out the content field if you want (optional)
  7. Final URL is automatically populated in the last column

Quick and easy for the entire team to follow. It also gives you an ongoing record of every single trackable URL your team has built. Good to have if something breaks later and you have to diagnose the problem.

There’s a few UTM tracking templates out there like this one. Feel free to Google around until you find one you like. I usually find a free template from Google, create a copy, and then add dropdowns for the Medium and Source columns. Finally, I force the team to use that same spreadsheet every time they create a new URL. Once I’ve done that, I’ve never had an issue with getting a team to use the same values consistently.

What about internal tracking? Can we use UTMs?

How do we track links on our own site? What if we put a banner on our blog for a purchase, demo, or free trial, how do we tell if the banner drives conversions?

I strongly recommend that UTMs never get used for your own internal links.

How come? It’ll break your analytics tracking.

You see, Google Analytics and other tracking tools typically start a brand new visitor session whenever a visitor arrives on a page with UTMs. They assume that UTMs are only being used on external links and then reset all session-level data.

That means that the session resets and the visitor now looks like they’ve visited your site multiple times.

All of these metrics will start to get skewed:

  • Session totals
  • Time on site
  • Pages/visit
  • Page entrances and exits
  • Traffic sources and channels

Just about every metric in Google Analytics will change.

If this happens to a few visitors, it’s not a big deal. You won’t even notice it.

But if you have a steady flow of visitors that go through that campaign, you’re permanently skewing your analytics data from reality. Analytics data is already hard enough to keep accurate, the last thing you want to do is make it worse intentionally.

What do we do instead?

There’s two options that typically get used.

Event Tracking

Every analytics tool has a way to fire a JavaScript event. Any front-end engineer can do this easily, it’s a way to tell the analytics tool that an action occurred.

When an analytics tool sees an event, it knows that the action occurred during the same session. None of the other analytics metrics will get reset. And there’s plenty of reports built into these tools to see which events lead to conversions, how many events are happening, and which traffic sources trigger events.

For Google Analytics, there’s a bunch of documentation on events work here.

A Custom Parameter

UTMs are one set of URL parameters that are broadly recognized by the marketing community. But we can set any of our own parameters that we want on our own site.

For example, we could add ?unicorn=purple to all of the links. Analytics tools will just ignore these parameters since they don’t recognize them but we have the freedom define any parameter of our choosing.

Many engineering teams will use their own internal parameters to track extra internal data in a custom way. One of the more popular parameters is “ref” which is short for reference. It’s just a quick short-hand parameter that people tend to use when they want to track something.

Again, analytics tools won’t pay any attention to the ref parameter or any other custom parameter that you build. If you have a user database (you’re building a SaaS or consumer tech app) or have a CRM (most B2B companies), your engineers can use a few of these internal parameters to collect any extra data that you want to record.

Your blog banner URL would then look something like this:

Then when the demo request gets submitted, the value “blog_banner” would be stored however you want in your user database or CRM. And you’ll get that data without accidentally resetting all your analytics metrics for that visitor session.

Use Crazy Egg

If you install Crazy Egg, you can visually see all the clicks coming from internal links, buttons and forms from any page on your website. It’s the easiest way to see what clickable elements are hot and which ones are not.

Other Methods to Track Marketing Campaigns

While UTMs are the method for tracking marketing campaigns between marketing tools, you have a few other options.

Conversion Pixels

Just about every paid ad platform will give you a snippet of JavaScript that you can use to track conversions within their tool. This includes Facebook, AdWords, and all the retargeting tools like Adroll and Perfect Audience.

The process is pretty simple:

  • Go into your account on that tool
  • Find the JavaScript snippet for tracking conversions
  • Place the snippet on the page of your site that means a conversion event has occurred (usually a thank-you page of some kind)

Since the paid platform can now see when visitors convert on your site, they’ll track the conversion for you. When you see conversion data in Facebook or Analytics, this is usually where the conversion data is coming from.

While this does make managing your paid campaigns much more efficient since you can do everything within the tool itself, I do recommend that you also set up your own UTM tracking for these campaigns. You’ll want your own set of data to validate against when it’s time to calculate the true ROI of a channel or campaign. By nature, there is a conflict of interest with these tools, they want to take credit for as many conversions as they possible can in order to demonstrate their value. If you have your own data, it’ll be easy to double-check and make sure everything is accurate.

Separate Landing Pages

When all else fails, there’s always the option to build unique landing pages for every single campaign. It’s labor intensive but it’s also fool-proof.

Instead of worrying about UTMs and analytics integrations, sign up for a landing page tool like Leadpages or Unbounce. Then create a few basic landing page templates that you can re-use over and over again. Then every time you appear on a podcast, write a blog post, run a new paid campaign, or anything else, whip up a quick landing page and send the traffic to that specific page.

Simple and effective.

These tools will give you reporting on how much traffic and how many conversions happen on each page. Since every campaign got a unique page, it’s easy to see which campaigns give you conversions. This is a great option when your marketing team only needs to collect email subscribers or get prospects to fill out a simple form to become a lead. If you’re trying to drive free trials or more complicated conversion types, this may not be an option.

It also won’t work if you’re promoting pages that don’t have a strong CTA and visitors are likely to bounce around your site to other pages. Promoting blog posts on social is a good example where unique landing pages wouldn’t work.

The Quick Recap

UTMs are the most popular method for tracking our traffic across different sites. All the analytics tools and many marketing tools recognize them automatically. When you set them up, make sure you use the Medium, Source, and Campaign parameters every time. Only use Term and Content if they’re valuable to you.

Remember that the key to having useful campaign data is to use values for Medium and Source consistently. Otherwise, your data will get fragmented in your reports which makes it much more difficult to figure out what’s going on.

However you implement UTMs, don’t ever use them for internal links. They’ll break your analytics data, triggering an event for your analytics tool or using a custom parameter are much better options.

While UTMs are the standard, there are a few other ways to set up your tracking. For paid platforms, using the tracking pixel that they provide can make things much easier. And you can always keep things keep by building a unique landing page for each campaign.

Make your website better. Instantly.

Over 300,000 websites use Crazy Egg to improve what's working, fix what isn't and test new ideas.

Free 30-day Trial