A replacement for X’s Card Validator
X removed the preview from its official Card Validator, so X no longer has a public page that shows a card without starting a post. You can paste the link into the post composer, but that only shows the result. It doesn’t tell you which tag is missing or why the image didn’t load.
This checker fetches your page, reads its tags and images, and shows the card it expects X to build, with each problem and its fix. It’s an independent tool, not affiliated with X, and the preview is an approximation because X changes its layout without notice. Use the composer for the final check.
What the validator checks
- Whether
twitter:cardis present and has a value X recognizes. - The title, description and image X would use, including the Open Graph tags it falls back to.
- The image’s URL, format, pixel size and file size, measured from the file and not just read from your tags.
- Image alt text, for people using screen readers.
- Redirects, HTTP errors and pages that look client-side rendered.
The tags X reads
You don’t need a full set of twitter: tags. X falls back to og:title, og:description and og:image, so one set of tags can serve every platform. The tag with no Open Graph equivalent is twitter:card, which picks the layout. This is enough for most pages:
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@yourhandle">
<meta property="og:title" content="Your page title">
<meta property="og:description" content="One or two sentences about the page.">
<meta property="og:image" content="https://example.com/images/card.png">
<meta property="og:image:alt" content="What the image shows">twitter:site is optional and names your X account. Add twitter:image only if you want a different image on X, because it takes priority over og:image. X doesn’t fall back to the page’s <title>, so a page with neither twitter:title nor og:title has no card title.
Summary or large image?
summary_large_image: a wide 2:1 image across the post, such as 1200×600. It needs at least 300×157. The description isn’t shown in this preview.summary: a square 1:1 thumbnail beside the text, such as 600×600. It needs at least 144×144. X also uses this layout iftwitter:cardis missing or invalid.
Most pages should use the large card. A standard 1200×630 Open Graph image works with slight cropping, so keep important content away from the edges. Keep the file under 5 MB, the title under about 70 characters and the description under about 200. The cheat sheet compares these limits across platforms.
Why your Twitter card isn’t showing
- You get a small card, not a large one:
twitter:cardis missing or isn’tsummary_large_image. - The image URL can’t be used: it’s relative, or the image needs a login or cookie. Use an absolute, public https URL.
- The image file is the problem: it’s over 5 MB, smaller than the minimum, or an unsupported format such as SVG.
- The tags are added by JavaScript: link preview crawlers don’t run it, so the tags must be in the HTML your server sends.
- robots.txt blocks X: X’s crawler,
Twitterbot, followsrobots.txt, for your images as well as your pages. Our crawler doesn’t read that file and uses its own user agent, so check these rules yourself. A site that treats Twitterbot differently may also send X something other than what you see here.
Refreshing a card X has cached
X caches a card when a link is first shared, reportedly for about a week, and has no public refresh tool. To see your changes sooner, post the URL with a harmless query string such as ?v=2. If you changed the image, also give it a new URL, because images are cached separately. Then check your page again to confirm the tags are right.