Product docs

Install the hop in one field.

Drop Clickerwave into the Google Ads Tracking template. Encode each landing in em_dest. Parallel-tracking PINGs stay on the 204 lane. Shoppers stay on the Final URL.

Sample hop

Test an expanded hop, not the template macro

Open a hop a browser can follow. Do not use the Tracking template macro or a bare /click path as a landing.

Use this to test

Expanded sample hop

https://clickerwave.com/click?em_dest=https%3A%2F%2Fexample.org%2F

Browser GET follows em_dest with a server-side 302 to https://example.org/.

Do not open as a landing

Template macro or a bare path

https://clickerwave.com/click?em_dest={lpurl}

https://clickerwave.com/click

A literal {lpurl} or a missing em_dest returns empty HTTP 400. We never 302 those requests to this host.

Request Response
GET /click?em_dest=https%3A%2F%2Fexample.org%2F 302 → https://example.org/ · no cookies
GET / or /click?em_dest=… · any User-Agent, including Google-Ads-Compliance Empty 302 → https://example.org/ · no cookies · PING is not logged
GET /click · no valid em_dest · User-Agent: Google-Ads-Compliance 204 No Content · empty body · no cookies · no click_events
GET /click or literal {lpurl} in em_dest Empty 400 · never a hop to this host
em_dest on clickerwave.com itself Empty 400 · no backend-only landing

Google Ads tracking template

Paste this into the campaign or account Tracking template—not the Final URL. Prefer {lpurl} so Google expands the landing. Destinations must be HTTPS hostnames. Advertisers keep this macro in the Tracking template; do not open it as a webpage.

https://clickerwave.com/click?em_dest={lpurl}

If this literal string is opened in a browser, em_dest is invalid and the server returns empty 400.

Interactive builder

Type any HTTPS landing to preview the exact tracking link for this host.

Generated tracking URL

Resolved final URL

Successful hops on this host

Public numbers count 302 hops only. Validation failures (missing or invalid em_dest) stay on Audit.

Successful hops

19

Last hop host

example.org

Last successful hop

2026-09-11 06:27:03

Canonical template

Tracking URL

https://clickerwave.com/click?em_dest=https%3A%2F%2Fexample.org%2F

Decoded destination

https://example.org/

em_dest is the sole redirect instruction. What you encode is what the browser receives after validation.

HTTP behavior

Request

GET /click?em_dest=https%3A%2F%2Fexample.org%2F

Browser response

302 Redirect → https://example.org/

Automated PING with the same em_dest

302 Redirect → https://example.org/ (empty body, no cookies)

Missing or invalid em_dest returns empty HTTP 400 for browsers and 204 for Google-Ads-Compliance. em_dest also works on /. Hops never set cookies.

Operational guardrails

  • Only absolute https:// hostname URLs pass (no IP addresses or deeplinks).
  • Avoid chained blind redirects after Clickerwave—each hop must stay visible.
  • Confirm the same 302 on Audit after you test an expanded hop.

Google Ads parallel tracking: follow em_dest, then 204

Under Google Ads parallel tracking, shoppers go to the campaign Final URL. This measurement URL is loaded in the background. If that request carries a valid em_dest, the server follows it with an empty server-side 302—any User-Agent, including Google-Ads-Compliance. That is the published transparency rule.

A Google-Ads-Compliance request with no followable hop returns 204 No Content: empty body, no cookies, no click_events write. Humans with a missing or invalid hop receive empty HTTP 400. We never 302 those requests to this host.


// Clickerwave Compliance Protocol
$target = $request->query('em_dest');
if (/* valid HTTPS hostname in em_dest */) {
    return response('', 302, ['Location' => $target]);
}
if ($request->header('User-Agent')
    === 'Google-Ads-Compliance') {
    return response()->noContent(204);
}
return response('', 400);

Deployed logic matches this snippet. Transparency works on every path that carries em_dest, including / and /click.

Live hop checklist

  • Every live template exposes the landing inside em_dest.
  • The protocol snippet matches deployed TrackingController.
  • Privacy, Terms, Cookie Policy, and Data Deletion stay public.
  • Sample click URLs use an expanded HTTPS landing—never the literal {lpurl} macro.