Growth Performance

Campaign Tagging That Does Not Fall Apart at Scale

Key takeaways
  • Consider a single channel tagged across a year by four people.
  • You need four dimensions to do real work, and each needs a defined role and a controlled vocabulary.
  • The governance answer is unpopular and it is the only one that works.

Campaign tagging is the least interesting subject in performance marketing and one of the most consequential. Nobody gets promoted for it. But every retrospective analysis you will ever run depends on tags that were typed by hand, at speed, by people under pressure to launch. When those tags are inconsistent, the analysis does not get harder. It becomes impossible.

The failure is silent and it is cumulative. Nothing errors. Reports keep generating. You only find out when someone asks a question that spans nine months, and the answer requires reconciling forty three spellings of the same campaign.

Free typed values destroy retrospective reporting

Consider a single channel tagged across a year by four people. The source arrives as facebook, Facebook, FB, fb-ads and meta. The medium arrives as cpc, ppc, paid, paid-social and Paid_Social. Reporting tools treat every variant as a separate row, because they are separate strings.

Three things break at once. Aggregation breaks: your channel totals are spread across rows nobody thinks to sum. Filtering breaks: a filter for one spelling silently excludes the rest. Trend analysis breaks worst of all, because a naming change in March creates the appearance of a channel dying and a new one appearing.

Casing deserves specific attention, because it is the most common and the most invisible. Most reporting systems are case sensitive on these values. The tag looks correct to a human reading it and wrong to the machine grouping it. Force everything lowercase, without exception, and remove the entire class of problem.

The same applies to separators. Pick hyphens or underscores, never both, never spaces. A space becomes an encoded character and now the value is unreadable in every report it touches.

And remember that none of this can be fixed retroactively at the source. You can remap values in analysis, one painful rule at a time, forever. You cannot go back and retag a campaign that already ran.

A taxonomy with four load bearing fields

You need four dimensions to do real work, and each needs a defined role and a controlled vocabulary.

Source is the specific platform the click came from. This is a closed list. Write down every platform you use, one canonical spelling each, and add to the list only through a deliberate decision. Ten to twenty values is normal even for a large programme.

Medium is the type of traffic, not the platform. Paid search, paid social, display, email, affiliate, referral, organic social, influencer. Keep this list very short, under a dozen values, and never let a platform name appear in it. Medium is how your channel groupings get built, so every extra value here fragments your top level reporting.

Campaign is the initiative. This is where structure pays. Use fixed positional segments rather than free text: something like objective, audience or offer, geography, and a start period. Positional structure means you can split the field later and analyse by any component, which free text never allows. Ban dates typed in inconsistent formats and ban internal jargon that will not survive a team change.

Content or creative is the specific asset or variant. This is the field most often left blank, and it is the one that makes creative analysis possible. Identify the asset, the format and the variant. If the same creative runs across three campaigns, it should carry the same content identifier in all three, otherwise you cannot ask which creative works.

Write all of this into a one page standard with the allowed values, the casing rule, the separator rule and worked examples. One page. If it runs longer, nobody reads it and compliance collapses.

Who is allowed to create a tag

The governance answer is unpopular and it is the only one that works. Nobody types a tag by hand.

Tags come from a builder that enforces the standard: dropdowns for source and medium fed by the approved lists, structured inputs for the campaign segments, automatic lowercasing, automatic separator handling. A spreadsheet with data validation and a formula does this adequately, and adequately is the right ambition. The tool matters less than the constraint.

Name a single owner of the vocabulary. New sources and mediums are added only by that person, only on request, and the request should be resisted more often than granted. Most requests for a new medium are actually requests for a new campaign value, which needs no vocabulary change at all.

Extend the rule to agencies and to internal teams outside marketing. Agencies arrive with their own conventions and apply them by default, which is worth a conversation at the start of the engagement rather than a discovery nine months in. The same goes for retention teams, sales teams sharing links, and anybody producing a QR code for offline collateral. Every link into your property is a reporting decision.

Auditing what you already have

You are almost certainly starting mid mess, so run the audit before writing the standard, because the mess tells you what the standard needs to cover.

Pull the full distinct list of source, medium, campaign and content values from the last twelve months. Sort by traffic volume. The distribution is usually brutal: a handful of values carrying most of the traffic and a long tail of near duplicates, typos and abandoned experiments.

Work top down. Map each high volume variant to its canonical value and build a remapping table so historical reporting can be grouped correctly. Fix the live campaigns that are still spending under wrong tags. Leave the low volume tail alone, because the effort exceeds the value.

Then read the patterns. Untagged paid traffic arriving as direct means links went out with no tags at all. Self referrals mean internal links carry tags they should not.

Set a monthly check on new distinct values since the last review, and trace anything unrecognised to whoever created it. Run regularly, it takes minutes and stops the problem reforming.

Channels that strip your parameters

Some traffic will arrive with your tags removed, and no amount of discipline prevents it. Messaging apps and in app browsers rewrite or truncate links. Some social platforms shorten aggressively. Link shorteners and QR redirects may drop parameters depending on how they are configured. Email clients with link protection can rewrite destinations. Offline to online journeys carry nothing by definition.

Handle these deliberately rather than pretending they are noise. Use a distinct destination path or a dedicated landing page for the channel, so arrival on that page is itself the signal. Use a short code or a promotional code that only appears in one place. For offline and word of mouth, a self reported source question at checkout gives directional information that no parameter can.

Then be explicit in reporting about what is unattributable. A clearly labelled bucket of traffic you cannot source is more useful than the same traffic misfiled as direct, because the label prompts the right question and the misfiling produces a wrong answer that looks confident.

None of this is clever work. It is a vocabulary, a builder, an owner and a monthly review. Unglamorous, which is precisely why it survives contact with a busy quarter.

The daily brief

Never miss a move

The moves that move money, every morning.

One email a day. No spam, ever.

FAQ

Quick answers.

Most reporting systems treat values as case sensitive strings, so one spelling and its capitalised twin become separate rows. The tag looks correct to a person reading it and wrong to the machine grouping it. Forcing everything lowercase at the point of creation removes the entire class of problem permanently.
Nobody by hand. Tags should come from a builder that enforces the standard through dropdowns, structured campaign segments and automatic lowercasing. A validated spreadsheet is sufficient. One named person owns the approved source and medium lists, and most requests to extend those lists are actually campaign level requests that need no vocabulary change.
Pull every distinct value, sort by traffic volume, and work top down. Map high volume variants to canonical values in a remapping table so historical reporting groups correctly, fix live campaigns still spending under wrong tags, and ignore the low volume tail where effort exceeds value. Then run a monthly check on newly appearing values.
Design around them rather than treating the traffic as noise. Use a dedicated landing path or a channel specific promotional code so arrival is itself the signal, and add a self reported source question at checkout for offline journeys. Then report unattributable traffic in a clearly labelled bucket instead of misfiling it as direct.

Where Zane fits

Related insights

India's Commerce Engine

Put it
to work.

hello@zane.marketing

Book a meeting