Why does my campaign report have twelve rows for one campaign?
Because twelve slightly different spellings reached Google Analytics and it treated every one as a separate thing. Google is explicit about this. Its documentation says keywords with different capitalization, such as Meta and meta, are treated as different values, and that SpringSale and Spring_Sale are considered distinct.
That is the entire problem, and it is not a reporting bug. Analytics did exactly what it was told. Three people tagged links over three months without agreeing on spelling, and the report is now an honest record of that disagreement.
This article is about the fix that comes before the tagging: a written convention and one spreadsheet that holds it. If you want the mechanics of putting tagged links on a Webflow site, I covered that separately in how to set up UTM tracking for Webflow campaigns. This is the governance layer above it.
What is a UTM convention, and why does a spreadsheet beat a tool?
A convention is a written decision about which parameter values your team is allowed to use, and a spreadsheet is where that decision lives so nobody has to remember it. For a team of two to five people with no analytics engineer, a shared sheet beats a paid tool because everyone already knows how to open one.
The sheet does three jobs. It lists the approved values so people copy rather than invent. It records every link you have built, so you can look up what you used in March. And it becomes the thing a new hire reads instead of asking you.
What it does not need is automation. The failure mode of UTM governance is never that the spreadsheet was insufficiently clever. It is that nobody opened it.
Which parameters should you standardise first?
Three, and Google names them for you. Its documentation states that when you add parameters to a URL, you should always use utm_source, utm_medium, and utm_campaign. Standardise those three, get your team using them consistently, and you have solved most of your reporting problem.
Google goes further in its traffic-source documentation, recommending that if you are setting one UTM parameter you should set all relevant ones, especially utm_source, utm_medium, utm_campaign, utm_id and utm_source_platform. It warns that missing UTM parameters will result in not set values appearing in your reporting.
Two parameters are worth knowing about but not worth arguing over yet. Google notes that utm_creative_format and utm_marketing_tactic are not currently reported in Google Analytics properties. Do not build a convention around fields that do not surface anywhere.
Leave utm_term and utm_content for later. They matter once you are running paid search or testing two creatives in one email, and they are pure overhead before that. A convention nobody needs is a convention nobody follows.
Why does capitalisation break your reporting so badly?
Because the damage is retroactive and you cannot undo it. Once fb and FB have both been collected, you have two rows for one channel and no reliable way to merge the history. Nothing you write in the spreadsheet next month repairs the data you already gathered.
Google's own best practice is unambiguous: maintain a strict, case-sensitive naming convention for all fields such as source, medium and campaign, and use lowercase as a standard practice. Take the second half of that literally and make lowercase a rule with no exceptions.
My own addition, which Google does not mandate, is to ban spaces and pick one separator and never the other. Underscores inside a value, hyphens never, or the reverse, but decide once. Mixed separators produce exactly the same fragmentation as mixed capitals and are harder to spot by eye.
How do you name sources and mediums so channels stay clean?
Google's guidance is to use only one unique utm_source for each distinct platform such as Facebook, Instagram or TikTok, and it suggests assigning a distinct value to each sub-platform, for example fb for Facebook and insta for Instagram. So source answers where the click came from, at platform granularity.
Medium is the one people get wrong, because they treat it as a second description of the platform. Google's recommendation is to use only one unique utm_medium for each distinct channel, giving paid_social and organic_search as its examples. Medium is the channel type, not the vendor.
That distinction matters more than it sounds, because Google says a standardised UTM strategy directly affects reporting accuracy in Default Channel Groups and Custom Channel Groups, and prevents traffic being categorised incorrectly. Sloppy mediums are how paid traffic ends up filed as something else.
For campaign names, Google recommends using one unique name that matches the exact campaign name, noting that this prevents a single marketing effort from splitting into multiple rows. The practical version is to name the campaign after the thing you are actually doing, not after the channel you are doing it on.
How do you build the spreadsheet in twenty minutes?
Make two tabs. Call the first one Values and the second one Links. That is the whole architecture, and resisting the urge to add a third tab is most of the discipline. Values holds what people are allowed to type. Links holds every URL you have ever built. Nothing else belongs in this file.
On the Values tab, put one column per parameter and list every approved value underneath it, all lowercase. Your source column holds the platforms you actually use. Your medium column holds your channel types and should be short, probably five to eight entries. If your medium column grows past ten, you are describing platforms again.
On the Links tab, give yourself a row per link with columns for the date, the person, the destination URL, each parameter value, and the finished URL. Build the finished URL with a formula that concatenates the parts rather than letting anyone type it, because typed URLs are where the capitals come back. Use data validation on the parameter columns so they can only be filled from the Values tab.
Then, if you want the URL built for you rather than by formula, Google publishes its own builders. Its documentation says that for links to websites you should use the Campaign URL Builder, and that if you are advertising an Android app you should use the Play Campaign URL Builder instead. Either approach works as long as the values come from your sheet.
What happens if you hand-tag a Google Ads link?
Something surprising, and this is the part most small teams have never read. Google's documentation says that if you use manual tagging and auto tagging together, the source, medium and other traffic-classification dimensions use the auto-tagged values. Your hand-written source may simply not be what shows up.
There is a second case worth knowing. Google says that in instances where the GCLID or DCLID cannot be used as intended, if any UTM parameter is present on the URL, Analytics will derive all cross-channel traffic source dimension values from UTM parameters exclusively. A half-tagged link can therefore hand your whole attribution to an incomplete set of parameters.
The practical rule I give clients is to leave auto-tagged platforms alone and reserve manual tagging for everything that has no integration: newsletters, partner links, sponsorships, QR codes, community posts, your own email signature. That is where hand tagging earns its keep.
One more thing to expect before it confuses you. Google notes that UTM parameters are omitted from the Landing page plus query string and Page path plus query string dimensions, and that the information appears in the Page location dimension instead. So if you go looking for your parameters in a landing page report and cannot find them, that is why.
How do you get three other people to actually use it?
Make the sheet the only way to get a link. Not the recommended way, the only way. The moment someone can produce a tagged URL without touching it, your convention has an exception, and exceptions are how you got twelve rows in the first place.
Then remove the reasons people go around it. Pin the sheet where the work happens rather than in a folder. Pre-fill the columns that never change. Make the finished URL one cell someone can copy. Every extra step is a vote for improvising.
Review it once a month, not once a quarter. Open your acquisition report, look for values that are not on the Values tab, and find out who created them and why. Usually the answer is that they needed a value you had not approved, and the fix is to approve it rather than to tell them off. This is the review I fold into the same monthly pass I described in building a monthly reporting view.
Be realistic about what this gets you. A convention makes your channel reporting trustworthy. It does not tell you which touch deserves credit for a deal, which is a harder question I looked at in marketing attribution for a small B2B team. Clean inputs are a precondition for that work, not a substitute for it.
What should you do next?
Open a blank spreadsheet today and make the two tabs. Fill the Values tab with the platforms and channels you genuinely use, all lowercase, with one separator. Then take your last ten campaign links, rebuild them properly, and log them. You will probably find at least one inconsistency in those ten.
Tell your team the sheet is now the only source of links, and hold that line for one month. That is long enough to prove whether the convention survives contact with a busy week, which is the only test that matters.
If your campaign reports are already a mess and you want help deciding what is salvageable, get in touch. I am happy to look at your acquisition report and tell you honestly whether it needs a convention or a rebuild.
Get found, cited and the back office automated
Let's make your site the source AI engines quote and wire up the systems behind it.
Read more blogs
Let's get your website found and cited by AI
Tell me what you're working on, whether AI search is skipping your product, your back office is buried in manual work, or you need a build that does both.