How to Validate OG Tags Before Publishing a Campaign

A campaign landing page can load perfectly and still fail silently — when og:image is missing, LinkedIn and X render a plain text link instead of a rich preview card, and click-through rates drop without any obvious error. Validating OG tags before publishing means running a quick inspection of the actual HTML that social platforms read, not just loading the page in a browser. This guide explains which OG tags matter for campaign links, what breaks when they're missing, and how to validate them in a single command with mlz inspect before any campaign link goes live.

Terminal showing mlz inspect command with open_graph warning for missing og:image, next to a clipboard report panel showing og:title and og:description as passing but og:image marked as MISSING with a red indicator

Why broken OG tags silently kill campaign engagement

Open Graph tags are HTML meta tags in the <head> of your landing page that tell social platforms what to show in a link preview. When a user shares your campaign link on LinkedIn, X, or Facebook, the platform fetches the destination URL and reads these tags to build the preview card. If the tags are missing or malformed, the platform either shows a blank preview, a tiny thumbnail, or falls back to plain text.

The damage is invisible in your analytics until you look at channel-level engagement. Your campaign link generated 2,000 impressions, but click-through rate was 0.4% — about a third of what a properly configured rich preview card typically achieves. The link was shared, the page loaded, UTM parameters were tracked. Nothing looked broken. But every share rendered as a text URL, not a card, because og:image was missing.

OG tag failures are particularly common with:

  • Landing page builders — many require you to manually enter OG metadata in a settings panel separate from the page editor. It's easy to miss this step, especially when duplicating an existing page as a template.
  • CMS-generated pages — default OG tags may be set at the template level and not overridden for campaign-specific pages, resulting in incorrect or generic title/description/image values.
  • New landing pages — pages created quickly for a campaign launch often have placeholder content or incomplete metadata until the page is "finalized," which may happen after the campaign assets are already in distribution.
  • Cached previews — social platforms cache OG data aggressively. If you publish a page with missing tags, some platforms will serve the empty preview for hours or days even after you add the tags, unless you use the platform's cache-clearing tool.

The 6 essential OG tags every campaign landing page needs

For campaign links shared on social platforms, these six tags determine how the preview renders. All six should be present before any campaign link is published:

og:title
The headline shown in the preview card. Use a descriptive title specific to this campaign page, not the generic site name. Most platforms truncate at around 70 characters. If this tag is missing, the platform uses the page's <title> element as a fallback — but the fallback behavior varies by platform and is not reliable.
og:description
The body text below the title in the preview card. Should complete the action described in the title — typically the value proposition or offer. Platforms truncate at roughly 200 characters. Missing og:description results in blank preview body text or a fallback to the meta description, which may not be optimized for social context.
og:image
The image displayed in the preview card. This is the highest-impact OG tag: a missing or broken og:image degrades the preview from a rich card to a text snippet. Image dimensions matter — 1200×630 is the standard for LinkedIn, X, and Facebook. See the Open Graph tags guide for platform-specific requirements.
og:url
The canonical URL of the page. Set this to the clean destination URL without UTM parameters. Some platforms use og:url as the canonical version for deduplication — if multiple URLs with different UTM parameters point to the same page, setting a consistent og:url prevents each variation from being treated as a separate piece of content.
og:type
For campaign landing pages, use article or website. The type affects how some platforms categorize the content in their indexes. Most campaign pages should use website unless the page is genuinely editorial content.
twitter:card
Technically a Twitter-specific meta tag, not an OG tag, but essential for X (Twitter) previews. Use summary_large_image for campaign pages with a prominent image. Missing this tag means X renders only a small thumbnail or no image at all, regardless of what og:image is set to.

How to validate OG tags automatically with mlz inspect

The mlz inspect command fetches the destination URL and checks its OG tags, Twitter Card tags, canonical URL, favicon, and page load time — returning structured JSON. Pass the landing page URL as the argument:

mlz inspect https://example.com/campaign-landing

The full JSON response includes the raw OG values alongside the check results, so you can see exactly what tags are present and what's missing:

mlz inspect — JSON output
{
  "url": "https://example.com/campaign-landing",
  "success": true,
  "checks": [
    { "check": "fetch", "status": "pass",
      "message": "Page fetched successfully (287ms)." },
    { "check": "open_graph", "status": "warn",
      "message": "Open Graph tags incomplete: og:image missing.",
      "details": { "missing": ["og:image"] } },
    { "check": "twitter_card", "status": "pass",
      "message": "Twitter Card present (type: summary_large_image)." },
    { "check": "favicon", "status": "pass",
      "message": "Favicon found." },
    { "check": "load_time", "status": "pass",
      "message": "Page load time: 287ms." }
  ],
  "open_graph": {
    "title": "Q2 Campaign — Special Offer",
    "description": "Save 40% on all plans this quarter. Limited time only.",
    "image": null,
    "type": "website",
    "url": "https://example.com/campaign-landing"
  },
  "twitter_card": {
    "card": "summary_large_image",
    "title": "Q2 Campaign — Special Offer",
    "image": null
  }
}

The open_graph.image field is null — the tag is missing from the page. The check reports "status": "warn" with a details.missing array naming exactly which tags are absent. This is the information you need to take back to whoever controls the landing page's HTML and request the addition before the campaign goes out. For a full breakdown of how to check OG tags on any page, see How to Check if Your Landing Page Has OG Tags.

