← Back to blog
Social Sharing

Twitter/X Card Validator: Why Your Links Preview Wrong (and How to Fix It)

Open Graph tags are the shared standard most platforms read — X is the outlier, with its own separate card system that a page can miss entirely while looking fine everywhere else.

By Rajhussain Kanani5 min read

Why a link can look fine on Facebook and broken on X

Open Graph tags (og:title, og:image, and friends) are the shared standard most platforms read for link previews — Facebook, LinkedIn, Slack, WhatsApp, iMessage all use them. X is the outlier: it reads Open Graph tags as a fallback, but its own preview card system — Twitter Cards — has a separate twitter:card tag that decides whether a link gets a large image card, a small thumbnail, or no image at all. A page with perfect Open Graph tags and no Twitter Card tag can still render as a bare, imageless link when shared on X, which is exactly why this is worth checking as its own step rather than assuming "the social tags are fine" covers it.

What the validator actually checks

  • twitter:card — the card type. summary_large_image is the standard choice for most content; plain summary renders a small square thumbnail instead.
  • twitter:title and twitter:description — fall back to the equivalent og: tags if missing, but can be set separately when you want different copy for X specifically.
  • twitter:image — falls back to og:image, but X has its own minimum dimensions and aspect ratio tolerances that don't perfectly match Facebook's.
  • Crawlability — X's card-fetching bot needs to actually reach the page; a login wall, a bot-blocking rule, or a robots.txt disallow silently kills the preview with no visible error on your end.

The exact one-tag gap

This is the single most common finding — Open Graph tags present and correct, one tag missing:

<meta property="og:title" content="Trail Runner X2">
<meta property="og:image" content="https://trailfoot.example.com/x2.jpg">
<!-- no twitter:card tag at all -->

On Facebook or LinkedIn, this renders a normal image card, because both read og:image directly. On X, without a twitter:card declaration, the link can render as plain text with no image at all — the page technically has an image tag, but nothing tells X's card system to use it. Fixed:

<meta property="og:title" content="Trail Runner X2">
<meta property="og:image" content="https://trailfoot.example.com/x2.jpg">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Trail Runner X2">
<meta name="twitter:image" content="https://trailfoot.example.com/x2.jpg">

Three lines added, none of them requiring new content — twitter:title and twitter:image here just repeat the Open Graph values, which is fine; you only need to diverge them if you specifically want different copy or a differently-cropped image for X than for everywhere else.

Paste a URL into CheckSEO's Twitter/X Card Validator to preview exactly how it renders as a card when shared on X — no signup.

Open the Twitter/X Card Validator

Common Twitter Card mistakes

1

No twitter:card tag

The single most common gap — Open Graph tags present, this one line missing, resulting in a bare or thumbnail-only preview on X specifically. Fix: add twitter:card as its own explicit tag, don't assume og: tags cover it.

2

Wrong card type for the content

Using plain summary (small square thumbnail) for content that would look much better as summary_large_image (full-width image) understates how good the preview could look for essentially the same effort. Fix: default to summary_large_image unless you have a specific reason not to.

3

Image too small or wrong aspect ratio

X's large-image card wants a minimum size and roughly a 2:1 aspect ratio; an image that's too small or square can get cropped awkwardly or rejected in favor of a smaller card layout. Fix: use an image at least 1200×630 for the large-image card type.

4

Page blocked from X's crawler

A robots.txt rule or a bot-blocking security tool that catches X's card-fetching bot along with unwanted scrapers produces a card with no preview at all, and nothing on your end will show an error. Fix: confirm the page is actually reachable by fetching it as X's bot would, not just in a normal browser.

5

Testing with a URL X has already cached

Like most social platforms, X caches card data per URL rather than re-fetching on every share — testing the exact same URL after a fix can keep showing the old, broken card. Fix: append a harmless query parameter to force a fresh fetch while confirming a fix worked.

Open Graph and Twitter Cards are two systems, not one

It's worth being explicit about why these need separate handling at all, since they clearly overlap. Open Graph is an open protocol originally built by Facebook and adopted broadly — most platforms that show link previews read it directly, no platform-specific tags needed. Twitter Cards predate wide Open Graph adoption and were built as X's (then Twitter's) own competing system; X added Open Graph fallback support later, but the fallback is exactly that — a fallback, checked only when the more specific twitter: tag is absent. A page optimized only for the more common standard is optimizing for every platform except the one that actually has its own separate spec.

What happens if you skip this entirely

A link shared without valid Twitter Card tags doesn't fail loudly — it just renders as plain, unremarkable text in the timeline, competing for attention against every other tweet that does have a large image card. The practical cost isn't a technical error anywhere in your stack; it's a meaningfully lower click-through rate on every link your brand, product, or content shares on X, silently, for as long as the gap goes unnoticed. For a business that shares links on X even occasionally — new blog posts, product launches, replies to customer questions — this is a small fix with a disproportionately visible payoff, since the card renders differently for every single person who sees the tweet, not just the ones who click.

Check your own page

CheckSEO's Twitter/X Card Validator fetches a URL and shows exactly how it will render as a card on X, flagging missing or misconfigured tags before you find out the hard way from a link that goes out looking broken.

Frequently asked questions

Why does my link look fine on Facebook but broken on X?

Facebook and most platforms read Open Graph tags directly. X has its own separate Twitter Card system with its own twitter:card tag — a page can have perfect Open Graph tags and still render as plain text on X if that one tag is missing.

What is the twitter:card meta tag for?

It tells X which card layout to render for a shared link — a full-width image card (summary_large_image), a small thumbnail card (summary), or falls back to no card at all if the tag is missing entirely.

Do I need separate twitter:title and twitter:description tags?

Not necessarily — they fall back to your og:title and og:description if not set. Only add them separately if you want different copy specifically for X than for other platforms.

Why does X still show my old card after I fixed it?

Like most social platforms, X caches card data per URL rather than re-fetching on every share. Appending a harmless query parameter to the URL forces a fresh fetch so you can confirm the fix actually worked.

What image size does a Twitter large image card need?

A minimum of 1200×630 pixels at roughly a 2:1 aspect ratio is the safe target for the summary_large_image card type — smaller or oddly-cropped images can get rejected in favor of a smaller card layout.

Check your own site with the Twitter/X Card Validator.

Open Twitter/X Card Validator

More from the blog