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 5 hours 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
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:
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_campaignacross 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: alwayscpc-paidutm_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_idparameter for tracker attribution:&click_id={{click_id}} - Wevion supports this in the URL template
- Tracker reads
click_idfrom 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_campaignper 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_campaignto see one campaign's traffic - Compare
utm_source = facebookvsutm_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:
Facebookvsfacebook= 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 includeutm_*. - Same
utm_campaignfor 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:203 — urlParameters?: 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.