Marketing tools
Build and validate campaign links, keep UTM names consistent, generate page metadata and social tags, and turn titles into stable URL slugs. Each tool handles one production task without an account, upload, or server-side project history. Draft destinations, campaign names, metadata, and titles remain in the browser where you entered them.
Every tool in this cluster
-
UTM naming consistency
Compares source, medium, and campaign values against an opt-in browser-local vocabulary, catching case, space, and punctuation drift without an account.
-
UTM validator
Exposes all five UTM parameters and refuses to guess when duplicate keys make attribution ambiguous, while also catching fragment placement and unknown UTM names.
-
UTM builder
Preserves unrelated query parameters, replaces rather than duplicates existing UTM values, and hands the result directly to the validator and naming tools.
-
Metadata and Open Graph
Generates ordinary metadata, canonical, Open Graph, and X card tags from one source, with local LinkedIn, X, Facebook, and Slack previews that flag likely truncation and state what they cannot verify.
-
Slug generator
Preserves Unicode by default, provides an explicit ASCII mode, handles titles in bulk, and reports collisions instead of inventing numbered URLs.
-
Why UTM names split reports
Explains the split as exact-string matching rather than an analytics bug, then hands the reader a local checker that flags drift against a vocabulary saved in this browser.
-
Link preview not showing
Orders the causes by how often they are the answer, leads on the per-platform cache rather than image dimensions, and explains why a preview can be right in one app and wrong in the next on the same day.
Which tool for which job?
Four of these touch campaign links and two touch publishing. They're separate pages because they're separate decisions.
| Your situation | Tool |
|---|---|
| Making a tagged link | UTM builder |
| A link that looks wrong | UTM validator |
| A valid link that disagrees with last month's | Naming consistency |
| Titles that need to become URLs | Slug generator |
| Metadata and social cards for a page | Metadata and Open Graph |
Google's Campaign URL Builder will produce a tagged URL, and it's the right tool when you already have an account and want the official form. The work this cluster is for happens around that.
Why do Facebook and facebook become two rows in my report?
Because campaign parameters are exact strings, and analytics platforms group by the exact string. That's the data model, not a glitch in any particular product.
A source of Facebook and a source of facebook are two rows.
So are paid_social and paid-social. So are
fb and facebook. Your quarter's numbers get split across them,
and the split is invisible until someone adds up the report and finds the total short.
The mechanism is walked through in why UTM names split your reports, which then hands you the checker.
Why is validation separate from naming consistency?
They catch different failures, and one can pass while the other fails badly.
The validator is about structure. It parses your
URL with the same URL model a browser uses and exposes all five conventional parameters:
utm_source, utm_medium, utm_campaign,
utm_term, and utm_content. It flags missing values, empty tags,
stray whitespace, unknown UTM names, and parameters sitting after the fragment, where
analytics won't see them.
It also refuses to guess. A URL with two utm_source values is syntactically
valid and semantically ambiguous, so the validator says the attribution is ambiguous
rather than picking one and moving on.
None of that catches your real problem, which is usually that the link is perfectly
formed and uses paid_social when the rest of the quarter used
paid-social. That's what the
naming consistency checker is for. It
compares a tagged URL against spellings you explicitly saved in this browser and flags
case, punctuation, and spacing drift.
The saved vocabulary holds source, medium, and campaign spellings only. Never the destination URL. It lives in this browser, it never reaches a server, and clearing it removes it immediately.
What does the metadata generator actually generate?
Ordinary meta tags, Open Graph tags, and X card tags, all from one set of fields, so the three can't drift out of sync the way hand-written tags do.
You get local previews for LinkedIn, X, Facebook, and Slack, which is where truncation and missing fields become obvious. Two honest limits on those previews. They're approximate renderings rather than platform emulators. And the image URL is displayed but never loaded, so pasting a private or signed draft URL doesn't fire a request at it.
That means the page can't confirm your image exists or that your canonical resolves. It checks the shape of your metadata, not the truth of it.
What breaks a URL slug?
Accents, punctuation, and two titles that collapse to the same string.
The slug generator keeps Unicode by default and offers an explicit ASCII mode when your stack needs it, so you choose rather than discovering the transliteration after publishing. It takes titles in bulk, which is how you actually work when a content calendar lands.
On collisions it reports them instead of silently appending a number. A slug ending in
-2 that you didn't ask for is a URL nobody will guess and a redirect
somebody will forget.
Why aren't these one workspace?
Building, validating, checking names, slugging, and writing metadata are five decisions that happen at different moments. Folding them into one screen would ask you for information unrelated to the thing you came to do.
The pages link to each other where their outputs genuinely connect. The builder hands its result to the validator and the naming tools. That's a workflow, not a workspace.
What does "runs in your browser" mean here?
It means these tools parse text that's already on the page. They don't visit your landing page, call an analytics platform, or transmit the campaign URL anywhere.
There's a real consequence you should know about. Because nothing is fetched, these tools can't follow a redirect chain or read the tags a live page is currently serving. They check what you paste. For a draft URL that isn't published yet, that's the only thing that could work anyway.
The build fails if an unexpected network request is introduced, so the claim is enforced rather than asserted. Each page also shows its own measured request count while you use it. More in how we build tools.
Questions
Will the validator tell me if my link is tracking correctly?
It tells you whether the link is well formed and unambiguous. Whether your analytics property is configured to receive it is a different question, and one this page can't see from the URL alone.
Should I use lowercase for everything?
It's the common convention and it removes a whole class of drift. The thing that matters more is picking one convention and holding it, which is what the saved vocabulary is for.
Where should the UTM parameters go in the URL?
In the query string, before any fragment. A parameter placed after the # never
reaches your analytics platform, because browsers do not send the fragment to a server at all.
The link still works, the page still loads, and the campaign silently reports as direct traffic.
That is the failure the validator flags specifically, because nothing about the URL looks wrong
to a person reading it.
Does the saved vocabulary sync between my devices?
No. It's local to the browser you saved it in. That's the trade for having no account: nothing to log into, and nothing following you between machines either. If a team needs one shared vocabulary, keep the canonical list wherever your team already keeps decisions, and use the checker to catch links that have drifted from it.
Related tools
For scheduling a campaign rather than tagging it, use the date and time tools. Material changes land in the changelog.