The Twitter card validator lost its preview: how to test X cards now

X dropped the validator's preview in mid 2022, so testing a card now means curl as Twitterbot, static tags, a checker such as seogeoaeo.ai's and a draft post.

By ClaudeGPT Si Newsroom, Editorial team

3 min read

The Twitter card validator no longer shows a preview. X removed that part in mid 2022, and today cards-dev.twitter.com/validator just sends you to an X login page. X's developer team says the old previews did not match what people saw in the apps, and it now tells developers to paste the URL into a post composer to see the card. Everything else a validator used to do, confirming that X can fetch and parse your tags, is now your job.

This is the workflow we use, with seogeoaeo.ai's Open Graph checker covering the parts curl cannot show.

1. Fetch the page as Twitterbot

X's pinned troubleshooting post on its developer forum suggests one command:

curl -v -A Twitterbot https://www.example.com/blog/post

Look for three things in the output: a 200 status, a valid Content-Type header and a twitter:card meta tag inside the head. If a browser gets the page and this user agent does not, suspect a firewall or bot rule.

2. Make sure the tags are static

The same post says the crawler cannot execute JavaScript. X names Angular, Meteor and Google Tag Manager as examples: tags they add after load are invisible to its crawler. Render them on the server or prerender the route. View-source is the fast test: if the tags are not there, X will not find them either.

3. Check robots.txt for the page and the image

X asks you to confirm that robots.txt lets Twitterbot in, and to check the robots.txt of the image's domain when images sit on a CDN host. Write the image address as an absolute https URL. The crawler also cannot reach localhost or a bare IP address, so test staging through a real hostname.

4. Get the markup right

X reads its own tags first and falls back to Open Graph. The current docs.x.com no longer hosts the Cards pages, so these limits come from X's Cards markup reference as archived in May 2025:

X tag Falls back to Limit
twitter:card nothing summary, summary_large_image, app or player
twitter:title og:title 70 characters
twitter:description og:description 200 characters
twitter:image og:image under 5 MB; JPG, PNG, WEBP or GIF; no SVG
twitter:image:alt og:image:alt 420 characters

Without twitter:card, a page with og:type, og:title and og:description may get the small summary card. For the wide image, set summary_large_image and size the picture for 2:1, between 300 by 157 and 4096 by 4096 pixels. App cards have rendered as summary cards since early 2022.

<meta name="twitter:card" content="summary_large_image">
<meta property="og:image" content="https://www.example.com/og/post.png">

5. Run a checker, then the composer

curl proves the tags exist. It says nothing about whether the image is too heavy, the wrong format or the wrong shape. The seogeoaeo.ai checker fills that gap: it lists the og: and twitter: tags in the page head, shows which one each part of the card came from, flags a missing or unknown twitter:card and relative or http image URLs, then downloads the image (and twitter:image if it is a separate file) and tests it against X's 5 MB cap and the limits LinkedIn, Facebook and Slack publish. A run costs 5 credits. It also runs over the REST API and MCP with a workspace API key, so a deploy script or a coding agent can call it after every change.

Then paste the URL into a draft post on x.com and look at the card. That is the one preview X itself stands behind.

Limits worth knowing

The checker refuses localhost and private addresses, just as X's crawler cannot reach them. It reads raw HTML, draws an approximate card rather than X's exact layout, and cannot refresh a card X has cached. One more thing no tool fixes: X's forum notes that cards are not served through the API, so third-party X clients may show a plain link whatever your markup says.