docs
Open the app →

Google and Microsoft parallel tracking

Google and Microsoft send the visitor straight to your page and fetch the tracking URL in the background. Here is how those campaigns are set up, and the one mistake that costs money quietly.

Under parallel tracking the browser goes straight to your Final URL while the tracking URL is fetched separately, in the background. A redirect tracker is never in the path and never gets to hand the visitor anywhere.

On Google this is mandatory for Search, Shopping, Display, Video and Performance Max. There is no version of these campaigns where a redirect happens, so there is no tracking URL to paste.

an ordinary redirect campaignThe adTracking URLLanding page302?cid=google and microsoft — parallel trackingThe adLanding pagestraight to your Final URLTracking URLfetched in the background,never in the pathThe tag opens itagainst the utm_id itreads
Google and Microsoft send the visitor straight to your page and fetch the tracking URL separately, so no redirect of ours is ever in the path.

#How the campaign is set up instead

The ad points at your landing page with parameters on it, and the tag opens the click. The campaign's Tracking tab builds the whole Final URL:

https://your-lander.example/?utm_source=google_ads&utm_medium=cpc
  &utm_campaign=spring_sale&utm_content={campaignid}&utm_term={adgroupid}
  &sub3={keyword}&sub9={device}&utm_id=CAMPAIGN_ALIAS

Every part of that matters, but one part decides whether the campaign works at all.

#utm_id is the campaign

utm_id carries the campaign's alias, and it is what the tag reads to open the visit against this campaign. Everything else on that URL is detail — cost, keyword, device — that enriches the click. utm_id is what says whose click it is.

It rides in a standard UTM field on purpose: nothing on your page looks third-party, and no ad platform strips it.

Use the Final URL the Tracking tab gives you. Pasting your plain landing page address instead is the one mistake here, and it fails silently: the traffic still arrives, the page still loads, and the click is attributed to whichever campaign sharing that page was edited most recently. Wrong offer, wrong campaign, no error anywhere.

#How you would know

You would not, until now. So UTMCAP records how each visitor was identified, and the Tracking tab tells you when this is happening:

⚠ 14 visitors in the last 7 days arrived from Google Ads with no utm_id — check the Final URL below is the one in your ad.

That count is reliable because Google and Microsoft add their own click id to the landing page URL — gclid and msclkid — and nobody types those, so nobody can forget them. An arrival carrying one and naming no campaign is definitively traffic you paid for whose identity went missing. See how a visitor was identified.

#Two fixes, and use both

  1. Put the generated Final URL in the ad. That is the actual fix.
  2. Add the campaign tag to the page, so the page names the campaign even if the URL loses it:
<script src="https://app.utmcap.com/t.js?k=YOUR_SITE_KEY&c=CAMPAIGN_ALIAS" async></script>

The second only works on a page one campaign uses. One page carries one tag, so it can name only one campaign — a shared page has to rely on utm_id.

It is also why the warning above can appear at all: the campaign tag is what lets a visit be recorded when the URL has lost its utm_id, and that recorded visit is what gets counted as an orphan. Without it there is no click and no warning — the traffic is simply missing. But the campaign tag is not a substitute for fixing the ad, because it does not carry the cost: a visit is charged only where the URL named the campaign. So the tag keeps the visitor, the routing and what they turn out to be worth; the Final URL is what keeps the spend.

#The call to action

On these campaigns use #utmcap on your button, not a pasted /out/{utmcap_id} URL:

<a href="#utmcap">Get started</a>

{utmcap_id} is a macro out of a tracking URL, and a tracking URL is a redirect — which never happens here, so it is deliberately left unfilled. #utmcap is the tag's own hand-off and works on every arrival. See the call to action.

#Counting organic visits

The Tracking tab has a Count organic visits switch beside the campaign tag. It adds c=YOUR_ALIAS to the snippet, and that changes what the tag does for a visitor who arrives with no utm_id at all — organic search, a direct type-in, a link somebody shared. Without c= those visitors are not this campaign's and no click is opened for them. With it, a click is opened and attributed here.

It flatters the campaign, and you should know how. Those clicks cost nothing, because cost arrives in the URL macros and an organic visit has none. So the campaign gains free clicks and free conversions: CPC falls, CPA falls, and both read better than the campaign is actually performing. That is fine if you want the page's organic traffic counted against this campaign — and misleading if you are comparing campaigns on CPA.

Only on a page this campaign alone uses. A tag names one campaign, so on a page two campaigns send traffic to, every anonymous visitor would be attributed to whichever campaign's tag is on it.

#Why the alias is on the page at all

This campaign names itself with utm_id on the URL, and a URL can lose it — the plain landing page address pasted into the ad platform instead of the generated Final URL, or edited afterwards. The traffic then arrives with nothing identifying it, and is routed by whichever campaign shares that page and was edited most recently: the wrong offer, and the click counted against a campaign that never bought it.

Baked into the page, the alias cannot be lost that way. The URL still wins wherever it names a campaign, because it is written per click — so the alias is a floor, not an override.

#Keep the Final URL for the ad platform

The tag opens a visit for anyone who arrives with utm_id on the address, whether or not a platform sent them, and the campaign's cost is applied to each one. Forwarded in a message or pasted into a chat, the Final URL reports clicks you never bought and spend you never paid.

A redirect link has the same effect. It just looks like a tracking link, so it tends not to be shared.

#If you use the tracking template

The template ends in lpurl={lpurl}. Google fills {lpurl} with the ad's Final URL, and the tracking link goes there and nowhere else — it skips your paths, rotation and landers entirely. Google requires this of any tracker in a template: the link has to say where it goes, and then go there.

It only goes to a site you have already chosen: the site your tracking domain belongs to (track.example.com can send to example.com), or one of the campaign's offers, landers or its fallback. Anything else is refused, not redirected, so nobody can use your tracking domain to bounce visitors somewhere you did not choose.

Copied the template before 20 October 2026? Copy it again. The old one ended in lp={lpurl}, which nothing read, so the link named your page and the tracker routed by its own rules instead.

#What you cannot do

Rotating landing pages. Splitting traffic between landers needs something in the path to choose between them, and under parallel tracking there is nothing in the path. The ad names one page and that is the page.

A tracking template that shares state with the page. The template is fetched on your tracking domain while the visitor is already on the landing page. Unless the two are the same site, everything the tracking domain knows is third-party to the page — and third-party is what browsers discard. The Tracking tab checks this and tells you whether a template can do anything at all for your setup.

Tracking tips by email

Practical tips on tracking, attribution and ad costs, from the people who build UTMCAP.

Unsubscribe any time. Privacy policy