10 guides · Launch and QA
Checklists that catch intent, not only syntax
A correctly spelled Purchase on the landing page will pass the validator and wreck the model. Staging that trains production will too. These pages are who does what before go-live.
Validate a pixel or CAPI All docs
Ship the dictionary before you ship the tag
Ship the event dictionary, owners, environments, PII rules, and the success metric before anyone pastes a snippet. A tag without a dictionary is how Purchse reaches production.
Test Events is empty until both pipes exist
Before go-live: both pipes, shared event_id, Test Events showing matched user data, value and currency on money events, and a plan for refunds. Empty Test Events means you are not live, even if GTM says the tag fired.
Hash the fields the vendor named, nothing else
Hash the fields the vendor named, with their normalization. Leave IP and user-agent in the clear. Keep raw email out of query strings and out of shared HARs. CI should catch the inverse bugs.
Staging must not train production
Staging must not train production. Use test_event_code, debug_mode, or a separate pixel / measurement id. Pointing staging at the production pixel because 'it is easier' is a data incident.
Fixtures in CI, not a weekly HAR
Keep fixture URLs and JSON next to the code. pixellint validate url and pixellint validate json on every PR. Weekly HAR archaeology does not catch the merge that shipped Date.now() to Meta.
Filter by the collector host
Filter by collector host: facebook.com/tr, google-analytics.com/g/collect, ads.tiktok.com. Preserve log across redirects. Status 200 is the start of the story, not the end.
A HAR is a fired artifact plus PII
A HAR is a fired artifact plus cookies plus whatever PII the page put in query strings. Share it like a password dump. Prefer staging HARs and redaction.
The GTM loader is not the conversion hit
The GTM loader is googletagmanager.com/gtm.js?id=GTM-XXXX. That request is not the conversion hit. Preview attaches a debug cookie to a draft. Users without it get the published container. Shipping on preview alone is how unpublished tags look fine.
GTM said fired. Network is empty.
Facebook pixel not firing, TikTok pixel not tracking, GTM says the tag fired and Network is empty. Check the collector URL, ad blockers, consent, SPA routes, duplicate installs, and GTM environments. Then paste the URL into a pixel validator.
Pixel Helper is not the fired URL
Facebook Pixel Helper is a vendor overlay. Chrome Network is the fired facebook.com/tr URL. Events Manager is delayed. A tracking pixel validator lints that URL against Meta's documented parameters before you wait on the UI.