How to Validate UTM Links Before Publishing
To validate UTM links before publishing, run a single automated check against your destination URL before any link goes live. That check should confirm the URL resolves, verify your UTM parameters are correctly formatted and will survive redirect chains, and inspect the landing page for social sharing readiness: Open Graph tags, Twitter Card meta, viewport, and page speed. Done manually this takes 15–20 minutes across multiple tools. Done with mlz preflight, it takes under 10 seconds. Here’s exactly how.
What “validating a UTM link” actually means
Many marketers think of UTM link validation as checking that the URL looks right: the right source, medium, and campaign values are present and correctly spelled. That’s one piece of it. But a UTM link can have perfect parameters and still fail silently in three ways you’d never catch by looking at the URL.
- The destination might not resolve
- A 404, a server error, or an expired domain returns nothing. You’ve paid for clicks to a dead endpoint. The URL looks correct; the page doesn’t exist. This is the kind of failure you only catch by actually hitting the URL with a request.
- Redirect chains might strip your parameters
- Your link goes to
http://example.com/campaign, which redirects tohttps://example.com/campaign, which redirects tohttps://www.example.com/campaign/. By the third hop, several common redirect configurations silently drop query parameters — including yourutm_source,utm_medium, andutm_campaign. The destination receives the click; Analytics records it as direct. Attribution is gone. - The landing page might not be ready for social sharing
- Missing
og:imagetags, no Twitter Card meta, non-mobile-responsive viewport — none of these are visible from the URL string. But they determine how your link renders as a social preview card when you paste it into LinkedIn, Twitter, or Slack. A missing OG image means a plain text URL where a rich preview card should appear. For paid social, that’s a significant CTR hit.
Real UTM link validation covers all three. It’s not a formatting check — it’s a full-stack check that simulates what happens when a real browser follows the link and what a social platform sees when it crawls the destination. The campaign link validation guide has the full breakdown of all 11+ checks involved.
The pre-publish link validation checklist
Before any campaign link goes live, run through these seven checks. If you’re validating manually, budget 15–20 minutes across three or four tools. If you’re using mlz preflight, this is one command that completes in seconds.
- 1. URL resolves with HTTP 200
- Confirm the destination returns a
200 OK. A404means the page doesn’t exist. A5xxmeans the server is down or the route is broken. Either scenario wastes every click you send there. Manual method:curl -I https://yoursite.com/landingand look at the status line. Automated:mlz preflightruns this as theresolutioncheck. - 2. HTTPS / SSL is valid
- Every browser displays a “Not Secure” warning for HTTP-only pages. If your destination URL starts with
http://or has an expired certificate, users will see that warning and bounce. Most landing pages are correctly HTTPS in 2026 — but always verify, especially for microsites, event landing pages, and client domains. - 3. Redirect chain is short and UTM parameters survive
- Acceptable: one redirect (usually http → https, or bare domain to www). Investigate: two or more hops. Blocking: UTM parameters are stripped at any hop. The redirect check has to follow the full chain with your UTM parameters appended and confirm they’re present on the final URL. This cannot be done by visual inspection of the link — it requires actually following the redirect.
- 4. OG tags are present and complete
- Check for
og:title,og:description, andog:image. All three are required for a rich preview on LinkedIn, Facebook, and Slack.og:imageis the most commonly missing, and its absence produces a blank preview — a plain text URL where an image card should be. Manual method: browser DevTools → Elements → search forog:. Automated:mlz preflightreturns the full set inopen_graph. - 5. Twitter Card meta is configured
- X (Twitter) uses its own card system alongside OG tags. Without
twitter:card,twitter:title, andtwitter:image, your link renders as plain text in the feed. Twitter Card and OG tags partially overlap but are not identical — check both separately. - 6. UTM parameters are properly formatted
- All values lowercase, no spaces (use hyphens), no special characters that require percent-encoding. GA4 is case-sensitive:
LinkedInandlinkedinappear as two separate sources in your reports. See the UTM naming convention guide for the complete formatting rules. - 7. Page load speed is acceptable
- Pages that take more than 1.5 seconds to respond get flagged as slow; pages over 3 seconds should be investigated before launch. Google’s own research estimates a 7% conversion drop per additional second of load time. Slow pages hurt both paid campaigns (quality score) and organic traffic (Core Web Vitals).
Manual validation vs. automated
Manual validation works for a single link if you have time and know which tools to use. It breaks down at scale and under time pressure — both common conditions in marketing.
Manual path: Open the URL in a browser to check resolution (1 min). Use curl -I to inspect the status code and redirect hops (2 min). Open DevTools to inspect meta tags (5 min). Use Facebook’s Sharing Debugger or LinkedIn’s Post Inspector to preview the social card (3 min each). Manually inspect your UTM parameter string for casing and formatting errors (2 min). Total: 15–20 minutes, depending on what you find. And if the validation reveals a problem, you fix it and start over.
Automated path with mlz preflight: One command, under 10 seconds, deterministic results. Every check runs in parallel. The output is a structured report — pass/warn/fail per check — that tells you exactly what needs fixing. What mlz preflight checks vs. other tools has the full comparison, including what Google’s Campaign URL Builder and UTM.io miss.
For teams validating 10+ links per campaign, or for campaigns validated in CI/CD, manual validation isn’t viable. One person checking 20 links manually takes four hours. One CI job checking 20 links takes 30 seconds.
Walkthrough: validating a LinkedIn campaign link
Here’s a realistic pre-publish scenario. You’re launching a summer sale campaign on LinkedIn. The destination is https://acme.com/lp/summer-sale. You need a tracked URL with the correct UTM parameters, and you need to confirm the landing page is ready before spending a dollar on promotion.
Install MissingLinkz if you haven’t already:
npm install -g missinglinkz
Run the preflight check:
mlz preflight --url "https://acme.com/lp/summer-sale" --campaign "summer-sale-2026" --source "linkedin" --medium "social"
The output (human format):
tracked_url: https://acme.com/lp/summer-sale?utm_source=linkedin&utm_medium=social&utm_campaign=summer-sale-2026
checks:
PASS ssl URL uses HTTPS.
PASS resolution Destination responded with 200 (214ms).
WARN redirects 1 redirect detected (http → https). UTM parameters preserved.
PASS response_time Page load time: 340ms.
PASS og_tags All essential Open Graph tags present.
PASS twitter_card Twitter Card tags configured.
PASS viewport Viewport meta tag present.
PASS canonical Canonical URL matches destination.
PASS favicon Favicon found.
PASS utm_valid All required UTM parameters present and formatted correctly.
PASS utm_preserved UTM parameters preserved through redirect chain.
summary: 10 passed · 1 warning · 0 failed
ready: true
verdict: Link is ready to publish. Review the redirect warning when you have time.
The tracked URL is ready to copy into your LinkedIn post. All the substantive checks passed. The one warning — a single http-to-https redirect — is common and acceptable: UTM parameters survived the hop. If the warning had said “UTM parameters stripped”, that would be a blocking issue requiring a fix before launch.
For automation and agent workflows, add --format json to get a machine-readable response:
{
"ready": true,
"tracked_url": "https://acme.com/lp/summer-sale?utm_source=linkedin&utm_medium=social&utm_campaign=summer-sale-2026",
"checks": [
{ "check": "ssl", "status": "pass", "message": "URL uses HTTPS." },
{ "check": "resolution", "status": "pass", "message": "Destination responded with 200." },
{ "check": "redirects", "status": "warn", "message": "1 redirect. UTM parameters preserved." },
{ "check": "og_tags", "status": "pass", "message": "All essential Open Graph tags present." },
{ "check": "twitter_card", "status": "pass", "message": "Twitter Card tags configured." }
],
"summary": { "total": 11, "passed": 10, "warnings": 1, "failed": 0 },
"recommendation": "Link is ready to publish. Review the redirect warning when you have time."
}
The ready: true flag is the key signal. Any automated workflow, script, or AI agent can make a go/no-go decision based on that single boolean. If ready is false, the checks array tells you exactly which checks failed and why.
Reading the output: passes, warnings, and failures
Every check in the preflight report has one of three statuses. Understanding the difference determines whether you publish, investigate, or block.
- PASS — proceed
- The check ran and found no problems. Nothing to do. When all checks pass,
readyistrueand you can publish with confidence. - WARN — investigate before publishing
- Something was found that isn’t necessarily broken but warrants attention. A single redirect (usually http → https) is a common warning — acceptable if UTM parameters are preserved. A slow response time (above 1.5 seconds but below 3) is another warning-level finding: not blocking on its own, but worth investigating before driving paid traffic. Warnings don’t set
readytofalseon their own unless your configuration treats them as failures. - FAIL — must fix before publishing
- The check found a definite problem that will cost you clicks, attributions, or user trust. A failed resolution (404, 500), a missing
og:image, stripped UTM parameters, or an SSL error are all failures. When any check fails,readyisfalse. Do not publish until failures are resolved.
When a warning is acceptable vs. blocking
Not all warnings carry the same weight. Here’s how to evaluate the most common ones.
- Redirect warning (1 hop, UTM parameters preserved) — acceptable
- A single http-to-https redirect with UTM parameters intact is the most common warning and almost always acceptable. Google recommends no more than three redirects total; one is fine. The critical qualifier is “UTM parameters preserved” — if that line says “stripped” instead, it’s a blocking issue.
- Redirect warning (2+ hops, UTM preserved) — investigate
- Multiple redirect hops add latency and increase the risk of parameter stripping. If you see this before a paid launch, clean up the redirect chain when possible. Two hops is technically workable; three or more is actively worth fixing.
- Response time warning (1.5–3 seconds) — investigate
- Pages in this range are slower than ideal. For organic social, this may be acceptable. For paid search or paid social where you’re paying per click, a slow page is burning money on bounces. Investigate with your engineering team before a large spend.
- Missing favicon — low priority
- Favicons affect how your site appears in browser tabs. They don’t affect campaign attribution or social previews directly. Flag it, don’t block on it.
- No CTA detected in post copy — consider before publishing
- If you provided post copy via
--copy, MissingLinkz checks for common call-to-action phrases. Posts without a clear CTA consistently underperform. This is a nudge, not a hard stop — but it’s worth reviewing before you publish. - FAIL on resolution, SSL, or UTM stripping — always blocking
- A dead destination, an expired SSL certificate, or UTM parameters that don’t survive the redirect chain are all campaign-breaking failures. Fix them before any link goes live.
Frequently asked questions
- Do I need to validate every UTM link I publish?
- Every link that will receive significant traffic — paid campaigns, email blasts, social posts — should be validated before launch. For high-volume campaigns, the cost of skipping validation is consistently higher than the cost of running a check. For low-traffic internal links or quick tests, validation is optional but still takes under 10 seconds.
- What if my URL uses intentional redirects?
- Intentional redirects — a URL shortener, a campaign tracking redirect, a branded domain alias — are fine if they preserve UTM parameters. The validation confirms preservation. What you’re checking isn’t whether redirects exist, but whether your tracking survives them.
- Can I validate multiple links at once?
- Yes. For bulk validation in a shell loop or CI pipeline, see the CI/CD automation guide. For programmatic bulk building and validation, the programmatic UTM building guide covers the npm and REST API approaches.
- What’s the difference between
mlz preflightandmlz check? mlz checkvalidates the destination URL only — resolution, SSL, redirects, and response time.mlz preflightdoes everythingmlz checkdoes, plus builds the UTM-tagged link, inspects the landing page for OG tags and Twitter Cards, and validates any post copy you provide. Preflight is the complete pre-publish workflow; check is the URL-only subset.- Does validation require an API key?
- No. Basic UTM building and offline validation run without an API key. Link storage, campaign management, and usage tracking require a free account. Run
mlz auth registerto create one, or start without a key and register when you need storage.
Related reading
Validate your next campaign link in 30 seconds
Install MissingLinkz and run your first preflight check before the next link goes live.
npm install -g missinglinkz
mlz preflight --url "https://yoursite.com/landing" --campaign "your-campaign" --source "linkedin" --medium "social"
Free for up to 50 links/month. No credit card required.