Skip to content
Browse documentation

Final URL suffix + SDK

Track Google Ads and Microsoft Advertising clicks without any redirect by putting the parameters in the Final URL suffix and recording the click with the landing-page SDK.

Last updated 5 min read

On this page

In this setup there is no tracking template and no redirect. Google Ads (or Microsoft Advertising) appends your parameters to the landing page through the Final URL suffix, and the landing-page SDK records the click from the page itself. Use it when:

  • your tracking domain is not certified by Google yet (the template builder defaults to this mode then);
  • you do not want any third-party request in the click path.

It works with any tracking domain, certified or not.

What you give up#

Tracking templateFinal URL suffix + SDK
Click recordedby the tracker, on every click (also with JavaScript off)by the SDK, only when the page loads the script
Needs code on the landing pageno (unless you attribute on-site conversions)yes, on every landing page
Google certificationrequired for accounts new to click trackers since 28 Aug 2023not needed
ValueTrack valuesfrom the tracking requestfrom the landing-page URL

Step 1 — Generate the suffix#

  1. Open Google Ads → Tracking template.
  2. Choose the platform, campaign type, tracking domain and Link key (Whole workspace, One offer or Offer + affiliate). The SDK needs an offer to record a click: with Whole workspace, pick it under Offer for the SDK (see the note below).
  3. Select the ValueTrack parameters.
  4. In the result column choose Final URL suffix + SDK.
  5. Copy the Final URL suffix and the Landing-page SDK · HTML snippet.

The suffix contains the same parameters as the template, without force_transparent and url=:

URL
gclid={gclid}&campaignid={campaignid}&adgroupid={adgroupid}&creative={creative}&keyword={keyword}&matchtype={matchtype}&network={network}&device={device}

For the Hotel campaign type the suffix also gets adgroupid={adgroupid}.

Step 2 — Paste the suffix#

  1. In Google Ads open Admin → Account settings → Tracking (or a campaign's Settings → Campaign URL options).
  2. Paste the suffix into Final URL suffix.
  3. Leave Tracking template empty.

In Microsoft Advertising use Settings → Account level options, the Final URL suffix field, and enable auto-tagging of msclkid.

Step 3 — Install the SDK#

Add the snippet to every landing page, in the <head> or before </body>:

HTML
<script async
  src="https://trackcrown.com/sdk.js"
  data-offer="Kx7Lm2Q"
  data-aff="Pq3Rt8z"></script>

data-offer is always present; data-aff appears for Offer + affiliate keys; data-param appears when the workspace's click ID parameter is not click_id.

If the snippet was changed by hand and the page records no click, the SDK says why on the browser console (a warning prefixed with the SDK object name ArcTrack:, for example … answered HTTP 400 "offer required" with a hint to add data-offer), and ArcTrack.error() returns the same text.

How the click is recorded#

When the page loads, the SDK:

  1. looks for a click ID in the URL (data-param, click_id, transaction_id or tid) — none in this mode;
  2. finds gclid (or gbraid / wbraid) and asks the tracking domain for a click recorded with it (POST /lp);
  3. when no click exists — always the case in this mode — the tracking domain creates a direct click for data-offer (and data-aff: the partner must be active and, unless the offer is public, approved for it), maps the page URL's query parameters (your suffix values) onto the click exactly like a tracking link, and returns its click ID;
  4. stores the click ID on your site for 30 days (local storage and the first-party atk_cid cookie) and decorates links.

Conversions fired with the SDK call ArcTrack.conversion(…), a postback carrying the stored click ID, or a postback with gclid= attribute to that click. Full behaviour: SDK reference.

Suffix rules#

The linter checks the suffix as you build it (Suffix OK. when clean):

CodeSeverityRule
suffix_leading_separatorerrorMust not start with ?, & or # — the ad platform adds the separator.
suffix_has_lpurlerror{lpurl} and its variants are not allowed: the suffix is appended to the final URL itself.
suffix_has_ignoreerror{ignore} is not allowed in a suffix.
unknown_tagerror (warning for Microsoft)A tag the platform does not support.
space_or_control_charerrorSpaces or control characters.
stray_braceerrorUnbalanced { or }.
length_over_2048errorLonger than 2,048 characters.
suffix_has_url_paramwarningurl= in a suffix lands on the landing page, not on the tracker.
too_many_custom_paramswarningMore than 8 different custom parameters ({_name}): Google Ads and Microsoft Advertising hold at most 8 per campaign, ad group, ad or keyword, so the others are inserted empty unless another level sets them.

You can lint a suffix through the API too: POST /api/v1/google-ads/lint with {"suffix": "…"}.

Final URLs with a #fragment#

Google inserts the suffix before the #fragment, so https://shop.example.com/sale#top becomes https://shop.example.com/sale?gclid=…#top. The SDK reads the query normally.

Switching to a tracking template later#

When the domain becomes Certified:

  1. Build the template on the same link key and paste it into Tracking template.
  2. Empty the Final URL suffix field in Google Ads.
  3. Keep the SDK on the landing pages — with parallel tracking it joins the background click by gclid instead of creating a direct click, so on-site conversions keep attributing. Use an offer key (One offer or Offer + affiliate) for the template: clicks of a Whole workspace template carry no offer, and their SDK ArcTrack.conversion() calls are refused (known issue, see Landing-page SDK).

See also: Parallel tracking · Tracking template builder.

Something unclear or missing in this article?Tell us