questionnaire docs
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

ParameterPurpose
utm_sourceCampaign source (ub_push, ub_whatsapp, ub_email)
gclidGoogle click ID
guideNoAd=1Guide no-ad carryover to article page
unlocked=1Skip theme, show content directly
startKv2=1Trigger KV2 rewarded popup
campaignidSession tracking campaign ID
adgroupSession tracking ad group
placementSession tracking placement

Key files

FilePurpose
components/layout/QueryParamPreserver.jsCore merge handler
components/QueryParamPreserver.jsBarrel re-export
app/layout.jsGlobal 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, _blank targets, download links, and hash anchors are ignored
  • ArticleCard.js uses 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.

On this page