How to Switch From Manual UTM Tagging to UTM Presets

Building your first set of UTM presets takes about an afternoon.
So why do teams keep putting it off for two years?
Because building UTM presets was never the hard part. The hard part is the 400 links your team already tagged by hand, half of which are still live, all of which are already sitting in your GA4 reports under values nobody agreed on.
I run linkutm, and this is the conversation I have most often. Not “should we use UTM presets”. The question is always some version of: “if I change how we tag things now, what happens to everything we already tagged?”
That question has a real answer, and it is not “nothing”. Something does happen, and if you switch without planning for it your reports get worse before they get better.
This article is the migration itself. Five steps to move from manual UTM tagging to UTM presets, what to do about links already published, and how to read reports that span the change. If you are still deciding whether a tool is worth it at all, that is a different question and I covered it in manual vs spreadsheet vs UTM software.
What UTM Presets Actually Change
A UTM preset is a saved set of UTM parameter values that fills itself in when you build a link, so the fields you already decided cannot be retyped differently. Manual tagging is the opposite: writing UTM parameters by hand onto a URL, one link at a time, from memory or from a document.
UTM presets do not change what a UTM parameter is or how GA4 reads it. Your utm_source still lands in the Session source dimension either way, exactly as Google’s URL builders describe it.
What changes is where the decision happens. Manual tagging decides at the moment of shipping, usually by whoever is shipping. A preset moves that decision to setup, once, by whoever owns the standard.
Everything else in this article is about the fact that you have two years of decisions already made the first way.
I am not covering how to structure the presets themselves here. The field-by-field logic, which values to lock and which to leave open, lives in the templates post: which UTM fields to lock. This article assumes you have them, or can build them in an afternoon, and starts at the migration.
Honest limitation: presets fix links built inside your tool. They do nothing for links a partner builds, links inside an ad platform’s auto-tagging, or a link someone types into a Slack message. More on that in the section on what stays manual.
Why Teams Stall on Switching to UTM Presets
Teams stall on UTM presets because of three specific fears, and two of them are justified.
Fear 1: “I will break links that are already live.” Not justified. You cannot break a published link by creating a preset, because UTM presets only affect links built after they exist. Old links keep working exactly as before.
Fear 2: “I will lose my historical data.” Not justified either, but it is close to something that is true. You lose nothing. GA4 does not delete or rewrite anything when UTM presets start sending different values.
Fear 3: “My reports will stop comparing cleanly.” Completely justified. This is the real cost, and nobody warns you about it. If you tagged email as newsletter for two years and your preset now sends email-newsletter, GA4 does not rename the old value. It creates a new one. Any chart grouping by source shows a line that dies and a new line that starts.
That third fear is the whole reason migrating to UTM presets needs steps instead of just a switch.

Step 1: Audit the UTM Values You Already Have
Start by counting the values already in your reports, not the links in your spreadsheet. The spreadsheet is a record of what your team meant to send. GA4 is a record of what actually arrived, and those two are never the same.
Here is the pull I run:
- Open GA4 and go to Explore, then start a blank exploration.
- Add Session source as the only row dimension.
- Add Sessions as the metric.
- Set the date range to the last 12 months.
- Set the row limit to 500 and export to CSV.
- Repeat for Session medium and Session campaign.
You now have three lists. The medium list should be short, around 8 to 12 values. The source list, maybe 20 to 50. The campaign list will be long and that is fine.
What you are looking for is not the long list. It is the duplicates hiding inside the short one. Every team I have audited has some version of this in their medium column: email, Email, e-mail, newsletter, eml. Five values, one channel, four of them wrong.
Count the distinct values per parameter before you touch anything. That number is your migration’s size, and it is also worth knowing for a separate reason: every distinct value is a row in a GA4 report table, and enough of them push a report into high cardinality and the (other) row.
One catch before you pull 12 months: explorations can only look back as far as your data retention setting allows, and GA4 standard properties default to 2 months. If yours was never raised to 14 months, your audit window is shorter than you think and you are seeing a fraction of the vocabulary.
Honest limitation: this audit only sees traffic that arrived. Links you built and never shipped, or shipped to an audience that never clicked, are invisible here. For those, the spreadsheet is still your only record. Pull both and reconcile.
Step 2: Build the Consolidation Map
A consolidation map is a documented pairing of every old value to the UTM preset value that replaces it. It is the single artifact that makes your reports readable across the change, and it takes about an hour to write.
Build it as a three-column table:
| Old value (in GA4) | New preset value | Decision |
|---|---|---|
Email, e-mail, eml |
email |
Merge in reporting |
newsletter |
email |
Merge in reporting |
fb, facebook.com |
facebook |
Merge in reporting |
linkedin-paid |
linkedin + medium cpc |
Split, was overloaded |
q4-sale-final-v2 |
(leave) | Retired campaign, no future links |
Three rules I apply when filling this in.
Rule 1: map to the value your UTM preset will send, not to the value you wish you had used. The map exists to reconcile reality with the future, not to relitigate your naming. If your convention needs work, fix it before the presets ship, using the UTM naming conventions rulebook, then build presets from the fixed version.
Rule 2: never rewrite history. You cannot change the values already stored in GA4, and you should not try to fake it with filters that hide the old ones. The old values are what actually happened. The map is how you read them, not how you erase them.
Rule 3: leave retired campaigns alone. If a campaign will never generate another link, it does not need a mapping. Mapping it adds work and changes nothing. My rough cut is any campaign with no traffic in 90 days.
Store this map where your reporting people can find it, not in the tool alongside your UTM presets. It is a reporting document, not a tagging document.

