How to Add UTM Parameters to Your Short Links
Rick Sarkar
author
How to combine UTM parameters with short links correctly: tag the destination, shorten the result, and test the round trip. Includes the rules that break tagged URLs.
Short links and UTM parameters solve opposite problems.
UTM parameters make a URL informative and long. Short links make a URL clean and short. Put them together incorrectly and you get the worst of both - a link that is still ugly and no longer tracks properly.
Put them together correctly and each does its job without interfering with the other: your audience sees something clean, and your analytics receives everything.
This guide is the mechanical how-to. If you need the background on what each parameter does and how to name them, start with what are UTM parameters and come back.
The One Rule
Everything in this guide follows from a single principle:
Tag the destination URL. Then shorten the tagged URL.
1. Destination: https://skybrance.com/plans
2. Tagged: https://skybrance.com/plans?utm_source=instagram&utm_medium=social&utm_campaign=diwali_2026
3. Shortened: skyh.in/diwali-igThe parameters live on the destination, hidden behind the short link. The visitor sees step 3. Your analytics platform receives step 2, because the redirect sends the browser to the complete tagged URL.
Both layers work at once, and neither compromises the other.
The mistake this prevents is the reverse order - creating a short link first and then trying to attach parameters to the short link itself. That produces a link that is longer, uglier, and frequently broken.
Why the Order Matters
It is worth understanding why the parameters have to sit on the destination rather than the short link.
A short link is not a URL that contains your destination. It is a lookup key. When someone clicks skyh.in/diwali-ig, the platform looks up that alias, finds the destination stored against it, records the click, and issues a redirect to whatever it finds.
If the stored destination is the tagged URL, the browser is sent to the tagged URL, and your analytics reads the parameters normally. Nothing special has to happen.
If the stored destination is untagged, no amount of decoration on the short link changes what is stored. You would be relying on the platform to notice extra parameters and forward them - behaviour that varies, is easy to get wrong, and produces silent failures when it does not work.
Tagging the destination is the approach that does not depend on anything clever.
Step 1: Build the Tagged Destination
Start with your destination URL and append the parameters.
https://skybrance.com/plans?
utm_source=instagram&utm_medium=paid_social&utm_campaign=diwali_2026&utm_content=creative_aThe structure:
- A ? marks the start of the parameters
- Each parameter is a key=value pair
- An & separates each pair from the next
Three parameters are essential - source, medium, and campaign. Add utm_content when you are comparing variants, such as two creatives in the same campaign.
Keep every value lowercase, use a single separator consistently, and be careful with utm_medium specifically, since analytics platforms match it against a fixed vocabulary to assign a channel. An invented value there means your traffic gets filed as unassigned.
Step 2: Check It Before You Shorten
This step takes fifteen seconds and prevents the most expensive category of mistake.
Open the tagged URL in a browser before you shorten it. Once a tagged URL is behind a short link and that short link is out in the world, a mistake in the parameters is baked in - every click records the wrong data, and unless your platform lets you edit the destination, the link has to be replaced.
What to check:
- The page actually loads, and loads the right page
- The URL in the address bar still shows all your parameters
- No typos in parameter names - utm_souce records nothing, and fails silently
- The values are lowercase and match your conventions
That last point matters more than it sounds. A misspelled parameter name produces no error anywhere. The page loads perfectly, the link works perfectly, and the data simply never arrives.
Step 3: Shorten It With a Readable Alias
Now create the short link, using the tagged URL as the destination.
Use a readable alias, not a generated code. The whole point of shortening a tagged URL is to make it shareable. skyh.in/diwali-ig can be spoken, printed, and remembered. skyh.in/a8Kd2 can only be clicked. See what is a vanity URL for how to write aliases that hold up.
Do not repeat the tracking in the alias. The alias does not need to encode your campaign taxonomy - the parameters already carry that. Keep the alias short and human. skyh.in/diwali-ig is enough; skyh.in/instagram-paid-social-diwali-2026-creative-a helps nobody.
One alias per tagged URL. If you are running the same campaign across three platforms, that means three tagged URLs and three short links, each with its own utm_source.
Step 4: Test the Round Trip
Before the link goes anywhere public, confirm the whole chain works.
- Open the short link in a private window. Regular windows may serve a cached redirect and hide problems.
- Look at the address bar after it lands. Every parameter you set should be visible in the final URL. If they are missing, the destination stored against the alias is not the tagged version.
- Confirm it is the right page. Easy to paste the wrong destination while building several links at once.
- Check your analytics. Real-time reporting should show the visit attributed to the source and medium you set, not to direct or unassigned.
You can also check the redirect from the command line, which shows exactly what destination the alias resolves to:
curl -I https://skyh.in/diwali-igThe Location header in the response is the destination the browser will be sent to. Every parameter should be present in it.
The ? and & Rule
Of the mechanical errors in this whole process, this is the one that comes up most, and it is worth being precise about because the symptom - a link that loads but records nothing, or loads a 404 - gives no hint about the cause.
A URL gets exactly one ?. It marks where the query string begins. Everything after it is separated by &.
If your destination has no existing parameters, your first UTM joins with ?:
https://skybrance.com/plans
?
utm_source=instagram&utm_medium=socialIf your destination already has parameters, your first UTM joins with &:
https://skybrance.com/plans?ref=partner
&
utm_source=instagram&utm_medium=socialGetting this wrong produces a second ? in the middle of the URL. Some servers ignore everything after it, some throw an error, and some load the page while silently dropping your parameters - which is the worst outcome, because it looks like it worked.
Before appending anything, look at the destination URL and check whether it already contains a ?. That one glance prevents the whole class of problem.
Characters That Break Tagged URLs
Parameter values look like free text and mostly behave like it, right up until they do not. The characters below are the ones that either break the URL outright or quietly corrupt the value by the time it reaches your reports.
- Spaces. Converted to %20 or +, which makes the value unreadable in reports and the URL fragile when copied. Use underscores or hyphens instead.
- Ampersands inside a value. An & means "next parameter." Putting one inside a value splits it in a way you did not intend. Avoid entirely.
- Question marks inside a value. Same problem as above, for the same reason.
- Hash symbols. Everything after a # is a fragment and never reaches the server. A # in a parameter value silently truncates everything after it.
- Accented and non-Latin characters. Legal, but encoded into long escape sequences that make reports hard to read.
- Uppercase. Not broken, but Instagram and instagram are recorded as two separate sources, splitting one campaign across two report rows.
The safe set for parameter values: lowercase letters, digits, underscores, and hyphens. Nothing else is worth the risk.
Building a Campaign in Bulk
For a campaign spanning several channels, building links one at a time invites inconsistency. A more reliable approach:
Work in a spreadsheet first. One row per link, with columns for destination, source, medium, campaign, content, alias, and the assembled URL. Build the tagged URL with a formula so the structure is identical every time and nobody hand-types an &.
Keep the shared values constant. Within one campaign, utm_campaign should be identical across every row. Only utm_source, utm_medium, and utm_content vary. This is what makes the channels comparable later.
Review the whole sheet before creating any links. Errors are obvious when twenty rows sit side by side and one says emails while the others say email. The same error is invisible when links are made one at a time over three days.
Then create the short links, using the assembled URLs as destinations and following your alias convention.
Keep the sheet. When someone asks in November what skyh.in/diwali-ig pointed at, the sheet answers instantly. Teams that skip this step end up reverse-engineering their own campaigns.
For teams generating links at volume, an API removes the manual step entirely - the sheet becomes the source of truth and the links are created from it programmatically.
Troubleshooting
- Traffic shows as direct or unassigned. Either the parameters are not reaching the destination - check the address bar after the redirect - or utm_medium contains a value your analytics platform does not recognise.
- Parameters missing after the redirect. The destination stored against the alias is the untagged URL. Edit the destination to the tagged version.
- Only some parameters arrive. Usually a stray ? where an & belonged, or a # in a value truncating everything after it.
- One campaign appears as several rows. Inconsistent casing or separators across links. Standardise and rebuild.
- The link worked yesterday and not today. Someone edited the destination and pasted the untagged URL. Re-check what the alias currently resolves to.
- Clicks recorded but no sessions in analytics. People clicked and left before the page loaded - often a sign of a slow destination rather than a tracking fault. Compare click counts against sessions to spot it.
Mistakes That Cost You Data
- Shortening first, tagging second. The reverse of the correct order, and the source of most broken tracking.
- Two ? in one URL. Check whether the destination already has a query string.
- Typos in parameter names. utm_souce fails silently and forever.
- Mixed case values. One campaign, several report rows.
- Cramming the taxonomy into the alias. The parameters already carry it. Keep the alias human.
- Reusing one tagged URL across channels. If utm_source is the same everywhere, you cannot compare channels - which was the point.
- Tagging internal links. Parameters belong on links pointing at your site from outside. Tagging your own navigation overwrites the visitor's real acquisition source.
- Never testing. Fifteen seconds in a private window versus a campaign's worth of missing data.
Doing This in SkyShare
The workflow above is not specific to any one tool - it works anywhere the destination is a field you control. In SkyShare you paste the fully tagged URL into the destination field, type a readable alias, and share the short version. The parameters live on the stored destination; the alias stays clean.
One feature matters more than the rest here, and it is worth checking for in whatever tool you use: whether the destination stays editable after the link is live. Parameters get mistyped. If utm_souce made it into a link that is already in a scheduled post, an editable destination turns that into a one-minute fix instead of a lost campaign. If your tool freezes the destination at creation, the link has to be replaced everywhere it was published.
Building a lot of links at once is worth automating rather than doing by hand - SkyShare has an API for exactly this, and forty links assembled from a spreadsheet have far fewer typos than forty links assembled in a browser tab at 6pm.
Before You Hit Publish
Everything above collapses into a check that takes under a minute. Run it on the first link of any campaign - if the first one is right, the rest usually follow the same pattern.
- Look at the tagged URL before shortening it. Count the ? characters - there should be exactly one.
- Read every parameter name character by character. utm_source, utm_medium, utm_campaign. A typo here fails silently and permanently.
- Confirm every value is lowercase and space-free.
- Shorten it, then open the short link in a private window.
- Look at the address bar where you land. Every parameter you added should be sitting there.
Step five is the one people skip, and it is the only one that actually proves anything. The other four are you checking your own typing; step five is the link telling you whether it works.
If you need somewhere to put the tagged URL, SkyShare is free to start and does not require a signup for the first link:
Frequently Asked Questions
Can you use UTM parameters with a short link?
Yes, and it is the recommended approach. You add the parameters to the destination URL first, then shorten that tagged URL. Visitors see a short, clean link while your analytics platform still receives every parameter, because the redirect sends the browser to the complete tagged destination.
Should UTM parameters go on the short link or the destination?
On the destination. A short link is a lookup key, not a URL that contains your destination - the platform finds the stored destination and redirects to it. If the stored destination carries the parameters, they arrive automatically; decorating the short link itself does not change what is stored.
Why are my UTM parameters missing after the redirect?
Almost always because the destination saved against the alias is the untagged URL rather than the tagged one. Open the short link and check the address bar after it lands - if the parameters are absent there, edit the link's destination to the full tagged version.
Do I use ? or & before my first UTM parameter?
Use ? if the destination has no query string yet, and & if it already contains one. A URL can only have a single ?, so a second one mid-URL causes servers to drop or mishandle everything after it - sometimes silently, which is why it goes unnoticed.
How do I test that a tagged short link is working?
Open it in a private window so no cached redirect interferes, then check that every parameter appears in the address bar on the destination page. You can also run curl -I against the short link and inspect the Location header, which shows exactly where the alias resolves to.
Can I change UTM parameters after a link is shared?
Only if your link platform allows editing the destination. When it does, correcting a mistyped parameter takes a minute and the short link itself never changes, so anything already printed or posted keeps working. Without that, the link has to be replaced.
