Twitter card validator
See the card X will show for any link, which tag decided it, and what to change. Free, no signup, nothing stored.
How to check your X card
- Paste the page URL and press Check the card. If the page is on staging, behind a login, or refuses automated requests, use the Paste HTML tab and paste the page source instead.
- Read the verdict, then the tag table. It shows which tag each value came from, so you can see when a title is quietly coming from og:title or from the page's <title> tag rather than the twitter:title you thought you set.
- Fix what the list says, copy the corrected tags into your head section, then confirm it by pasting your link into the X composer and looking at the preview.
Why the official validator is gone
X retired the Card Validator that lived at cards-dev.twitter.com/validator. The tool no longer answers, and what is left sits behind a login. That is why searching for it now lands you on third party pages like this one.
Worth being straight about the one thing no third party tool can do: force X to crawl your page again. That button worked because it ran inside X. Nothing outside X has that power, so any tool advertising a cache refresh is advertising something it does not control.
What actually refreshes a card is changing the URL. Add a query parameter, and X sees an address it has never fetched, so it reads your tags fresh. Otherwise correct the tags and wait for X's cache to expire on its own.
There is one ground truth check that beats every validator, including this one. Open the X composer, paste your link, and look at the preview it draws. That is X telling you exactly what it will render. This tool exists to tell you which tag produced what you see there, and what to change when it is wrong.
One more note on honesty. X's card documentation currently returns a 404, so anyone quoting exact render geometry or a precise cache lifetime is quoting somebody's measurement, not a published specification. This page sticks to what can be observed: your tags, your image, and which value wins.
Which tags X actually reads
X does not need a full set of twitter: tags. It reads them first, then falls back to your Open Graph tags, field by field. So the useful question is not whether a tag exists, it is which tag won. Here is the order the checker above uses, and reports back to you.
- Card type
- twitter:card, and nothing else. This is the only tag with no Open Graph equivalent, which is why it alone decides the layout. Leave it out and X renders the small summary card from your Open Graph tags.
- Title
- twitter:title → og:title → the page's <title> tag. The first one present wins. Up to 70 characters.
- Description
- twitter:description → og:description → meta name=description. Up to 200 characters.
- Image
- twitter:image → twitter:image:src → og:image → og:image:url. The URL has to be absolute, and the file has to be publicly fetchable.
- Image alt
- twitter:image:alt → og:image:alt. Optional, and the only description a screen reader gets.
- Site
- twitter:site, the @handle of the publication. Optional.
- Creator
- twitter:creator, the @handle of the author. Optional.
The practical takeaway: a missing twitter:card tag is not a broken card. Your page still gets a card, built from Open Graph, in the small summary layout. That single tag is the difference between the small card and the wide image one.
Frequently asked questions
Why is my card not showing?
Three causes cover nearly all of it. The image URL is relative or returns an error, so there is nothing to draw. The page refuses automated requests, so the crawler never reads your tags. Or X is still serving a version of the card it fetched before you made your change. Run the check above and the tag table tells you which of the three you are dealing with.
Do I still need twitter:card if I have Open Graph?
Yes, if you want the big image. X reads your Open Graph tags for the title, description, and image, so a page with only Open Graph still gets a card. It gets the small summary card, because twitter:card is the one tag with no Open Graph equivalent and it is the tag that sets the layout. Add twitter:card with the value summary_large_image and the same page renders wide.
How do I refresh the cached card?
You cannot force it, and neither can any third party tool. Forcing a re-crawl was a privileged function inside X's own validator, and that validator is gone. What does work is changing the URL, usually by adding a query parameter like ?v=2, which X treats as a page it has not seen. Otherwise fix the tags and let X's cache expire on its own.
What image size should I use?
1200 by 628 for the large card, which sits on the roughly 2:1 shape it crops to. Keep the file under 5 MB, use PNG, JPG, or WebP rather than SVG, and give the full absolute URL starting with https. For the small summary card, use a square image of at least 144 by 144.
Does it work with staging or localhost?
Yes, through the Paste HTML tab. My server cannot reach a private address, and neither can X, so fetching it would prove nothing. Open the page in your browser, view the page source, and paste the whole thing into that tab. The tag checks are identical, and the image is still checked as long as its URL is public.