# X Card Validator — Check twitter:card Markup Before You Post

> Paste your meta tags to check the X card type, title, description and image against the documented rules, including Open Graph fallbacks.

Paste your meta tags and the X card is resolved the way the crawler resolves it: twitter:card decides the layout, and any missing twitter:title, twitter:description or twitter:image falls back to the matching Open Graph tag. Each value is then checked against the documented card types, character limits and absolute-URL rule.

**URL:** https://convertto.tech/t/twitter-card-validator
**Category:** SEO Tools (https://convertto.tech/c/seo-tools)
**Privacy:** Runs entirely in the browser; no upload
**Cost:** Free, no sign-up
**Last updated:** 2026-09-11

## Key facts

- **Privacy:** Runs entirely in your browser — nothing is uploaded and no page is fetched
- **Fallbacks:** twitter:title, twitter:description and twitter:image fall back to their og: equivalents
- **Card types:** summary, summary_large_image, app and player — photo, gallery and product are retired
- **First-party validator:** X retired its public Card Validator in 2022
- **Cost:** Free, unlimited, no sign-up

## How X decides what your card looks like

The crawler reads one tag to pick the layout and the rest to fill it in. `twitter:card` is the layout tag, and it is the only part of the vocabulary with no Open Graph equivalent — everything else degrades gracefully. If `twitter:title` is absent the crawler uses `og:title`; the same holds for the description and the image. That is why a page with solid Open Graph markup already gets a card, and why adding a single `twitter:card` line is usually the highest-value change available.

| Card type | Layout | Additional required tags |
| --- | --- | --- |
| summary | Title, description and a small square thumbnail | None beyond title and image |
| summary_large_image | Wide 2:1 image above the title and description | None beyond title and image |
| player | An embedded media player in the timeline | twitter:player, twitter:player:width, twitter:player:height |
| app | A direct install prompt for a mobile app | twitter:app:id:iphone, :ipad or :googleplay |

*photo, gallery and product were retired and no longer render.*

## The four things that actually break cards

1. **A relative image path.** The crawler does not resolve `/images/card.png` against the page URL — the value must be an absolute `https://` address. This is the single most common cause of a card that renders as plain text.
2. **A blocked crawler.** If `robots.txt` disallows the bot, or the image sits behind authentication or a hotlink rule, there is nothing to draw. The markup can be perfect and the card still empty.
3. **A stale cache.** X caches what it fetched. Tags added after the first crawl do not appear until it re-crawls, which is why a card can be correct in markup and wrong in the timeline.
4. **A retired card type.** `photo`, `gallery` and `product` were valid years ago and are silently ignored now, falling back to the small summary layout at best.

> **Alt text is one line and nobody adds it** — twitter:image:alt is read out in place of the card image for anyone using a screen reader. Without it the image is announced as nothing at all. It costs one tag and X allows up to 420 characters.

## Checking markup versus checking a live page

This tool reads tags you paste, so it works on a branch, a staging host or a page that is not published — and nothing leaves your browser. What it cannot do is tell you whether the image actually exists, what size it is, or whether the crawler can reach it. For that, the [Open Graph preview](https://convertto.tech/t/open-graph-preview) fetches the live URL, measures the image and draws the card as Facebook, X, LinkedIn and Slack each really render it. The two are complements: markup first, live fetch once it is deployed.

## How to use

1. Copy the meta tags from your page — the whole <head> is fine.
2. Paste them into the box; anything that is not a <meta> tag is ignored.
3. Read the checks table, fixing anything marked Fail first.
4. Copy the suggested markup block if you need a complete, correct set of tags.
5. Paste the live URL into the X composer to confirm the real unfurl.

## FAQ

### Do I need Twitter Card tags if I already have Open Graph tags?

Mostly not. X falls back to og:title, og:description and og:image when the twitter: equivalents are absent, so a page with good Open Graph markup already gets a card. The exception is twitter:card itself, which has no Open Graph equivalent — without it you get the small square summary layout rather than the wide image.

### What is the difference between summary and summary_large_image?

summary draws a small square thumbnail beside the text, which suits a logo or an avatar. summary_large_image draws a wide 2:1 image above the text and takes up far more of the timeline. For an article or a landing page summary_large_image is almost always the one you want.

### Why is my card not showing on X?

The usual causes are a relative twitter:image path, an image behind authentication or a robots rule that blocks the crawler, or a cached fetch from before the tags were added. This tool catches the markup problems; for the cache, X re-crawls on its own schedule and a URL with a changed query string gets a fresh fetch.

### Where is the official Twitter Card Validator?

X retired it in 2022 and has not replaced it. The remaining first-party check is the post composer: paste the URL, look at the unfurl it draws, and delete the draft. That preview comes from the same pipeline that renders the posted card.

### What size should the card image be?

For summary_large_image, a 2:1 image of at least 300 × 157 pixels; 1200 × 600 or 1200 × 630 are the usual safe choices and work for the Open Graph card too. For summary, a square of at least 144 × 144. X documents a 5 MB ceiling and supports JPG, PNG, WEBP and static GIF.

### Does this tool fetch my page?

No. It parses markup you paste, entirely in your browser, which is why it works on a staging site or on a page that is not published yet. If you want a live fetch with the image measured and the card drawn for four platforms, use the [Open Graph preview](/t/open-graph-preview) instead.

## Sources

- [About X Cards](https://developer.x.com/en/docs/x-for-websites/cards/overview/abouts-cards) — X
- [X Cards markup reference](https://developer.x.com/en/docs/x-for-websites/cards/overview/markup) — X
- [The Open Graph protocol](https://ogp.me/) — Open Graph
- [HTML Standard — the meta element](https://html.spec.whatwg.org/multipage/semantics.html#the-meta-element) — WHATWG

## Related tools

- [Open Graph Preview](https://convertto.tech/t/open-graph-preview): Render your share card the way each platform really draws it, with the og:image measured.
- [Meta Tag Generator](https://convertto.tech/t/meta-tag-generator): Generate title, description, Open Graph and Twitter Card tags for any page.
- [Open Graph & Social Card Generator](https://convertto.tech/t/og-image-generator): Design the 1200 × 630 image that appears when your link is shared, plus every other social size.
- [Google SERP Preview](https://convertto.tech/t/serp-preview): Preview how your page title and description will appear in Google search results.
- [AI Crawler robots.txt Generator](https://convertto.tech/t/ai-crawler-robots-txt-generator): Generate the robots.txt rules for 21 AI crawlers, separating training from search and from fetches a real user asked for.
- [robots.txt Generator](https://convertto.tech/t/robots-txt-generator): Build a valid robots.txt file with sitemap references and crawler rules.
- [Keyword Density Checker](https://convertto.tech/t/keyword-density-checker): Analyse which words and phrases dominate your content, and how often they appear.
- [llms.txt Generator](https://convertto.tech/t/llms-txt-generator): Build a valid llms.txt: a curated, Markdown map of your site written for a model with a limited context window.
