UTMs are absolutely possible, we use UTMs over CIDs (since UTMs are used more globally - i.e. Google Ads, Google News Showcase, etc... and are read by all our analytics programs - we have GA4 and Parse.ly as well as Adobe).
Now, what Adobe won't do is read and track these natively. So there are things that you will want to do.
First, since you are talking about Paid vs Natural Search, you will want to ensure your Paid Search Detection is set up correctly.
(Admin > Reports Suites (choose suite) Edit Settings > General > Paid Search Detection)
Here you can look for any query string values that you know are on your paid ads, such as:
- utm_medium=cpc
- utm_medium=ppc
- utm_medium=paid
- gclid
- gclsrc
- gad_source
The utm_medium are based on your tagging, so make them match how you would tag them, these are just samples, the last three are some of the automated tags I've seen come from Google over the years... you can add as many rules as you want / need.
Now, I assume you are using Marketing Channels... by default, Paid Search has a processing rules for the Paid Search channel "Matches Paid Search Detection Rules" - so as long as you have covered all your based in your Paid Search Detection (which is also limited specifically to known Search Engines) this should attribute your Paid Search properly, and by the same logic, your Organic Search rules will be the opposite of Paid, "Matches Natural Search Detection Rules", wherein the referrer is a known search engine that is not identified as Paid.
Now, for tracking UTMs, this is where you need to do a little more work. In Launch / Data Collection, you can set up Data Elements for each UTM you want to capture. Then you need to decide how you want to stitch these together into your "Tracking Code" dimension (also known as "Campaign" and "eVar0". This is a dimension with a default 1 week attribution. But it can store only 1 string at a time.. therefore, you will want to figure out a pattern for how you stitch together your UTMs (you can also set up Classification Rules to split these back out using Regex, so make sure it's a pattern that you can deal with... you will want a unique delimiter and likely a placeholder for UTMs that have no value; OR you may want to use a prefix for each UTM if it exists.
Example:
?utm_medium=paid&utm_source=google&utm_campaign=campaignx
Final Format Options:
- paid_google_campaignx
- for missing values, use "na" ("paid_na_campaignx" or "paid_google_na", etc)
- but if the whole string is "na_na_na" then clear it so it's nothing ""
- medium:paid|source:google|campaign:campaignx
- for missing values, just don't include ("medium:paid|campaign:campaignx" or "medium:paid|source:google", etc)
You want to be sure that if NO campaign, that your Campaign Dimension does NOT set a value, so that your 1 week attribution will maintain the last value
- Visit 1
- Page A (entry with campaign)
- Set Tracking Code Dimension value ("x")
- Tracking Code Instances metric is triggered (since the value is explicitly set here)
- Page B (next page, no campaign in the URL
- Tracking Code Dimension should not be set, however, it will maintain the post-processed value ("x") due to 1 week attribution
- Tracking Code Instances metric is not triggered (you can use this to tell the difference between when a value is "set" vs "maintained" value)
- Visit 2 (2 days later, so within a week)
- Page C (entry with no campaign)
- Tracking Code Dimension should not be set, however, it will maintain the post-processed value ("x") due to 1 week attribution
- Tracking Code Instances metric is not triggered
- Page D
- Tracking Code Dimension should not be set, however, it will maintain the post-processed value ("x") due to 1 week attribution
- Tracking Code Instances metric is not triggered
- Visit 3 (1 day later, still within a week of the campaign being set)
- Page E (entry with campaign)
- Set Tracking Code Dimension value ("y"), overwriting the previous campaign
- Tracking Code Instances metric is triggered (since the value is explicitly set here)
- Page F
- Tracking Code Dimension should not be set, however, it will maintain the post-processed value ("y") due to 1 week attribution
- Tracking Code Instances metric is not triggered
You can also create your own custom Visit (or other) expiry dimensions, one for each UTM, that you can track similar to above, but each will only hold one value... (eVar1 for Medium, eVar2 for Source, eVar3 for Campaign, etc)
I recommend Visit, because sometimes you just want to see the direct UTM usage from a Visit, which this will accomplish, but also, you can always apply custom attribution to these to see longer data, so using a smaller starting attribution is an easier starting point for this..
I hope this helps.