Skip to content

Why your form loses the click ID – and what it costs you

On single-page and page-builder sites the gclid and fbclid are usually gone before the form mounts. Here is exactly where they disappear, how to check whether yours are, and what server-side attribution changes.

  • 6 min read

A click ID is the parameter an ad platform appends to your landing page URL to identify one specific click: gclid for Google Ads, fbclid for Meta, msclkid for Microsoft Advertising, ttclid for TikTok. It is the only reliable link between a lead you recorded and the ad spend that produced it. On most Webflow, Framer and single-page sites that parameter is gone by the time the form is submitted, and the conversion that reaches Google Ads or Meta arrives with nothing attached to it.

The failure is silent. Leads still arrive, the form still works, and the dashboard still fills up. What breaks is the platform’s ability to attribute a conversion back to the click that caused it – so the algorithm optimizes against a partial picture, and a campaign that is working can look like one that is not.

Where does the click ID actually disappear?

Three moments account for nearly all of it, and they are all before the form is submitted.

Client-side routing rewrites the URL. A visitor lands on /fleet-tracking?gclid=EAIaIQob..., clicks through to /pricing, then to /contact where the form sits. On a single-page site none of those are full page loads: the router replaces the URL in place, query string included. A script that reads window.location.search when the form is submitted reads /contact – no parameters, nothing to send.

The form mounts after the parameters are already gone. Page builders inject form containers late, and React and Framer hydrate after the first paint. A form that starts reading the URL when it renders has already missed the only moment the URL was correct.

The browser blocks the tag that was supposed to record it. Ad blockers, Safari’s Intelligent Tracking Prevention and consent tools all stop browser-side tags from firing. When that happens there is usually no record that anything failed – the conversion simply never arrives, and nothing in the ad platform distinguishes “no conversion” from “conversion not received”.

How do you check whether yours are being lost?

This takes about five minutes and needs no tooling.

  1. Open your own landing page with a fake click ID appended: ?gclid=test123&utmsource=test&utmmedium=cpc.
  2. Navigate to the page holding your form the way a visitor would – by clicking your own navigation, not by typing the URL.
  3. Look at the address bar. If the parameters are no longer there, anything reading the URL at submit time is reading nothing.
  4. Submit the form with a recognizable test value.
  5. Open the resulting lead wherever it lands – your inbox, your CRM, your form tool’s dashboard. Search it for test123.

If test123 is not in the record, the click ID is not reaching your ad platforms either. A lead that arrives without it can still be a good lead; it just cannot teach Google or Meta anything about which click to buy more of.

What does server-side attribution change?

Server-side tracking and server-side attribution are not the same thing, and the distinction is the whole point.

Server-side tracking describes how a conversion is sent: from a server rather than from the visitor’s browser, so an ad blocker cannot stop it. Server-side attribution describes what is in it – whether the conversion still carries the campaign context it started with. Sending a conversion server-side with no click ID attached is more reliable delivery of a less useful event.

Getting both right means capturing the context at the only moment it exists, and sending it from somewhere a browser extension cannot reach:

Browser-side tag Server-side attribution
Reads the URL at submit time on first page load
Survives client-side routing no yes, read back from storage
Blocked by ad blockers and ITP frequently no
Evidence it was delivered none the platform’s own response
Deduplicated against the pixel not usually yes, via a shared event ID

What does a complete captured payload look like?

A conversion worth sending carries more than one identifier. Eflios captures the following on the first load a browser makes, and reads it back when the visitor eventually submits:

  • utmsource, utmmedium, utmcampaign, utmterm, utm_content – the campaign chain, including the creative and keyword rather than only the campaign name
  • gclid, fbclid, ttclid, msclkid – the click IDs each platform matches on
  • landing_url and referrer – where the visitor arrived and what sent them
  • firsttouch and lasttouch, stored as separate facts, so a paid click that closed an organic visitor does not erase where that visitor originally came from
  • the consent state granted at the time, stored on the submission itself

Storing first and last touch separately matters more than it sounds. Blending them produces one attribution number that is defensible to nobody: the organic discovery that started the relationship disappears, or the paid click that closed it does.

Why is the order of operations the part that matters?

A form tool that fires a conversion before it stores the lead will lose that lead the moment Meta returns a 500.

Eflios commits the submission to the database first, and only then queues delivery to each destination. Delivery becomes a separate fact per destination rather than a property of the lead: Meta delivered, Google Ads delivered, the webhook retrying on attempt 2 of 5, the email skipped because marketing consent was not granted. The lead is safe in all four cases, and each destination carries the platform’s own response so “did it actually fire” is a question with an answer.

That ordering is also what makes consent enforceable rather than aspirational. Capture waits for analytics consent. Marketing destinations fire only when marketing consent was granted, and a destination that correctly did not fire records the reason instead of reading as a failure – which is what an audit asks for.

What does this cost to build yourself?

Assembling the same thing by hand is a known quantity: a dataLayer push, a server-side Google Tag Manager container, an endpoint that hashes personal data to Meta’s specification, event IDs that deduplicate against the browser pixel, a retry queue, and somewhere to look when a lead does not arrive.

Agencies charge roughly €500–2,000 to set that up once, or it costs about a developer week. Neither number includes keeping it running when an access token expires or a platform changes a required field. That is the comparison Eflios is priced against – not against a free form builder, which competes on how the form looks rather than on what happens to the data after submit.

Where to start

Run the five-minute test above on your own highest-spend landing page. If the click ID is not in the lead record, the fix is not a better form – it is capturing the campaign context on first load, storing the lead before anything fires, and sending the conversion from a server with the click ID still attached.

Questions

Asked about this

What is a click ID?

A click ID is a parameter an ad platform appends to your landing page URL to identify one specific click. Google Ads uses gclid, Meta uses fbclid, Microsoft uses msclkid and TikTok uses ttclid. It is the only reliable link between a conversion you record and the ad spend that produced it.

Why do UTM parameters disappear on Webflow, Framer and single-page sites?

Client-side routing rewrites the browser URL without a full page load. When a visitor moves from the landing page to another route, the query string is replaced. Any script that reads the URL at submit time – rather than on the first load – reads a URL that no longer has the parameters in it.

Is server-side tracking the same as server-side attribution?

No. Server-side tracking is how a conversion is sent, from your server instead of the browser. Server-side attribution is whether that conversion still carries the campaign context it started with. Sending a conversion server-side with no click ID attached is more reliable delivery of a less useful event.

Do I still need the Meta pixel if I send conversions through the Conversions API?

Yes, in most setups. Meta recommends sending both and deduplicating them with a shared event ID, so that a browser event blocked by an ad blocker is covered by the server event, and an event that arrives twice is only counted once.

Early access

Eflios is the product behind this post.

Attribution captured on first load, the lead stored before anything fires, clean server-side conversions with a log that proves it. Accounts aren’t open yet – leave your email and you’ll hear on the day they are. See how Forms works

One email when Eflios opens – nothing else, no newsletter. Ask us any time and the entry is deleted.