This page covers placing the pixel, choosing when it fires, and fixing it when it does not.
Where each pixel goes
- Initiation pixel: on every page of the site.
- Conversion pixel: only on the page that marks the conversion, whether pending or approved. It creates the conversion the moment it fires.
- Update pixel: fires only when the data layer contains an Origin ID. We still recommend placing it on the conversion page as well.
If you implement the pixel directly in the page, put it as high in the <head> as possible.
Google Tag Manager
GTM is the most common integration, though not the best one. Place both scripts as Custom HTML tags.
Which trigger to use
GTM offers five triggers. The earlier the pixel fires, the more traffic it captures. Use the Initialization trigger.
- Consent Initialization: fires first, and is meant for consent management tags only. Do not use it for the pixel.
- Initialization: fires before everything except Consent Initialization. This is the one you want.
- Page View: fires as the browser starts loading the page.
- DOM Ready: fires once the page structure is built.
- Window Loaded: fires once images and scripts have finished loading. Latest and least reliable.
Why GTM is not ideal
Some ad blockers block the entire GTM container, and the pixel goes with it. Server-side GTM survives most of them, standard GTM does not.
- Adblock: does not block either setup.
- Adblock Plus, uBlock Origin, Ghostery: block standard GTM and server-side GTM alike.
- Safari ITP: affects standard GTM, not server-side GTM.
- Corporate VPNs: usually affect standard GTM. Behaviour varies by network.
The safer options, in order: put the pixel directly in the page code, use server-side GTM, or accept standard GTM and back it up with a postback.
When the pixel is blocked
Set up an S2S postback alongside the pixel. It runs server to server, so ad blockers and missing cookie consent do not affect it.
- Fire it when the conversion is created, so both methods report the same event and PalDock keeps one conversion.
- Or fire it only on updates, when the advertiser approves or rejects.
Deduplication on the external ID is what keeps the two methods from doubling your numbers, so make sure the advertiser sends it in both.
Where the click ID is stored
The cookie parameter of the initiation pixel decides this.
cookie=1: a cookie. Recommended.cookie=2: localStorage.cookie=0: sessionStorage.
⚠️ localStorage and sessionStorage are not shared across domains or subdomains. They only work within the exact same origin, meaning the same protocol, domain, and port. If your homepage runs on the main domain and checkout on a subdomain, only a cookie carries the click ID across.
If you cannot fire the pixel before cookie consent, you have to move the value yourself, for example through a URL parameter or your own backend.
Troubleshooting
The pixel never appears in the network tab
Your site may have a Content-Security-Policy header that blocks our domain. The pixel then fails silently: nothing in the browser’s Network tab, while GTM still reports the tag as fired.
To confirm, open DevTools, Console, and look for a message about a refused script and a Content Security Policy directive.
To fix it, ask your developers to add our domains to the CSP:
connect-src 'self' https://*.paldock.com https://paldock.com https://*.palpxl.com https://palpxl.com;
Then check in DevTools, Network, that the requests go through.
The pixel fires but nothing arrives
Check the tracking log. If the request is not there, it never reached PalDock, so the cause is in the browser: CSP, an ad blocker, or a missing consent.
If it is there but did nothing, read the outcome in Tracking errors and reasons.
Conversions appear without an affiliate
The initiation pixel is not firing, or is firing after the click ID is gone from the URL. Check that it is on every page and on the Initialization trigger.

