Quick answer
For TikTok Ads, tag every destination URL with utm_source=tiktok, utm_medium=paid-social (or cpc), and a clear utm_campaign, then add TikTok's dynamic macros like __CAMPAIGN_NAME__ and __AID__ to utm_content for ad-level detail. Build and track these for free with Track Link's UTM builder at /tools/utm-builder.
TikTok Ads Manager reports clicks its own way, but the moment a user taps your ad, TikTok's in-app browser strips the referrer, so your site analytics often label that traffic as "direct." UTM parameters are how you fix attribution at the source. This page covers the exact conventions for TikTok Ads, dynamic macros for ad-level detail, and copy-paste examples.
TikTok's in-app browser drops the Referer header on outbound taps, so GA4, Plausible, and most analytics tools bucket paid TikTok clicks as direct/none unless the source is encoded in the URL itself. UTM parameters solve this: they live in the destination URL and survive the redirect. They also separate paid TikTok from organic TikTok (bio links, Spark Ads boosting creator videos), which native reporting blends together. And because iOS ATT and strict-mode browsers undercount the TikTok Pixel, a UTM-tagged tracked link gives you a deterministic, first-party click count to reconcile against Ads Manager. Without UTMs you are trusting one undercounted number; with them you get two sources that cross-check.
Use utm_source=tiktok (always lowercase, since warehouses key on casing and TikTok vs tiktok creates duplicate sources). For utm_medium, pick one convention and never mix it: paid-social is the most descriptive, though cpc keeps GA4's default channel grouping happy. Set utm_campaign to a stable campaign name that matches what you typed in Ads Manager, e.g. spring-launch-2026. Reserve utm_content for the variable that changes per ad or ad group, the creative or audience. Keep utm_term for keyword-style targeting only, which most TikTok campaigns can skip. Decide these rules once and document them so every campaign tags identically.
Hardcoding utm_content per ad does not scale. In Ads Manager, open the ad's Destination Page settings and add a URL Parameter, or paste macros directly into your tracked URL. TikTok replaces them at click time: __CAMPAIGN_NAME__, __AID_NAME__ (ad name), __AID__ (ad ID), __CID_NAME__ (ad group), __PLACEMENT__, and __CAMPAIGN_ID__. A practical pattern: utm_content=__AID_NAME__ so every creative variant self-labels, plus a separate parameter like ttclid for the click ID. Track Link captures whatever TikTok fills in, so you see exact ad-level attribution without building a URL by hand for every creative. TikTok also appends its own tt_medium and tt_content params on some placements; these are separate from yours and do not conflict.
Use the free UTM builder at /tools/utm-builder to generate consistent TikTok Ads URLs, then wrap them as Track Link tracked links so every click is logged with country, region, device, browser, and the full UTM set, on the free plan (10 links, 2,500 clicks/month, no credit card). Run Track Link alongside the TikTok Pixel and Events API: Track Link gives you the deterministic click count, the Pixel fills in conversion events. Use the same utm_campaign on both so the two sources reconcile cleanly. When Ads Manager and your tracked clicks disagree, the gap is usually iOS ATT or pixel blocking, and the first-party number is the one to trust for click volume.
Copy-paste conventions for common TikTok Ads campaigns.
FAQ
Use utm_source=tiktok in lowercase, since analytics warehouses key on casing and a mix of TikTok and tiktok shows up as two separate sources. For utm_medium, use paid-social for the clearest reporting, or cpc if you want GA4's default channel grouping to file it under Paid Social automatically. Pick one and apply it to every TikTok ad so your data stays consistent.
Hardcoding a unique utm_content per ad does not scale, so use TikTok's dynamic macros. In Ads Manager add a URL Parameter or paste macros like __AID_NAME__ (ad name), __AID__ (ad ID), __CID_NAME__ (ad group), and __PLACEMENT__ into your URL. TikTok substitutes the real values at click time. Put __AID_NAME__ in utm_content and Track Link captures the exact ad behind every click automatically.
TikTok's in-app browser strips the Referer header on outbound taps, so GA4 sees no referrer and labels the visit direct/none. This is intentional on TikTok's side and there is no browser-level fix. The solution is to encode the source in the URL with UTM parameters: utm_source=tiktok and utm_medium=paid-social survive the redirect, so the click is correctly attributed to TikTok regardless of the missing referrer.
No. TikTok preserves UTM parameters and other query strings on ad destination URLs; the full URL resolves intact when a user taps the ad. TikTok does append its own tt_medium and tt_content parameters on some placements for internal tracking, but those are separate from your UTMs and do not overwrite or conflict with them. Track Link records both without collision.
Use Track Link's free UTM builder at /tools/utm-builder to generate consistent, correctly tagged TikTok Ads URLs, then save them as tracked links. Every click is logged with country, device, browser, and the full UTM set on the free plan: 10 links and 2,500 clicks per month with no credit card. Run it alongside the TikTok Pixel using the same utm_campaign on both so click counts and conversions reconcile.
Both are valid; the choice depends on your reporting. cpc maps to GA4's built-in Paid Social channel grouping with no extra configuration, so dashboards classify the traffic automatically. paid-social is more human-readable and explicit about the channel. The only rule that matters is consistency: choose one convention, document it, and use it on every TikTok campaign so you never split one source across two mediums.
Build tagged links with the free UTM builder, then track clicks, sources, and conversions in real time. 10 links and 2,500 clicks/month free — no credit card.
Start tracking free