Integrations
Query Parameter Preservation
How tracking and config query params carry across internal navigation.
Query Parameter Preservation
Preserves URL query parameters (UTM, ad config, flow flags) across internal page navigation.
Entry: components/layout/QueryParamPreserver.js
Flow
Important query parameters
| Parameter | Purpose |
|---|---|
utm_source | Campaign source (ub_push, ub_whatsapp, ub_email) |
gclid | Google click ID |
guideNoAd=1 | Guide no-ad carryover to article page |
unlocked=1 | Skip theme, show content directly |
startKv2=1 | Trigger KV2 rewarded popup |
campaignid | Session tracking campaign ID |
adgroup | Session tracking ad group |
placement | Session tracking placement |
Key files
| File | Purpose |
|---|---|
components/layout/QueryParamPreserver.js | Core merge handler |
components/QueryParamPreserver.js | Barrel re-export |
app/layout.js | Global mount point |
Gotchas
- Internal links that need param preservation must use
<a>tags, not Next.js<Link>(Link reads from React scope, bypassing DOM href manipulation) - External links,
_blanktargets, download links, and hash anchors are ignored ArticleCard.jsuses standard<a>tags for this reason
GAM page-level targeting
utm_source values (ub_push, ub_whatsapp, ub_email) are persisted to GAM key-values via PageLevelTargeting component.