SheetLink Forms beta

Attribution · 2026-07-26 · 9 min read

UTM conventions that survive real campaigns

UTM chaos is not a tooling problem, it is a data-quality problem with a social cause. Here is a naming convention built to survive multiple people, multiple quarters, and ordinary human laziness.

A ledger-styled illustration of tidy lowercase UTM values flowing into aligned spreadsheet columns while crossed-out mixed-case variants fall away.

google, Google, and Google-Ads walk into a report

Open any lead spreadsheet that has collected UTM parameters for more than a quarter and you will find the same archaeology: google, Google, google ads, Google-Ads, and adwords, all describing the same channel. Each variant was typed by a reasonable person on a deadline. Together they mean that the simple question "how many leads did paid search produce" now requires a cleanup pass before it can be answered.

This is worth naming precisely: UTM chaos is not a reporting inconvenience. It is a data-quality defect, introduced at write time, that silently degrades every downstream decision. And because the parameters are free-text by design, no tool will fix it for you. Only a convention will.

A short history of five text fields

The UTM in the name stands for Urchin Tracking Module, after Urchin Software, the analytics company Google acquired and turned into Google Analytics. The five classic parameters - utm_source, utm_medium, utm_campaign, utm_term, utm_content - survive essentially unchanged, and Google's campaign URL documentation still describes them the way Urchin did: plain query-string labels that analytics tools group traffic by.

Two decades on, their genius and their curse are the same property: they are just text. Any value you type is valid. The system has no opinions, which means your team has to have them instead.

The three questions every convention must answer

Strip away the templates and every workable UTM convention is three decisions, made once and enforced forever:

  1. Casing - what mix of upper and lower case is legal?
  2. Delimiters - how do multi-word values separate their words?
  3. Vocabulary - which values are allowed to exist at all?

Teams that argue about naming are usually arguing about aesthetics inside decision three while leaving one and two unmade - which is backwards, because casing and delimiter drift do more damage than an ugly campaign name. A memorable rule beats an optimal one, so the rest of this piece proposes specific answers you can adopt verbatim.

Casing: lowercase, forever, no exceptions

Most analytics tools treat Google and google as different values, because they are different strings. So the casing rule is the shortest one in this whole convention: everything is lowercase. Sources, mediums, campaign names, term, content - all of it, always.

The reason to allow zero exceptions is not pedantry; it is that exceptions require judgment, and judgment is exactly what fails at 6 p.m. on launch day. A rule with no cases to consider can be followed by a contractor hired yesterday and checked by a formula: =EXACT(A2, LOWER(A2)) in a spare column flags violations the moment they land in your sheet.

Delimiters: underscores inside values, and never spaces

Spaces in UTM values become %20 in URLs and mismatched variants in reports; ban them outright. That leaves hyphens versus underscores, and the honest answer is that either works if you pick exactly one. We recommend underscores inside values - paid_social, spring_launch - for one practical reason: it leaves the hyphen free to appear inside real-world names like product names or domains without ambiguity about whether it is a separator.

Whichever you choose, write it down as a rule about position too: delimiters separate words within a value, and structured values (see the campaign scheme below) separate their segments with the same character. One character, one meaning, no debates.

What each parameter is actually for

Half of UTM chaos is semantic drift - values that are individually tidy but answer the wrong question. The discipline that stops it is a one-line job description per parameter:

  1. utm_source - the specific platform or property the click left from: google, facebook, linkedin, newsletter.
  2. utm_medium - the channel class, from a closed list: cpc, paid_social, email, organic_social, referral, display.
  3. utm_campaign - which initiative paid for the click (structured; next section).
  4. utm_term - the keyword or audience, where applicable.
  5. utm_content - the specific creative or placement, for A/B distinctions.

The load-bearing rule: medium is a closed list. New mediums require a conversation; new sources merely require honesty.

A campaign naming scheme to steal

Campaign names carry the most information and suffer the most drift, so give them internal structure - fixed segments, fixed order, one delimiter:

{yyyymm}_{product}_{objective}_{descriptor}

For example: 202607_forms_leadgen_search_brand or 202609_forms_waitlist_promo. The date prefix sorts chronologically in any tool and instantly answers "which quarter was this." The product segment keeps multi-product accounts separable. The objective segment - from a closed list like leadgen, waitlist, retargeting - lets you aggregate across quarters. The descriptor is the one free-text segment, where launch-day creativity can live without contaminating anything parseable.

Structured names also mean your spreadsheet can decompose them: SPLIT(utm_campaign, "_") turns one column into four analyzable ones.

Where the convention should live: in the same spreadsheet

