Home/ Guides/ X card not showing image

Guide · Open Graph

Your X card is a bare link.

You posted to X (Twitter) and the image card didn't render — just a plain link, or a tiny square thumbnail. Five things cause it, and the first one fixes the vast majority. Run the checklist top to bottom.

Updated June 5, 2026 · by slsh.me

The short answer

Set twitter:card to summary_large_image.

tag summary_large_image image 1200×630, HTTPS size under 5 MB bot Twitterbot allowed

X only draws the big image card when twitter:card is explicitly summary_large_image. Missing, you get a bare link; set to summary, you get a small square thumbnail. After the tag, make sure og:image (X falls back to it) is an absolute HTTPS URL under 5 MB, Twitterbot isn't blocked in robots.txt or your WAF, and the cache isn't holding a stale empty scrape.

Don't want to hand-set Twitter tags? Every slsh.me short link ships twitter:card = summary_large_image with a 1200×630 image already wired — the big card renders on X out of the box. Free.

The checklist.

In order of how often each one's the culprit. Stop when the card renders.

1

twitter:card = summary_large_image

View source and search for twitter:card. If it's missing or set to summary, that's it. Add <meta name="twitter:card" content="summary_large_image"> in the <head>. This single line is the fix in most cases.

2

Image is absolute, HTTPS, and reachable

X reads twitter:image, then falls back to og:image — so one is enough, but it must be a full https:// URL, not /og.png. A relative path or an http:// URL resolves in your browser and silently drops for the scraper.

3

Under the size cap, right dimensions

Use 1200×630 (1.91:1) and keep the file under 5 MB. Oversized images are skipped and you fall back to a bare card. Square 1:1 art renders as the small thumbnail — use the wide image for the large card. See the image size guide.

4

Twitterbot isn't blocked

Check robots.txt and any user-agent / WAF / Cloudflare rule doesn't block Twitterbot. A blocked bot fetches an empty page and renders a bare card — even when every tag is perfect for human visitors.

5

Bust the cache

X retired its public Card Validator, and its cache is keyed on the exact URL. If the tags are right but the old (empty) card persists, append ?v=2 so X treats it as a new link and re-scrapes. See the refresh-a-cached-preview guide.

Small thumbnail vs the big card.

There are two Twitter Card types, and the tag value picks which one X draws. summary renders a small square thumbnail beside the text — the "tiny image" people complain about. summary_large_image renders the full-width 1200×630 banner most posts want.

If your card shows a small image, you're almost certainly on summary (or X guessed it because the tag was absent). Change the value to summary_large_image, confirm the image is the wide 1.91:1 ratio, re-scrape, and the small card becomes the large one. The twitter:title and twitter:description tags are optional — X falls back to your og: values, so don't bother duplicating them.

Test it before you tweet.

X's own validator is gone, so the safe move is to check the live tags off-platform before posting — then you're not burning a post (and caching a bad card) to find out it's broken.

The free slsh.me Open Graph checker fetches your page live and renders the real X card — flagging a missing summary_large_image, a relative or oversized image, or a blocked scraper — alongside how the same link looks on LinkedIn, Facebook, Slack and Discord.

Check your X card on the free checker

Or skip the tags entirely: every slsh.me link ships the large X card pre-wired, free.

Questions

Why is my Twitter/X card not showing an image? +
The most common cause is a missing or wrong twitter:card tag. X only draws the large image card when twitter:card is set to summary_large_image. If it's absent or set to summary, you get a bare link or a small thumbnail. After that, check that og:image is an absolute HTTPS URL under 5 MB, the scraper isn't blocked, and the cache isn't stale.
What size should a Twitter/X card image be? +
For the large card, use 1200×630 with a 1.91:1 ratio — the same image that works for Open Graph everywhere else. X supports JPG, PNG, WEBP and GIF up to 5 MB. The small summary card uses a 1:1 square of at least 144×144. One 1200×630 image keeps every platform consistent.
Do I need twitter:image if I already have og:image? +
No. X falls back to og:image when twitter:image is missing, so you don't need to duplicate it. The tag that matters is twitter:card = summary_large_image — without it X won't render the big card no matter how many image tags you set.
I added the tags and X still shows no image — why? +
Almost always a stale cache or a blocked scraper. X caches per URL and its public Card Validator is gone, so append ?v=2 to force a fresh scrape. Also confirm robots.txt and any WAF or user-agent rule don't block Twitterbot — a blocked bot sees an empty page and renders a bare card.

The big card, every time.

Shorten any URL with slsh.me and it ships twitter:card = summary_large_image with a 1200×630 image wired in — the full X card renders without you touching a single meta tag. Plus live click analytics, free.

Create a link with slsh.me

Free forever · see pricing