Use one documented UTM contract across channels, and do not copy platform macros until you have verified them in the exact ad field and format you use. The earlier version of this page contradicted the site’s attribution guide and mixed full-URL, suffix and parameter-only fields. This Phase 1 revision removes those unverified recipes rather than risk broken destinations or misleading reports.

The shared 99Ways parameter contract

ParameterMeaningExample
utm_sourcePlatform or publishergoogle, facebook, reddit
utm_mediumChannel typecpc, paid-social, display
utm_campaignCross-channel campaign or initiativewinter-sale-2026
utm_termKeyword, audience or ad-set detailbrand-keyword, retargeting-30d
utm_contentCreative, placement or link variationvideo-ad-01, feed-placement

This matches the canonical UTM governance guide. Do not put an ad-set ID in utm_content on one platform and an ad ID there on another while expecting the field to remain comparable. Store platform IDs in dedicated fields such as platform_campaign_id, platform_adset_id and platform_ad_id when stable joins are required.

Names and IDs serve different jobs

A shared campaign name in utm_campaign groups the same initiative across platforms. Platform IDs are stable keys for joining delivery and cost exports. Keep both when needed: readable UTMs for cross-channel analysis and dedicated ID parameters for exact platform joins. Never place customer IDs, email addresses, private audience names or other personal data in a URL.

Field type determines the literal input

Field typeWhat it expectsSeparator responsibility
Full destination URLLanding-page URL plus query stringYou must use ? for the first parameter and & thereafter
Parameter or suffix fieldKey-value pairs onlyThe platform normally attaches them; do not paste a leading ? unless current documentation explicitly requires it
Tracking templateA platform landing-page placeholder plus tracking expressionUse only after verifying the platform’s current placeholder and escaping rules

Do not assume these field types are interchangeable. Google’s Final URL suffix is the simpler home for parameters that merely need appending; a tracking template has different purposes and syntax. Other platforms vary by campaign type and interface version, which is why a generic six-platform copy table is unsafe without current delivery tests.

Build one canonical URL before adapting it

Start with a registry row containing the untracked destination, approved source/medium/campaign values, optional term/content values, dedicated platform IDs, owner and launch date. Generate the URL from that record instead of hand-editing strings in Ads Manager.

For a destination with no query string, the first separator is ?: https://example.com/page?utm_source=facebook&utm_medium=paid-social&utm_campaign=winter-sale-2026. If the destination already has a query string, append with &. Preserve fragments and required application parameters deliberately.

Validate the delivered click, not just the editor preview

Use a safe test ad or supported test-link flow. Confirm that the browser reaches the intended canonical HTTPS page, every dynamic token resolves rather than arriving as literal braces, existing query parameters survive, and redirects retain the values. Then inspect one test landing event and one non-production conversion through the authorized analytics/CRM path.

Record the literal input, resolved public URL, ad format, test date and observed downstream fields. A preview that merely displays the template is not delivery evidence. If a platform cannot be tested, label its recipe unverified and do not present it as copy-ready.

Migration without breaking historical reporting

Do not rename live campaign parameters in place. Map old values to the new contract, choose a cutover date, keep the mapping with the campaign registry and update reports to understand both eras. Validate channel grouping in each analytics product; no single utm_medium value guarantees identical classification everywhere.

Phase 1 status of platform recipes

The previous Meta, Google, Reddit, TikTok, Snapchat and Pinterest macros are intentionally not repeated here because they have not been verified in this phase. Phase 2 can restore a dated per-platform table only after checking primary documentation and capturing anonymized input/output evidence for each supported ad format. Use the PostHog audit for downstream QA.

Author

  • Iman Nazari

    Iman combines user psychology, business strategy, and experimentation to uncover what drives action and improves performance. He focuses on hypothesis development, evidence-based decision making, and turning insights into changes that can be confidently tested and scaled.

Related blog posts

Leave a Reply

Your email address will not be published. Required fields are marked *