Twitter Card Validator
Check your twitter: tags and preview the card X will show — no login, and no X account needed.
A browser is not allowed to read another site's page, so this request goes through our server. The page is fetched, its head is read, and it is thrown away — nothing is stored or logged.
Enter a page URL to see its tags and how the link will look.
Table of contents
X is the one that behaves differently
Every other major platform reads Open Graph and is done. X reads its own twitter: tags first and only falls back to Open Graph for anything it does not find — which means X is the one place a page can show something nobody intended.
The precedence is total. If twitter:title exists, og:title is not consulted. That is fine when it is deliberate, and a genuine trap when it is not: you update your Open Graph tags, check the link on LinkedIn, see the new headline, and X keeps showing the old one because a twitter:title you forgot about is still sitting there. This tool shows both cards side by side for exactly that reason.
And the card type has to be asked for. X defaults to the small square card. The wide image everyone actually wants only appears with twitter:card = summary_large_image, and that tag has no Open Graph equivalent to fall back to — so it is the one twitter: tag nearly every page genuinely needs.
The practical advice: set og: tags properly, add twitter:card, and add nothing else unless you specifically want X to differ. Fewer tags in two places means fewer chances for the two to drift apart.
Frequently asked questions
It does the part people used it for. X shut its Card Validator down and the preview it offered went with it, which is why so many people ended up guessing. This reads the same tags and applies the same fallback rules, so it shows what the card should contain. What it cannot do is tell you what X has already cached for a URL, because only X knows that.
Because twitter:card is missing or set to summary. X defaults to the small card and only shows the wide one when the page asks for summary_large_image by name. It is one line of HTML and it is the single most common reason a link looks worse on X than on LinkedIn.
No, and most pages should not bother. X falls back to Open Graph for the title, description and image, so a page with good og: tags already gets a good card. Add twitter: tags for two reasons only: to set summary_large_image, or to deliberately show something different on X than elsewhere. Duplicating og: values into twitter: tags achieves nothing but more to keep in sync.
Its own, every time. twitter:title beats og:title, twitter:description beats og:description, twitter:image beats og:image. That precedence is what makes stale twitter: tags so confusing — you update Open Graph, every other platform changes, and X carries on showing a headline you wrote two years ago.
1200 × 630 covers both cases. For summary_large_image X wants at least 300 × 157 and crops to roughly 1.91:1; for summary it crops to a square, so keep anything important away from the edges. Under 5 MB, and PNG, JPEG, WEBP or non-animated GIF.
X caches by URL for around a week, and there is no longer a public button to clear it. The usual workaround is to share the URL with a harmless query parameter on the end, which X treats as a different address — this is also exactly why setting og:url matters, so those variants still count as one page for everyone else.
The Zeal Promise
Non-negotiable, on every tool we ship.
- No sign-up — ever
- No watermarks on any output
- No ads near the download button
- Works fully on mobile
- Privacy-first: processing stays in your browser
- Open source (MIT) — audit it, contribute, self-host
- Zero runtime dependencies in tool logic