UTM Builder — attribution tracking

Wevion auto-appends UTM parameters to destination URLs. Customize per campaign in creative step. Cross-platform analytics + commerce attribution.

Written By Salvatore Sinigaglia

Last updated About 1 hour ago

Wevion auto-appends UTM parameters to destination URLs. Customize per campaign in creative step. Cross-platform analytics + commerce attribution.

UTM Builder — attribution tracking

UTM = URL parameters you add to your destination URLs for attribution tracking. 5 standard parameters: utm_source, utm_medium, utm_campaign, utm_content, utm_term. Important: the campaign launch flow does not auto-generate UTMs — the URL Parameters field is a free-text string passed verbatim (not URL-encoded). Build your UTM string with the dedicated UTM Builder tool (/tools/utm-builder) and paste it into the URL Parameters field, or type it yourself.

Who is this for

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

The 5 standard UTM parameters

ParameterMeaningExample values
utm_sourcePlatform that drove the clickfacebook, google, tiktok, taboola, snapchat
utm_mediumChannel typecpc (paid ads), organic, email, social
utm_campaignSpecific campaignCampaign name or ID
utm_contentAd-level identifierAd name or ID
utm_termKeyword (mostly Google Search)Search keyword

How UTMs work in the launch flow

The launch flow does not auto-generate UTMs. In the launch surfaces there is a URL Parameters field (urlParameters, a free-text string). Whatever you put there is passed verbatim to the ad platform — it is not URL-encoded and macros like {{campaign.id}} or {fbclid} are kept as-is.

To tag a campaign, either:

  • Build a UTM string with the dedicated UTM Builder tool (/tools/utm-builder) and paste it into URL Parameters, or
  • Type the parameters yourself, e.g. utm_source=facebook&utm_medium=cpc&utm_campaign=summer-sale-2026&utm_content=carousel-shoes-v3

A common convention still maps parameters to values like these:

ParameterTypical value
utm_sourcePlatform name (facebook, google, etc.)
utm_mediumcpc for paid ads
utm_campaignCampaign name (slugified)
utm_contentAd name (slugified)
utm_termKeyword for Search ads; blank otherwise

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
  • Postback click_id mapping (com-109) — UTM provides click context

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

Editing URL parameters

In the launch flow → URL Parameters field (free text):

  • Enter or paste the full UTM query string
  • Add any custom parameters you need (utm_custom_1, click_id, etc.)
  • Macros like {{campaign.id}} and {fbclid} are passed through as-is

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, the UTM Builder tool (/tools/utm-builder) supports saved UTM templates you can reuse and paste into future campaigns.

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

URL encoding

The URL Parameters field is passed verbatim and is not URL-encoded by Wevion, so you must encode values yourself where needed (spaces become %20 or +, special chars encoded). Since macros like {{campaign.id}} are intentionally kept as-is, avoid characters that need encoding:

  • Use hyphens or underscores in UTM values (e.g. summer-sale-2026) rather than spaces.

Best practice: keep UTM values lowercase with hyphens/underscores 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

The canonical ad type stores urlParameters as a free-text string (verified canonical.types.ts:203urlParameters?: string), not a structured object:

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

At publish time, this string is passed through to the ad platform verbatim (no URL-encoding, macros preserved).

What you'll see

In the launch flow:

  • Destination URL field (you enter the base URL)
  • URL Parameters free-text field where you paste/type your UTM query string (passed verbatim)

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

  • "Does Wevion auto-generate UTMs at launch?": No. The URL Parameters field is free text passed verbatim — build the string with the UTM Builder tool (/tools/utm-builder) or type it yourself.
  • "What if my landing page already has UTMs?": Whatever you enter in URL Parameters is appended verbatim. If your base URL already carries UTMs, make sure you don't duplicate keys.
  • "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).

FAQ

What are UTM parameters in Wevion?

UTMs are URL parameters you add to your destination URLs for attribution tracking. There are 5 standard ones: utm_source, utm_medium, utm_campaign, utm_content, and utm_term. In Wevion's launch flow they live in a free-text URL Parameters field passed verbatim — Wevion does not auto-generate them.

Do I have to enter UTMs manually?

Yes — the launch flow doesn't auto-generate UTMs. Build the query string with the dedicated UTM Builder tool (/tools/utm-builder) and paste it into the URL Parameters field, or type it yourself. Whatever you enter is sent to the ad platform verbatim (not URL-encoded; macros preserved).

Where can I customize UTM values?

In the launch flow, edit the free-text URL Parameters field for the ad. You can paste a string from the UTM Builder tool or add custom parameters like utm_custom_1 or click_id. Match your existing Google Analytics naming or agency tagging convention as needed.

Why does my traffic show as "(direct)" in analytics?

Missing UTM parameters cause traffic to appear as (direct) or (not set), making it impossible to attribute. Because Wevion does not auto-append UTMs at launch, be sure to fill the URL Parameters field yourself — those tags power Wevion's own attribution plus Google Analytics, Shopify, and WooCommerce attribution downstream.

Can I set UTMs for tracker or affiliate setups?

Yes. For affiliate or tracker setups like Keitaro, add a click_id parameter to the URL template using &click_id={{click_id}}. Wevion supports this, and the tracker reads click_id from the URL params. For postback tracking, the same click_id carries through to the postback URL for matching.