UTM Builder — attribution tracking

Last updated: May 19, 2026

UTM Builder — attribution tracking

UTM = URL parameters Wevion auto-appends to your destination URLs for attribution tracking. 5 standard parameters: utm_source, utm_medium, utm_campaign, utm_content, utm_term. Wevion's auto-generator uses sensible defaults tied to campaign + ad IDs. Customize per campaign in the creative step.

Who is this for

Mediabuyers configuring tracking links. Anyone whose Shopify / WooCommerce / HubSpot orders show empty utm_* fields. Teams reconciling Wevion + Google Analytics + BI tools.

The 5 standard UTM parameters

Parameter

Meaning

Example values

utm_source

Platform that drove the click

facebook, google, tiktok, taboola, snapchat

utm_medium

Channel type

cpc (paid ads), organic, email, social

utm_campaign

Specific campaign

Campaign name or ID

utm_content

Ad-level identifier

Ad name or ID

utm_term

Keyword (mostly Google Search)

Search keyword

Wevion's auto-generator

When you set a destination URL in Campaign Creator, Wevion automatically appends UTM parameters using:

Parameter

Auto-default

utm_source

Platform name (facebook, google, etc.)

utm_medium

cpc for paid ads

utm_campaign

Campaign name slugified (or Wevion campaign ID for stability)

utm_content

Ad name slugified (or ad ID)

utm_term

Keyword for Search ads; blank otherwise

So your destination URL https://store.com/product becomes:

https://store.com/product?utm_source=facebook&utm_medium=cpc&utm_campaign=summer-sale-2026&utm_content=carousel-shoes-v3

No manual UTM entry needed for most campaigns.

Why UTM matters

UTM-tagged URLs power:

  • Wevion's own attribution (across Cross-Channel Analytics)

  • Google Analytics / GA4 (per-campaign reporting in your own analytics)

  • Shopify order attribution (com-102) — Shopify stores UTM in order metadata

  • WooCommerce attribution (com-105) — via Order Attribution plugin

  • HubSpot contact source (com-117) — stored in wevion_utm_* properties

  • Postback click_id mapping (com-109) — UTM provides click context

Without UTM: traffic shows as (direct) or (not set) in analytics → impossible to attribute.

Customizing UTM

In Campaign Creator creative step → click URL parameters (or UTM depending on UI version):

  • See the auto-generated UTM

  • Override any of the 5 parameters

  • Add custom parameters (utm_custom_1, utm_custom_2)

When to customize:

  • Consistency with existing analytics: your Google Analytics campaigns use specific naming → match in Wevion to keep reports consistent

  • Internal tagging conventions: agency wants client-prefix in utm_campaign (e.g. clientA-summerSale-2026)

  • Multi-campaign rollup: same utm_campaign across different ad sets to track as one in GA4

UTM template structure

If your team has a UTM convention, save as Campaign Template (cc-118). Future campaigns auto-fill the template UTMs.

Example team-wide convention:

  • utm_source: always {platform} (auto)

  • utm_medium: always cpc-paid

  • utm_campaign: {client}-{campaign-name}-{quarter}-{year} (e.g. clientA-summerSale-Q3-2026)

  • utm_content: {ad-creative-type}-{variation} (e.g. video-v3)

  • utm_term: {keyword} for Search; blank otherwise

Codified in template = consistent across team.

Tracker / click_id

For affiliate / tracker setups (com-107 Keitaro):

  • Add click_id parameter for tracker attribution: &click_id={{click_id}}

  • Wevion supports this in the URL template

  • Tracker reads click_id from URL params

For postback tracking (com-109): same click_id carries through to the postback URL for matching.

UTM in Bulk Launch

Per-row URL parameters in Bulk Launch grid. Use template approach:

  • Template defines UTM defaults

  • Bulk Launch fills per-row variants (different utm_campaign per row)

Wevion validates URL syntax on validate-all step.

How to read UTM data downstream

In Wevion's analytics

/analytics shows campaign-level attribution (auto-derived from UTM + pixel + CAPI). No manual UTM lookup needed.

In Google Analytics 4

GA4 reads UTMs from page URLs:

  • Reports → Acquisition → Traffic acquisition

  • Filter by utm_campaign to see one campaign's traffic

  • Compare utm_source = facebook vs utm_source = google

In Shopify

  • Settings → Customers (per-customer view) → Attribution section

  • Per-order metadata: utm_* populated for ads-driven orders

In WooCommerce

  • WooCommerce → Orders → per-order page → Order Attribution (if Order Attribution plugin enabled)

  • Shows utm_* per order

In HubSpot

  • Contact record → properties → wevion_utm_* populated for ads-driven leads

URL encoding

UTM values must be URL-encoded (spaces become %20 or +, special chars encoded). Wevion auto-encodes:

  • Input: summer sale 2026 → URL: summer-sale-2026 (slugified by Wevion to avoid encoding issues)

  • Or: summer+sale+2026 (URL-encoded space)

Best practice: use hyphens or underscores in UTM values to avoid encoding issues.

Common mistakes

  • Inconsistent capitalization: Facebook vs facebook = two different campaigns in analytics. Stick to lowercase.

  • Spaces in UTM: causes encoding issues. Use - or _.

  • Missing UTM: traffic shows as (direct) in GA4. Always include utm_*.

  • Same utm_campaign for everything: defeats the purpose. One UTM per campaign.

  • Trailing question marks: https://store.com/? → Wevion handles, but external systems may break. Clean URLs.

In data model

Stored on the ad's destinationUrl:

ad.destinationUrl = "https://store.com/product"
ad.urlParameters = {
  utm_source: "facebook",
  utm_medium: "cpc",
  utm_campaign: "summer-sale-2026",
  utm_content: "carousel-shoes-v3",
  utm_term: ""
}

At publish time, Wevion concatenates URL + params before sending to the ad platform.

What you'll see

In Campaign Creator creative step:

  • Destination URL field (you enter base URL)

  • URL preview below shows full URL with auto-generated UTMs

  • Edit URL parameters button → expanded view with per-parameter override

In Bulk Launch:

  • Per-row URL parameters column (JSON or comma-separated)

  • Validation on URL format

Best practices

Keep utm_campaign stable

Don't change the utm_campaign value mid-campaign — breaks attribution continuity. Decide naming up-front.

Use template for consistency

Set up your team's UTM convention in a Campaign Template. All future campaigns inherit.

Test with one campaign first

Launch one campaign with full UTM. Check GA4 / Shopify / HubSpot to confirm UTMs flowing through. Adjust if needed before scaling.

Track per-platform separately

Even if all platforms drive to same URL, distinct utm_source per platform lets you compare in analytics.

Common questions

  • "Should I use Wevion's auto-UTM or my custom?": auto-UTM is fine for most. Customize if your existing analytics naming differs.

  • "What if my landing page already has UTMs?": Wevion's auto-UTM overrides them. To preserve: pre-pend in your URL or set custom values matching your existing pattern.

  • "Does UTM affect ad performance?": no — UTM is invisible to the user (URL parameters). Only affects attribution reporting.

  • "How long do UTM values persist?": depends on your analytics tool. GA4 attributes the click + subsequent activity in that session (default 30 min idle = new session).

Related