How to use UTM parameters
Tag every link you share with UTM parameters so Google Analytics shows which post, message or email brought each signup or sale, with a copy-ready naming sheet, a link formula and a 30-minute Sunday check.
ByDinesh BypillaReviewed byMurali SidLast checked 15 min read
You post, you send messages, and a few people sign up or buy, but Google Analytics says most of them came from "Direct" or "Unassigned". UTM parameters are short tags you add to the end of every link you share, so Google Analytics can show which post, message or email each visit came from. Without them you keep guessing, and you spend next week's hours on the place that feels busy instead of the one that brings signups and sales.
Do these three things
About 1 hour today, then 5 minutes a day and 30 minutes every Sunday. Judge each tag after 4 Sundays: about 2,800 messages and 56 posts on each channel.
Show the three actions in fullHide the full list
- Today: write one sheet of lowercase tag names, then put tagged links in every bio, profile and email signature you have.
- Every day: tag every link you share from that sheet: each of your 2 posts a day on each channel, and the link in your 100 personal messages.
- Every Sunday: in Google Analytics, write down visits and signups for each tag, then move next week's hours to the tag that brought the most signups.
Get help doing these
ChatGPT or Claude reads this guide and works through it with you.
1. Write a UTM naming sheet before you tag anything
Write down, in one sheet, the exact words you will use for each tag, all in lowercase. If you skip this, "LinkedIn" and "linkedin" show up as two different rows, because Google Analytics treats capital letters as different values.
A tagged link has up to five tags after a ?. Google says to always use the first three:
| Tag | What it says | Example |
|---|---|---|
utm_source | the place the click came from | linkedin, newsletter, partner-name |
utm_medium | the type of link | social, email, referral |
utm_campaign | why you shared it | always-on, launch-oct, webinar-1 |
utm_content | which post or link, when you share more than one | 2026-10-12-a |
utm_term | the keyword, for search ads only | leave it out |
Pick each medium from Google's own list. Google Analytics puts a visit into a marketing channel by its medium. If neither the source nor the medium is a word it knows, such as source "newsletter" with medium "newsletter", the visit goes to "Unassigned" and you lose it in the channel report. Use these:
socialfor posts, comments, bios and messages on LinkedIn, X, Instagram, Facebook, Threads and Reddit. It lands in Organic Social.emailfor your newsletter, cold emails and your signature. It lands in Email.referralfor links on other people's sites: partners, podcast show notes, guest articles. It lands in Referral.paid-socialfor Meta, LinkedIn and Reddit ads, andcpcfor search ads other than Google. They land in Paid Social and Paid Search.affiliatefor affiliate links, andsmsfor text messages.
Copy this into a tab called "Names" and fill it with every place you share links today:
Rules: lowercase only. Hyphens, no spaces. Only the words in this sheet.source | medium | campaign | use it for linkedin | social | always-on | your LinkedIn posts, comments and messages x | social | always-on | your posts and replies on X reddit | social | always-on | answers in subreddits that allow links newsletter | email | always-on | every link in your newsletter cold-email | email | outreach | the link in your one-to-one emails signature | email | always-on | your email signature [partner-name] | referral | [what you did together] | a partner's site, a podcast page, a guest article facebook, instagram, linkedin or reddit | paid-social | [ad campaign name] | ads on that platformutm_content: the date and a letter, like 2026-10-12-a, so you can tell posts apart.
- Tool: Google Sheets. Free.
- Time: 30 minutes.
- You will have: a "Names" tab with one row for every place you share links.
- It worked if: every place you post or message has a row, and every medium is one of
social,email,referral,paid-social,cpc,affiliateorsms. - Common mistake: making up a medium, such as "newsletter / newsletter" or "podcast / show-notes". Those visits land in Unassigned. Put the place in source and one of the types above in medium.
See it done: Quillfox's naming sheet
Quillfox is a made-up one-person agency. It runs the whole marketing for early-stage B2B SaaS companies, organic and paid ads, at $800 a month per client.
Names tab
| source | medium | campaign | use it for |
|---|---|---|---|
| social | always-on | posts and comments | |
| social | outreach | the link in LinkedIn messages | |
| cold-email | outreach | the link in one-to-one emails | |
| social | always-on | answers in r/SaaS and r/startups | |
| newsletter | always-on | every newsletter link | |
| saas-podcast | referral | guest-episode | the show notes of one podcast |
Why it works: Every medium is a word Google Analytics knows, so each visit lands in the right channel, and the sources match the places it actually works.
2. Build each UTM link with a sheet formula or Google's Campaign URL Builder
Turn your names into links with one formula in a second tab, so each new link takes seconds. For a one-off link, Google's free Campaign URL Builder does the same job.
Make a tab called "Links" with these columns: page (A), source (B), medium (C), campaign (D), content (E). Paste this formula in F2 and copy it down:
=A2&IF(ISNUMBER(FIND("?",A2)),"&","?")&"utm_source="&LOWER(B2)&"&utm_medium="&LOWER(C2)&"&utm_campaign="&LOWER(D2)&"&utm_content="&LOWER(E2)The formula forces lowercase, and adds & instead of a second ? if your page link already has one. A finished link looks like this:
yoursite.com/pricing?utm_source=linkedin&utm_medium=social&utm_campaign=always-on&utm_content=2026-10-12-a
In the Campaign URL Builder, fill in "website URL", "campaign source", "campaign medium" and "campaign name", plus "campaign content" if you share more than one link. It shows the "generated URL" and a QR code you can scan.
Point each link at the page that does the job: your landing page, your pricing page or your shop, not always the home page.
- Tool: Google Sheets, or the Campaign URL Builder. Both free.
- Time: 20 minutes.
- You will have: a "Links" tab where five short cells make one tagged link.
- It worked if: you paste the link in a browser, the page opens, and all four tags are still in the address bar.
- Common mistake: typing tags by hand. One space, a second
?orutm-sourcewith a hyphen, and Google Analytics ignores the tag.
3. Put tagged links in your bios, email signature and QR codes today
Replace every link you leave in one place with a tagged one today: each social bio, your LinkedIn profile, your email signature, your newsletter footer and any site that links to you. These links bring visits for months, and untagged they show up as Direct or as a plain referral.
Work through this list, and mark each one done in your sheet:
- The link in every social profile you use, including your Instagram bio. Source is the platform, medium
social, campaignbio. - Your email signature: source
signature, mediumemail. - Every partner, co-marketing or podcast page that links to you. Send the owner the tagged link and ask them to swap it.
- Anything printed: flyers, trade show badges, business cards. Make a QR code from a tagged link, with source set to the event or the card and medium
referral. - Each micro-influencer or creator you work with gets their own source, so you can tell them apart.
Never tag links inside your own site: your menu, buttons, or a blog post that links to your pricing page. The tag takes the credit away from where the person really came from, so a signup from a LinkedIn post shows up as your own blog.
If you run a D2C store: put a QR code with a tagged link on the card inside every parcel, with source
insert-cardand mediumreferral, and point it at the page for your repeat order.
If you run an agency: keep one naming sheet per client, use the same words for every client, and do this step inside each client's own Google Analytics, not a copy you own. The rows then drop straight into your monthly client report.
- Tool: each platform's profile settings, your email settings, and the Campaign URL Builder's QR code.
- Time: 45 minutes.
- You will have: a tagged link in every place that keeps a link for months.
- It worked if: every row in the sheet's "Done" column is ticked, and no profile still shows a bare link.
- Common mistake: tagging internal links "to see which button works". Use your conversion tracking for clicks on your own site instead.
4. Tag every link you post or send, every day
Build today's tagged links from the sheet before you post or send anything, so not one link goes out bare. At the default volume, that is 2 posts a day on each channel and 100 personal messages, so it has to take seconds, not minutes.
Each morning, add today's rows to the "Links" tab: one row per post, with utm_content set to the date and a letter (a, b), and one row for all of today's messages. That is 1 minute for 2 channels. ChatGPT or Claude drafts the posts, often by reusing one idea on each platform, and drafts the messages. You add the one true line about each person, and paste the tagged link last.
- Posts: each post with a link gets its own tag, so you can see which post brought the signup. On Reddit, link only where the subreddit's rules allow it.
- Messages: 100 a day, one tag for the day. Send most of them by email if LinkedIn's weekly limit on connection requests stops you, and tag your follow-ups the same way.
- Newsletter and emails from a tool: some email tools add their own tags. Kit, for example, can add
utm_source=convertkitandutm_medium=emailto every link. Either add those words to your sheet, or turn the setting off and tag the links yourself. Do not do both. - Google Ads: leave auto-tagging on and add no UTM tags. Google Analytics uses Google's own click tag first, so your source and medium tags would be ignored.
- Meta, LinkedIn and Reddit ads: add the same tags to the link in your Meta ads, LinkedIn ads and Reddit ads, with medium
paid-socialand the ad's name asutm_content. Tags matter more here now: Safari removes Meta's and Google's click tags in Private Browsing, Mail and Messages, but it leaves UTM tags in place. - ChatGPT: do not add it to your sheet. ChatGPT adds
utm_source=chatgpt.comto the links it shows by itself. Count those AI visits on their own.
Paste each link into its post or message only after its row is in the sheet.
- Tool: your "Links" tab.
- Time: 5 minutes a day, every day.
- You will have: a row for every link that went out today.
- It worked if: you count 0 untagged links in today's posts and messages.
- Common mistake: reusing yesterday's
utm_content. Two posts then share one row, and you cannot tell which one worked.
See it done: Quillfox's link in a LinkedIn post
Before
quillfox.example/free-audit
After
quillfox.example/free-audit?utm_source=linkedin&utm_medium=social&utm_campaign=always-on&utm_content=2026-10-12-a
Why it works: Source, medium and campaign come from the sheet, and the content tag names the day and the post, so this one post gets its own row.
5. Click each new UTM link once and check it reaches Google Analytics
Open every new tagged link once in a private browser window and check the tags are still in the address bar when the page loads. If they vanish, something on the way removed them, and every visit from that link will show up as Direct.
If the tags vanish, it is usually one of these:
- A redirect drops everything after the
?: from http to https, from yoursite.com to www.yoursite.com, or to a login page. Link to the final address, or ask whoever built your site to keep the tags when it redirects. - A link shortener that does not pass the tags on. Click the short link and check.
- A typo: a space, a second
?, or a capital letter. Rebuild it with the formula.
Then, 24 to 48 hours later, check Google Analytics. Go to Reports, then Acquisition, then Traffic acquisition. Change the first column from "Session default channel grouping" to Session source / medium. Your words should be there exactly as you wrote them, such as "linkedin / social". Do not judge it in the Realtime report: it shows how each person first found you, not this visit, and Google says to use the Acquisition reports for this.
Switch back to "Session default channel grouping" and look at "Unassigned". If it is more than 1 in 10 visits, a medium is off your sheet. Sort by Session source / medium to find it.
- Tool: a private browser window, and Google Analytics 4. Free.
- Time: 1 minute per new link, and 10 minutes the next day.
- You will have: proof that each link reaches Google Analytics with your words.
- It worked if: every tag you used yesterday has its own row in Session source / medium, and Unassigned is under 1 in 10 visits.
- Common mistake: checking an hour later, seeing nothing, and deciding tags do not work. Reports can take 24 to 48 hours.
6. Every Sunday, count visits and signups by UTM tag and move your hours
Every Sunday, write one row per tag in your sheet: visits, and signups, enquiries or orders. After 4 Sundays, stop the tags that brought nothing and give their hours to the tag that brought the most.
You need your signup, enquiry or order set up as a key event first. If it is not, do it today with conversion tracking; without it, you can see visits by tag but not which ones turned into customers.
- Open Traffic acquisition, set the date to the last 7 days, and change the first column to Session source / medium. Write down Sessions and Key events for each tag.
- Change the first column to Session campaign to compare campaigns, such as outreach against always-on.
- Add the answers to "Where did you hear about us?" from your signup form or first call. People name things no tag can see, like a friend or a podcast. This is self-reported attribution. It fills the gaps your tags leave, and the two together are your attribution.
Visits from Google search cannot carry your tags. Read those in Google Search Console and judge them on a longer clock, as in how to measure SEO success.
The rule, after 4 Sundays (about 2,800 messages and 56 posts on each channel): stop sharing on any tag with 0 signups. Move its hours to the tag with the most signups. Keep anything that brought at least 1. Visits alone decide nothing: a post that brings 200 visits and 0 signups loses to messages that bring 40 visits and 3 calls. If a tag brings visits but nobody signs up, the problem may be the page, not the channel: fix it with the SaaS website guide or the Shopify store guide.
If you run a D2C store: also check Shopify. Go to Analytics, then Reports, filter Category to Marketing, and open Sales attributed to marketing, which lists sales by UTM campaign. For one order, open it, click View conversion details, then View full sessions; the tags can take up to 48 hours to show. Then compare each tag's sales with its ad spend using your break-even ROAS.
If you run a B2B company: Google Analytics sees the enquiry but not the deal 3 months later. Save the tags with each enquiry using hidden fields in your form (Tally's are free), and copy them into your CRM with the deal. The full method is in how to track which channel brought each deal.
If you run a SaaS: count trials and paying users per tag, not only signups. A tag that brings signups who never use the product is not your best tag; check it against your activation rate.
- Tool: Google Analytics 4, Google Sheets, and Shopify Analytics if you sell on Shopify.
- Time: 30 minutes every Sunday.
- You will have: one row per tag per week, and a clear answer on where your customers come from.
- It worked if: every signup, enquiry or order this week has a tag or a "where did you hear about us" answer next to it.
- Common mistake: judging after one week or 50 messages. At this size, one week of numbers is noise. Wait for 4 Sundays.
Once you know which tag brings customers, work out what each customer costs on it, and bring the sheet to your monthly marketing review. If one channel clearly wins, choose the next one to add only after it is full, and fit the hours into your week.
See it done: Quillfox after 4 Sundays
4 Sundays, by tag
| Tag (source / medium, campaign) | Visits | Calls booked | New clients |
|---|---|---|---|
| linkedin / social, always-on | 212 | 3 | 0 |
| linkedin / social, outreach | 96 | 4 | 1 |
| cold-email / email, outreach | 61 | 1 | 0 |
| newsletter / email, always-on | 25 | 1 | 0 |
| reddit / social, always-on | 38 | 0 | 0 |
The decision: stop putting links in Reddit answers and move those hours into more LinkedIn messages. Keep the posts, cold email and the newsletter, since each brought at least 1 call.
Why it works: It moves hours by calls booked, not visits: LinkedIn posts brought the most visits, but LinkedIn messages brought the most calls and the client.
Your UTM checklist for the next 4 weeks
0 of 11 done
Work through this list with an AI assistant
It drafts the work and keeps track of what is done.
Frequently asked questions
- Why do my UTM links show as Unassigned in GA4?
Usually the medium is a made-up word, such as "newsletter" or "show-notes", and the source is not a site Google knows either. Google Analytics only sorts visits into channels by its own lists. Use
socialfor social posts and messages,emailfor email,referralfor other sites, andpaid-socialorcpcfor ads. New visits land in the right channel once you fix the link.- Are UTM parameters case sensitive?
Yes. Google Analytics treats
utm_source=LinkedInandutm_source=linkedinas two different sources, so your numbers split across two rows. Use lowercase for every tag, every time. The sheet formula in step 2 changes everything to lowercase for you.- Do I need UTM parameters on Google Ads?
No. Leave auto-tagging on in Google Ads and link it to Google Analytics. Google Analytics uses Google's own click tag before your UTM tags, so tags you add by hand are ignored for source and medium. Do add tags to Meta ads, LinkedIn ads and Reddit ads.
- Can I use UTM parameters on a QR code?
Yes. A QR code only holds a link, so build the tagged link first, then turn it into a QR code. Google's Campaign URL Builder shows one for each link it makes. Use the event, flyer or card as the source and
referralas the medium. Scan it once with your phone before you print anything.- Should I tag links that ChatGPT shows to people?
You cannot, and you do not need to. ChatGPT adds
utm_source=chatgpt.comto the links in its answers by itself, and Google Analytics also has an AI Assistant channel. To count those visits and check whether ChatGPT names you, follow how to track AI traffic and ChatGPT mentions.
Sources
- 1.[GA4] Collect campaign data with custom URLs — Google Analytics Help, checked 12 October 2026
- 2.[GA4] Default channel group — Google Analytics Help, checked 12 October 2026
- 3.[GA4] Traffic-source dimensions, manual tagging, and auto-tagging — Google Analytics Help, checked 12 October 2026
- 4.[GA4] Traffic acquisition report — Google Analytics Help, checked 12 October 2026
- 5.[GA4] Realtime report — Google Analytics Help, checked 12 October 2026
- 6.Campaign URL Builder — Google Analytics demos and tools, checked 12 October 2026
- 7.About auto-tagging — Google Ads Help, checked 12 October 2026
- 8.Marketing reports — Shopify Help Center, checked 12 October 2026
- 9.Conversion summary — Shopify Help Center, checked 12 October 2026
- 10.Hidden fields — Tally, checked 12 October 2026
- 11.Automatic UTM parameters — Kit Help Center, checked 12 October 2026
- 12.Dynamic UTM tracking — Microsoft Learn (LinkedIn Marketing API), updated 17 August 2026
- 13.Does Safari strip click IDs (gclid, fbclid)? — Able CDP, 23 August 2026
- 14.UTM parameters not working in Google Analytics 4? Here are the solutions — Analytics Mania, 20 November 2025
- 15.Campaign tracking in Google Analytics 4 using UTMs — Loves Data, updated 11 September 2025
- 16.Why ChatGPT traffic shows as direct in GA4 — Clickport, data from April 2026, checked 12 October 2026
Next article to read
How to calculate CAC and payback periodOnce you know where buyers came from, work out what each one cost.Read it nextRelated guides
- How to set up conversion trackingSet up conversion tracking in an afternoon: pick the one action that makes you money, count it as a key event in free Google Analytics 4, test it with a real conversion, save where every customer came from, and add Google, Meta or LinkedIn tags only before you spend on ads.
- How to track which channel brought each dealB2BComing soon
- How to track AI traffic and ChatGPT mentionsTrack AI traffic and ChatGPT mentions on a small site: add one AI row to Google Analytics, Bing's free AI citation report and an AI answer to your "where did you hear about us" question today, ask your buyers' 20 questions in ChatGPT, Perplexity and Google AI Mode every day, and count visits, signups and mentions every Sunday.
- How to run a monthly marketing reviewComing soon
Guides that link here
- How to track AI traffic and ChatGPT mentions
- How to set up conversion tracking
- How to get on the "best of" lists AI tools cite
- How to get your company recommended by ChatGPT as a supplierB2B
- How to get your products recommended by ChatGPTD2C
- How to do LinkedIn outreach
- How to build a free tool that brings in leadsSaaS
- How to get booked as a podcast guest
- How to make short-form videos for your business
- How to plan a content calendar
- How to repurpose content across platforms
- How to start a YouTube channel for business
- How to use AI for content creation
- How to write a case study
- How to build an email list for free
- How to grow a newsletter from scratch
- How to set up Klaviyo flows for a new storeD2C
- How to write an email popup that isn't just a discountD2C
- How to fix a SaaS launch that got zero signupsSaaS
- How to get beta users for your startupSaaS
- How to get customers online for free
- How to get people to try your product
- How to get traffic to a new website for free
- How to get your first 100 SaaS usersSaaS
- How to get your first sales on ShopifyD2C
- Why no one is buying your product, and how to fix it
- How to announce a new business on social media
- How to build a waitlist before you launch
- How to launch a B2B productB2B
- How to launch a D2C brandD2C
- How to launch a product on AmazonD2C
- How to launch on Product HuntSaaS
- How to post a Show HN on Hacker NewsSaaS
- How to submit your SaaS to directoriesSaaS
- Should you do an AppSumo lifetime deal?SaaS
- How much to spend on marketing as a B2B companyB2B
- How much to spend on marketing as a SaaS startupSaaS
- How much to spend on marketing as an ecommerce brandD2C
- How to choose marketing channels for a SaaS startupSaaS
- How to choose marketing channels for an agencyAgency
- How to choose marketing channels for an ecommerce brandD2C
- How to fit marketing into your week as a solo founder
- How to market a SaaS productSaaS
- How to market your product as a technical founderSaaS
- How to price a productD2C
- How to set a marketing budget for your agencyAgency
- How to validate a business idea without spending money
- How to calculate break-even ROASD2C
- How to calculate CAC and payback period
- Amazon PPC for beginnersD2C
- Google Shopping vs Performance Max for a small storeD2C
- How much to spend on ads
- How to fix ads that get clicks but no salesD2C
- How to make ad creatives
- How to run Google Ads for SaaS
- How to run LinkedIn ads for B2B
- How to run Meta ads for a Shopify storeD2C
- How to set up retargeting ads
- How to test Facebook ad creativesD2C
- How to get listed in integration marketplacesSaaS
- How to run a co-marketing campaign
- How to set up referral partnerships
- How to improve activation rateSaaS
- How to increase average order value on ShopifyD2C
- How to reduce SaaS churnSaaS
- How to run a sale without training customers to waitD2C
- How to turn free trials into paying customersSaaS
- How to find micro-influencers for your brandD2C
- How to get G2 reviewsSaaS
- How to get into holiday gift guidesD2C
- How to get TikTok Shop affiliates to postD2C
- How to get UGC for your brandD2C
- How to make a new store look trustworthyD2C
- How to start a referral program
- How to start an affiliate program
- How to design a pricing page
- How to do SEO for a Shopify storeD2C
- How to make an article rank higher on Google
- How to measure SEO success
- How to rank on Google Maps
- How to set up a Google Business Profile
- How to use Google Search Console
- How to write competitor comparison and alternative pages
- How to build a community around your brand
- How to build in public on XSaaS
- How to find online communities where your buyers talk
- How to get your first 1,000 followers
- How to grow on LinkedIn as a founder
- How to promote on Reddit without getting banned
- How to promote your business in Facebook groups
- How to promote your business on InstagramD2C
- How to sell on TikTok ShopD2C
- How to write a LinkedIn profile that brings in clients
- Instagram post ideas for a marketing agencyAgency
- Instagram post ideas for D2C brandsD2C
- LinkedIn post ideas for B2B companiesB2B
- Social media post ideas for SaaS companiesSaaS
- How to A/B test a landing page
- How to fix a SaaS website with traffic but no signupsSaaS
- How to fix a Shopify store with traffic but no salesD2C
- How to get more leads from a B2B websiteB2B
- How to make a website for your business
- How to reduce abandoned cartsD2C
- How to write a landing page that converts
- How to write a product description that sellsD2C
- How to write homepage copy
Cite this page
Dinesh Bypilla (2026). How to use UTM parameters. Scout7 Academy. https://scout7.ai/academy/measurement/how-to-use-utm-parameters
Written by Dinesh Bypilla, Agentic systems engineer at Scout7. Reviewed by Murali Sid. Last checked 12 October 2026.
Quote any part of this guide with a link back to this page. © 2026 Scout7.
Markdown version of this page: https://scout7.ai/academy/measurement/how-to-use-utm-parameters.md