Google Ads and Meta ads need opposite UTM setups, and getting them backwards is the most common paid-tracking mistake. Google auto-tags every click with a gclid, so you should not add manual UTMs, doing so actually breaks your cost data. Meta does not auto-tag at all, so you must add manual UTMs or the traffic shows up as direct. This post covers how to tag each one correctly.
If you are new to the tags themselves, UTM parameters explained is the primer and the free UTM builder generates the tagged URLs. This piece is specifically about the two big ad platforms, where the rules diverge.
Google Ads: Leave Auto-Tagging On
Google Ads has its own click identifier, and it is better than a UTM for Google's own data.
With auto-tagging enabled, Google appends a gclid parameter to every ad click. GA4 reads that gclid to set the source to google and the medium to cpc, and crucially to pull in the cost, keyword, and campaign data that only Google has. If you add manual utm_source and utm_medium on top, they override the gclid attribution and GA4 loses the cost data. So the rule for Google Ads is simple: leave auto-tagging on, and do not add manual UTMs to the final URL.
The one exception is when you need Google Ads campaign data somewhere GA4 is not, like a CRM that cannot read gclid. Then you add UTMs as well, accepting that GA4 will lean on them. For most teams, that exception does not apply, and the cleanest Google setup is gclid alone.
Meta Ads: Manual UTMs with Macros
Meta is the mirror image. There is no auto-tagging, so a Meta click with no UTMs lands in GA4 as direct or unassigned traffic, and the campaign is invisible.
The fix is the URL parameters field in Ads Manager, set at the ad-set or ad level, filled with UTMs that use Meta's dynamic macros so the values populate themselves:
utm_source=facebook&utm_medium=paid_social&utm_campaign={{campaign.name}}&utm_content={{ad.name}}&utm_id={{campaign.id}}
The macros in double braces are replaced by Meta at delivery time, so utm_campaign fills with the real campaign name without you typing it per ad. Set the source to facebook or instagram, keep the medium consistent (paid_social is common), and let the macros handle the rest. Enforce lowercase and a fixed vocabulary, because a mix of Facebook and facebook splits the reports.
The iOS Privacy Angle
Here is a reason to keep UTMs even where a platform tags for you.
Apple's Link Tracking Protection strips known click identifiers, gclid and fbclid among them, from URLs in some contexts like Mail and private browsing. It does not strip standard utm_ parameters. So on traffic where Apple has removed the platform identifier, a UTM you added still carries the attribution through. For campaigns aimed at iOS-heavy audiences, that resilience is worth the extra tag, and it is why the two systems are complementary rather than competing.
If you want the tagged links to also be short, branded, and clickable in an ad or a bio, Elido's campaigns group tagged links and shorten them, and you can start on the free plan.
Common Mistakes That Break Ad Tracking
Three errors account for most broken paid-ads reporting.
The first is adding manual UTMs to Google Ads on top of auto-tagging, which overrides the gclid and wipes out cost data in GA4. Pick one, and for Google pick gclid. The second is forgetting UTMs on Meta entirely, which drops the traffic into the direct or unassigned bucket where it is invisible. Meta needs them every time. The third is inconsistent values across platforms and campaigns: facebook here, Facebook there, paid_social in one place and paid-social in another. UTM values are case-sensitive and literal, so each variant becomes its own row and the report fragments. Lock a lowercase taxonomy, write it down, and reuse it, because the tool cannot fix naming drift and a report built on top of it cannot either.
How to Check It's Working
Do not assume the tags fired; verify them.
Click your own live ad, or a preview, and read the URL that lands in the address bar. For Google, you should see a gclid appended and no stray UTMs. For Meta, you should see your utm_ values with the macros filled in, not the literal double-brace text. Then open GA4's Traffic Acquisition report a day later and confirm the source and medium read the way you intended: google / cpc for Google, facebook / paid_social for Meta, since GA4 maps the values into its campaign reports. If a campaign is landing in direct or unassigned, a tag is missing or malformed, and this five-minute check catches it before a whole flight reports wrong.
A Quick Reference
The whole thing fits in one table.
| Platform | Tagging | What to do |
|---|---|---|
| Google Ads | Auto-tag (gclid) | Leave auto-tagging on; do not add manual UTMs |
| Meta Ads | None | Add manual UTMs with dynamic macros in URL params |
| None | Add manual UTMs manually | |
| Email, etc. | None | Add manual UTMs; shorten the result |
Get those two big ones right and the rest follows the same manual pattern: any channel that does not auto-tag gets manual UTMs, and every long tagged URL gets shortened so it stays usable in a post, a bio, or on print. For the naming discipline that keeps all of it clean, UTM naming conventions is the companion, and track UTM campaigns end-to-end shows where the data lands.
Related on the Blog
Häufig gestellte Fragen
Should I add UTM parameters to Google Ads?
Usually no, not manually. Google Ads auto-tagging appends a gclid that GA4 reads to set the source and medium and pull in cost data. Adding manual UTMs on top overrides that and you lose the Google Ads cost figures in GA4. Leave auto-tagging on. Add manual UTMs only when you need the campaign data in a tool that cannot read gclid, like some CRMs.
Do I need UTM parameters for Meta ads?
Yes. Meta does not auto-tag, so without manual UTMs your Meta traffic shows up as direct or unattributed. Add UTMs in the URL parameters field at the ad-set or ad level, using Meta's dynamic macros so the campaign and ad names fill in automatically. This is the opposite of Google Ads, where manual UTMs cause problems.
What is the difference between gclid and UTM parameters?
A gclid is Google's own click identifier, added automatically by auto-tagging, and it carries Google Ads cost and campaign data into GA4. UTM parameters are open, manual tags that any analytics tool can read. gclid is richer but Google-only and Google-readable; UTMs are simpler but universal. Serious paid-search setups run gclid auto-tagging and add UTMs only where a non-Google tool needs them.
Do UTM parameters survive iOS Link Tracking Protection?
Yes. Apple's Link Tracking Protection strips known click identifiers like gclid and fbclid from URLs in some contexts, but it leaves standard utm_ parameters intact. That is one practical reason to keep UTMs on campaigns even where a platform auto-tags: the UTM survives where the platform identifier may not.
What UTM values should I use for Facebook and Instagram ads?
A common convention is utm_source=facebook (or instagram), utm_medium=paid_social, and utm_campaign, utm_content, and utm_id filled from Meta's dynamic macros like {{campaign.name}} and {{ad.name}}. Keep everything lowercase and consistent. The exact source values are your choice; consistency across every campaign matters more than the specific words.
Elido testen
URL einfügen, kurzer Link in Sekunden
Kein Konto nötig. Link bleibt 30 Tage aktiv. Konto erstellen, um ihn dauerhaft zu behalten.
Kostenlos, keine Anmeldung erforderlich · 2 pro Tag