Step 3: Pick a Cutover Date and Run Parallel
Pick a date that sits at the start of a reporting period, then run manual tagging and UTM presets side by side until every campaign that started before that date has finished.
The cutover date matters more than it sounds. Put it mid-month and every monthly report for the rest of the year contains a partial vocabulary change. Put it on the first of a month or a quarter and the seam lines up with a boundary you already report on.
The parallel run is a hard requirement, not a soft transition. Campaigns you launched in March are still delivering clicks in April under March’s values, and you do not control when a published link stops being clicked.
How long to run parallel: the length of your longest live campaign, plus 30 days. For most teams that is 60 to 90 days. An email flow that runs indefinitely never finishes, which is a case I handle in the next section.
During the parallel run:
- Every new link is built from a UTM preset. No exceptions, including yours.
- Every existing link keeps its original tags. You do not retag anything.
- Nobody hand-builds a link “just this once”, which is the single behaviour that extends a 90-day migration into a permanent one.
Rule 3 is where migrations die. I enforce it by turning on validation at the point of creation, so a link that does not match the UTM preset vocabulary cannot be saved. In linkutm that is UTM rules. If you are on a tool without enforcement, the fallback is a weekly export and a five-minute check, which works but relies on someone actually doing it.
Honest limitation: a 90-day parallel run means 90 days of reports that need the consolidation map to read. There is no version of this migration where that window is zero. Anyone promising a clean instant switch is either ignoring live campaigns or planning to rewrite history.
Step 4: Decide What to Do With Links Already in the Wild
You cannot retag a published link, and no UTM preset changes that. UTM values are read from the URL at the moment of the click, so a link already sitting in an inbox, a scheduled post, or a printed QR code will keep sending its original values for as long as anyone clicks it.
That leaves four options, and the right one depends on where the link lives.
| Option | Effort | Risk to live traffic | Reporting outcome |
|---|---|---|---|
| Leave it | None | None | Old values keep arriving until traffic dies |
| Re-point the redirect | Low | Low | Destination changes, UTM values do not |
| Replace at the source | Medium | None | New clicks use preset values, old clicks do not |
| Retire and reissue | High | Real | Clean values, but you break the published link |
Leave it is correct for anything with a natural end: a sent broadcast, a finished ad flight, a seasonal campaign. The traffic decays and the old value stops appearing.
Replace at the source is correct for anything still served from a surface you control: a website footer, a pinned social post, an active ad set, a sending email flow. You edit the link in the surface, new sends carry preset values, and already-delivered copies keep the old ones. This is the option most teams underuse.
Re-point the redirect gets misunderstood. If your links run through a short link, you can change where it goes. You cannot change what it reports. Re-pointing fixes a broken destination. It does not fix tagging.
Retire and reissue means killing a live link and publishing a new one. I use it roughly never. The reporting gain does not justify breaking a link real people are clicking, and you lose the traffic from every copy already in circulation.