Walkthrough: catching a missing og:image before launch

Here is how a practical pre-launch OG check works. The campaign landing page has been built and the UTM link has been generated. Before the link goes into any email or social post, run:

mlz inspect https://example.com/q2-campaign --format json

Parse the result for the open_graph.image field. If it is null or the open_graph check has "status": "warn", the page is not ready. The fix:

For landing page builder platforms (Unbounce, Instapage, Webflow)
Look for the page's SEO or sharing settings panel. There is usually a dedicated field for the social preview image separate from the hero image on the page. Add an image at 1200×630 pixels. Save and republish the page. Then run mlz inspect again to confirm the tag now appears in the response.
For CMS-generated pages (WordPress, HubSpot)
Check whether an SEO plugin (Yoast, Rank Math) or the CMS's built-in social settings are configured for this page. The og:image may be inheriting from a site-level default that was never set. Edit the page and set a campaign-specific social image. Confirm with mlz inspect after publishing.
For custom-built pages
Add the tag directly to the page's <head>: <meta property="og:image" content="https://example.com/images/q2-campaign-og.png">. The image must be publicly accessible — a path that requires authentication or is behind a CDN with access controls will return a 401 or 403 when social platforms try to fetch it, effectively making it a missing image even if the tag is present. Check with mlz inspect after deploying.
For both og:image and twitter:image
Some platforms do not inherit og:image for Twitter Card previews — X specifically looks for twitter:image in addition to (or instead of) og:image. If your twitter_card.image field is also null in the inspect output, add <meta name="twitter:image" content="..."> alongside your OG image tag.

After fixing the issue, re-run mlz inspect to confirm the tag is present before publishing. Do not rely on social platform debugger tools alone — they show cached results and may not reflect the current page state for 24-48 hours.

Adding OG tag validation to your campaign launch process

OG tag validation is most effective when it is a non-skippable step in the campaign launch workflow, not an optional check done after the link is already in distribution. The two practical integration points:

As part of the pre-publish checklist
Add mlz inspect [destination-url] as a required step before any campaign link is shared with the distribution team. For teams using a shared checklist document, the inspector output — with its explicit pass/fail for each OG tag — gives whoever owns the check a clear, verifiable result rather than a subjective "I looked at it in a browser." The landing page validation guide covers the full 8-point pre-publish checklist that OG tags are part of.
As part of a CI/CD pre-deploy pipeline
For teams that build landing pages in a repository and deploy them through a pipeline, running mlz inspect in the deploy step catches OG tag issues before they reach production. Parse the JSON for "status": "warn" or "status": "fail" on the open_graph check and fail the deploy if either condition is true. See Automating Social Preview Checks for a complete GitHub Actions workflow that does this.

The goal is to catch OG tag issues before campaign assets are distributed — email templates are loaded, social posts are scheduled, ad copy is drafted. Once a campaign is in motion, fixing an OG tag issue means manually purging caches on every platform that has already fetched and stored the broken preview data. For OG tag validation for campaign links specifically, see OG Tag Validation for Campaign Links for the complete pre-launch walkthrough.

FAQ

Does mlz inspect check og:image dimensions?
The inspect output reports whether og:image is present and provides the image URL. It does not fetch and measure the image dimensions directly in the current version — that check is part of the full mlz preflight workflow which calls the inspect and URL validation steps together. For image dimension requirements by platform, see the Open Graph tags guide. If you need to validate dimensions specifically, check the image URL that mlz inspect returns using your preferred image inspector.
Can I validate OG tags on a staging URL before pushing to production?
Yes — pass the staging URL directly to mlz inspect. The command fetches the URL from wherever it's running, so any publicly accessible URL (staging, preview, even localhost with a tunnel like ngrok) works the same as a production URL. Validating on staging is better practice than waiting for production, since it catches issues before they can be cached by social platforms.
My page loads correctly in a browser but og:image shows as null. Why?
The most common cause is that the og:image tag is added dynamically via JavaScript after the page loads. Social platforms and mlz inspect fetch the raw HTML without executing JavaScript — they read only what is in the initial server-rendered HTML. If your OG tags are injected by a JavaScript framework on the client side, they will not be visible to social crawlers or to mlz inspect. The solution is to ensure OG meta tags are rendered server-side in the initial HTML response.
How often should I run mlz inspect on my campaign landing pages?
Run it once before the campaign link is first distributed, and run it again after any changes to the landing page during an active campaign. Landing page builders and CMS systems sometimes reset OG metadata when a page is edited, duplicated, or migrated. A page that had correct OG tags on launch can lose them silently after an update. Treat OG tag validation as part of any landing page edit, not just the initial launch.
What is the difference between mlz inspect and mlz preflight for OG tag validation?
mlz inspect checks the destination URL's metadata — OG tags, Twitter Card, favicon, load time — and returns a detailed JSON report. mlz preflight does everything mlz inspect does plus builds the UTM-tagged link, validates SSL and HTTP resolution, and checks the redirect chain, returning a single "ready" verdict. For OG-only validation of an existing URL, mlz inspect is the direct command. For a full pre-publish check that also generates and validates your campaign link, use mlz preflight.

Inspect your next campaign landing page in 30 seconds

Install MissingLinkz and run mlz inspect to check OG tags, Twitter Card, favicon, and load time before your campaign link goes out.

npm install -g missinglinkz

Free plan: 50 links/month. No credit card. See all commands in the SKILL.md reference.