A convention in a wiki page is a convention nobody reads at link-building time. Put it where the links are made: a tab in the same spreadsheet that receives your leads. One tab lists the closed vocabularies - legal mediums, known sources, objective codes. A second tab is a URL builder: paste a landing page URL in one cell, pick values from dropdowns backed by the vocabulary tab (data validation makes them dropdowns), and a CONCATENATE formula emits the finished tagged URL.

This does two things at once. It makes the compliant path the lazy path, which is the only enforcement mechanism that survives deadlines. And it puts the vocabulary under version control by proximity - when someone adds a medium, everyone sees it appear in the dropdown.

Surviving people and quarters

Conventions do not decay because people are careless; they decay because people are plural. The freelancer tags campaigns the way their last client did. The new hire invents social_paid because nobody told them paid_social existed. Quarter over quarter, entropy wins unless something pushes back.

The push-back is review at the point of capture. Because every submission lands as a row with its UTM columns intact, drift is visible the week it happens - a filter on medium that returns a value not on the closed list is a five-minute Friday check. Compare that with discovering, at annual planning, that a third of the year's spend is tagged unparseably. The spreadsheet is not just the destination for the data; it is the tripwire for the convention. This is much of why we argue for real columns over inbox notifications in our review of form backends.

Repair at capture beats cleanup later

The counterargument deserves airtime: why not tag loosely and normalize in reporting? Mapping tables can translate Google and adwords to google after the fact, and every BI tool supports them. For historical data, that is exactly what you should do - the past cannot be re-tagged.

But as a strategy, cleanup-later loses on compounding. Every new consumer of the data - a pivot table, an offline conversion export keyed by campaign, a lead attribution report - needs the mapping applied again, correctly, forever. Garbage written is garbage rented, with interest. Ten minutes of convention at write time retires the whole debt.

Where SheetLink Forms fits

SheetLink Forms is deliberately dumb about your convention: the embed script captures utm_source, utm_medium, utm_campaign, utm_term, and utm_content exactly as they arrived, persists them across a multi-page journey, and writes them verbatim into named columns - along with the ad click IDs, as covered in capturing gclid in forms. No rewriting, no helpful normalization. What you tagged is what lands.

That neutrality is the point. The capture layer's job is fidelity; the convention's job is quality; the spreadsheet is where the two meet and where violations become visible. You can see the columns land in a public sheet on the live demo, and how it works shows the delivery path end to end.

FAQ

How many UTM parameters are there?

Five classic ones: utm_source, utm_medium, utm_campaign, utm_term, and utm_content. Google Analytics 4 also recognizes newer additions like utm_id and utm_source_platform. The convention in this post covers the five, which is what most tools and spreadsheets key on.

Should we tag internal links with UTM parameters?

No. Tagging a link from your own homepage to your own pricing page overwrites the visitor's real source with a fake one, destroying the attribution you worked to capture. UTM parameters belong only on links that enter your site from outside.

Do we still need utm_source=google if auto-tagging adds a gclid?

Yes, for legibility. The gclid is a machine key - perfect for conversion uploads, opaque to humans. UTM values are the readable labels your pivot tables group by. Capture both; they answer different questions.

What belongs in utm_content versus utm_term?

utm_term describes who or what was targeted - the keyword or audience. utm_content describes what was shown - the creative variant, headline, or placement. If you A/B test two ads against one keyword, they share a term and differ in content.

Can we fix historical mixed-case data retroactively?

In your spreadsheet, yes: add normalized columns with LOWER() plus a small mapping table for synonyms like adwords to google, and report on those. The original columns stay as evidence. Ad platform history generally cannot be re-tagged, which is another argument for conventions now.

Does fbclid or gclid replace the need for UTM tagging?

No - click IDs identify a click for the platform that issued it, but they are opaque and platform-specific. UTM parameters are the cross-platform, human-readable layer. A well-tagged URL carries both, and a well-built form captures both into separate columns.

How do we get an agency or freelancer to follow our convention?

Give them the URL-builder tab, not the rules document. A generator with dropdowns is easier than freehand typing, so compliance becomes the path of least resistance. Then spot-check the utm columns in your lead sheet weekly for values outside the closed lists.

Do UTM parameters affect SEO or page ranking?

They can create duplicate-URL noise if tagged pages get indexed, which is why tagged URLs should carry a canonical tag pointing at the clean URL - most site builders do this by default. They have no direct ranking effect; the risk is dilution, not penalty.

Your convention deserves a ledger

SheetLink Forms lands every submission with its UTM columns verbatim, so drift is visible the week it happens - free during beta.

Request an invite See the live demo

← Google Ads offline conversions, run from a spreadsheet fbclid and the economics of Facebook lead quality →