Step 5: Annotate the Seam So Future You Can Read It
Write down the cutover date in the same place your reports live, on the day you cut over. This takes two minutes and it is the step everyone skips.
The seam is the date range where reports contain both the old manual vocabulary and the new preset vocabulary. Six months later somebody pulls a year-over-year source report, sees newsletter fall off a cliff in March and email appear from nowhere, and concludes the email channel collapsed.
I have watched a team spend two weeks investigating a channel collapse that was a naming change.
What to record:
- The cutover date, exact
- A one-line reason
- A link to the consolidation map from Step 2
Where to record it depends on your stack. GA4 supports annotations in reports. If your team lives in a BI tool, put it there instead. The note has to be where the confused person is looking.
Honest limitation: annotations help humans and do nothing for automated reports. If you have scheduled exports or a dashboard grouping by source, those will silently split the channel across two values until somebody updates the grouping logic with the consolidation map. Budget an hour for that.
What Stays Manual When You Run UTM Presets
Not every link should come from a UTM preset, and pretending otherwise is how teams end up with 40 presets and no standard.
Three cases where I still tag by hand:
One-off links that will never recur. A conference talk, a one-time partner mention, a link in a personal email. Building a preset for a link you use once is more work than typing it.
Partner-supplied and platform-generated links. If an affiliate network or ad platform builds the URL, your preset never touches it. You standardise these by agreement with the partner, or by mapping their values in reporting.
Experiments where the vocabulary is not settled. If you are testing a new channel and do not yet know what values you will want, a UTM preset locks in a guess. Tag manually for the first few campaigns, see which values you actually query, then build the preset from evidence.
I aim for roughly 80% of links from presets, 20% manual and deliberate. A team at 100% preset coverage has usually built presets so loose they enforce nothing.

Where a UTM Preset Migration Breaks Down
Four situations where migrating to UTM presets does not go the way this article describes.
You have no consistent history to consolidate. If your existing tagging is genuinely random, thousands of one-off values with no pattern, the consolidation map becomes a research project with no payoff. Skip Step 2, treat the cutover as a hard line, and accept that earlier data is directional only.
Your traffic is mostly auto-tagged. If most of your paid traffic arrives through Google Ads auto-tagging with gclid, UTM presets govern a much smaller share of your data than you think. The migration is still worth doing, but the reports that hurt most are not the ones presets fix.
Multiple teams own tagging in different tools. Presets in your link tool do not constrain a link built inside an ESP or an ad platform. Getting every surface onto one vocabulary is an organisational problem, and it takes longer than 90 days.
Your campaigns never end. Always-on flows and evergreen ads mean the parallel run has no natural finish. I set an arbitrary end date, usually 90 days, accept a permanent trickle of old values, and note it in the consolidation map rather than waiting for a clean state that never arrives.
Frequently Asked Questions
What is a UTM preset?
A UTM preset is a saved set of UTM parameter values that fills in automatically when you build a campaign link. The fields your team has already decided, such as utm_medium for a given channel, come pre-filled and cannot be retyped differently. Only campaign-specific fields are left open. It removes the moment where somebody guesses.
Can I change UTM parameters on a link that is already published?
No. UTM values are read from the URL at the moment someone clicks, so any copy of that link already delivered will keep sending its original values. If the link runs through a redirect you can change its destination, but not what it reports. The practical fix is to replace the link at the source where it is still being served, which affects new clicks only.
Will switching to UTM presets break my old GA4 reports?
Your old data stays intact. GA4 does not rewrite or delete historical dimension values when you start sending new ones. What breaks is comparison, not data: a new value appears as a separate row rather than renaming the old one, so a source that changes name looks like one channel ending and another beginning. A consolidation map and a dated annotation solve the reading problem.
How long should I run manual tags and presets in parallel?
Run parallel for the length of your longest live campaign plus 30 days, which is 60 to 90 days for most teams. The reason is that campaigns launched before the cutover keep delivering clicks under their original values, and you do not control when people stop clicking a published link. Always-on flows never finish, so cap those at 90 days and accept a small ongoing trickle.
How do I find every UTM value my team has already used?
Build a blank exploration in GA4, add Session source as the only dimension and Sessions as the metric, set the range to 12 months, raise the row limit, and export. Repeat for Session medium and Session campaign. That gives you what actually arrived, which is always different from what your spreadsheet says you sent. Cross-check against the spreadsheet for links that shipped but never got clicked.
Should every campaign link use a preset?
No, and aiming for 100% is a warning sign. One-off links, partner-supplied URLs, and new channels where you have not settled the vocabulary are all better tagged by hand. I aim for roughly 80% of links coming from presets. Teams at full coverage have usually made their presets so permissive that they no longer enforce anything.
Start With the Audit, Not the Presets
The instinct is to build the UTM presets first, because that part is fun and finishes in an afternoon. Do the audit first. Until you know how many distinct values are already in your reports, you are guessing at the size of the change and you will pick a parallel-run window that is too short.
The order that works: audit the values, write the consolidation map, build UTM presets from the cleaned vocabulary, pick a cutover on a period boundary, run parallel until your longest campaign ends, annotate the seam.
Then the boring outcome you actually wanted from UTM presets: every new link matches every other new link, and nobody has to remember anything at 6pm on a Friday.
If you want the enforcement half of this, UTM rules in linkutm reject a link that does not match your vocabulary at the moment it is created, which is the only reliable way I know to stop the “just this once” link from restarting the whole problem.