UTM attribution
Nohmo automatically reads UTM parameters from the URL on the first page load of each session and sends them with every subsequent event in that session.
Supported parameters
| URL parameter | Field | Example |
|---|---|---|
| utm_source | source | google, newsletter, twitter |
| utm_medium | medium | cpc, email, organic |
| utm_campaign | campaign | spring-sale-2025 |
| utm_term | term | running shoes |
| utm_content | content | hero-cta, sidebar-link |
| ref | source + medium="ref" | META_ADS_1, partner-blog |
How it works
When a user lands on a page with UTM parameters in the URL, the SDK captures them and stores them in sessionStorage. On subsequent page navigations within the same session, parameters are read from sessionStorage so they aren't lost even if the user navigates to a clean URL.
UTM data is first-touch within each session — it reflects the channel that brought the user into that session, not the last URL they visited.
Custom attribution parameters
If your team uses a different parameter name — ?reference=, ?from=, ?visit_from=, or anything else — add it in Settings → General → Custom attribution parameters. The SDK fetches the list from the backend on every page load, so no code changes are needed. ?ref= is always active by default.
When no utm_* params are present the SDK checks your configured list in order. The first matching param's value becomes source and the param name itself becomes medium, so you can tell them apart in the Traffic dashboard.
Example URLs
# Full UTM (always takes priority)https://yourapp.com?utm_source=google&utm_medium=cpc&utm_campaign=spring-sale# Newsletter linkhttps://yourapp.com?utm_source=newsletter&utm_medium=email&utm_campaign=weekly-digest# Custom attribution params (no UTM tooling required)https://yourapp.com?ref=META_ADS_1 # source=META_ADS_1, medium=refhttps://yourapp.com?reference=CAMPAIGN_A # source=CAMPAIGN_A, medium=referencehttps://yourapp.com?src=partner-blog # source=partner-blog, medium=src
Note: Attributed sessions appear in the Trafficdashboard under Sources and Mediums. Sessions with no UTM or attribution params are counted as "organic."