🐦 X Cards · 4 Types · Live Preview

Twitter Card Generator

Build summary, large image, app and player cards for X. See a realistic timeline preview as you type, watch character counters, and export to HTML, Next.js, Nuxt or WordPress. Everything runs in your browser.

Updated: August 24, 2026 Built by Khalil Rahman 100% client-side Free forever

Pick a card type, fill in the fields, and the preview updates live. Every value below maps directly to a meta tag in the generated code.

Card type
Timeline preview
Validation

Three views of the same card: the inline timeline layout, a wider layout, and a narrow layout that approximates a small phone screen.

💡 About the mockup. The preview approximates X's colours and layout, but it is a simulation, not a live render from X's servers. To see the real result, compose a post containing your live URL on X and check the preview before you send it. Use the preview here to check your copy and image before you deploy.

X reads its own twitter:* tags first, then falls back to Open Graph if a tag is missing. Every other platform reads Open Graph only. Here is what goes where.

What it controls X-specific tag Open Graph equivalent
Card layouttwitter:cardNone — OG has no layout concept
Titletwitter:titleog:title
Descriptiontwitter:descriptionog:description
Imagetwitter:imageog:image
Image alt texttwitter:image:altog:image:alt
Brand handletwitter:siteNone — OG has no handle field
Author handletwitter:creatorNone
App install datatwitter:app:*Uses al:* (App Links) — different spec
Embedded playertwitter:playerog:video (rarely used by X)
⚠️ The most common mistake. Adding twitter:card alone is not enough if you want different wording on X than elsewhere. Without twitter:title, twitter:description and twitter:image, X uses your Open Graph tags for those fields. That is fine when the wording is the same, but set both if you want them to differ.

The fallback chain

When X's crawler fetches your page, it looks for tags in this order for each field:

  1. twitter: tag, if present.
  2. og: tag as a fallback.
  3. Then standard HTML (<title>, meta description).

This is why an OG-only page still shows a link preview on X. Adding twitter:card lets you choose the layout, such as the large-image card.

The same tags, formatted for the framework or CMS you use. The generator produces code that matches each platform's conventions.

🐦 What Twitter Cards actually are

When you paste a link into a post on X, the platform fetches the page and looks for a small set of meta tags. If it finds them, it renders a card — an image, a title, a description, and the site's domain. If it does not find them, you get a plain link with little or no preview.

Those meta tags are the Twitter Card spec. It predates X's rebrand, and it still uses the twitter: prefix in the HTML. When people talk about "Twitter Cards" in 2026, they mean the same thing as "X Cards". Both names refer to the same meta tags.

There are four card types, and picking the right one is most of the work. Everything else is just filling in fields.

📇 The four card types

summary_large_image — the default for most sites

A large image at the top, with the title and description beneath it. The image renders at roughly a 1.91 to 1 aspect ratio, the same ratio Facebook and LinkedIn use. This is what you want for blog posts, product pages, documentation and landing pages.

summary — the compact option

A small square thumbnail on the left, with the title and description on the right. Uses less vertical space in a timeline, so it is less visually dominant. Good for threaded links and reference material.

app — install banner (legacy)

Shows the app icon, name and an install bar. Only worth considering if the page promotes a mobile app, and only if you have the iOS App Store ID and/or the Google Play package name. X has largely stopped supporting this card, so test before relying on it.

player — embedded media (legacy)

Renders an iframe or HTML5 video player inside the card. Requires an HTTPS player URL and requires your domain to be approved by X. Without that approval, adding the tag will not embed your content.

💡 Which one should I pick? Unless you have a specific reason otherwise, use summary_large_image. It works for every page type and does not require any special setup.

✍️ How to use the generator

  1. Pick a card type. Four tiles at the top of the Builder tab. Click one and the preview updates instantly.
  2. Fill in the fields. Title, description, image URL and image dimensions. The character counters warn when you exceed what X will display.
  3. Check the preview. The timeline preview shows how the card looks inline. Switch to the Preview tab for wider and narrower layouts.
  4. Read the validation list. It flags missing tags, relative URLs, wrong image dimensions, and titles that will be cut off.
  5. Copy or export. Grab the raw HTML tags, or switch to the Export tab for Next.js, Nuxt 3, WordPress or JSON.

Getting the fields right

The title should be between 40 and 70 characters. Longer ones may be truncated, and shorter ones look sparse. Write it as a headline, not a label.

The description should be 100 to 200 characters. Long enough to add context, short enough that it does not get cut off with an ellipsis.

The image should be an absolute HTTPS URL. For summary_large_image the standard is 1200 × 628 (minimum 300 × 157). For summary use a square image of at least 144 × 144. Files must be under 5 MB. PNG for screenshots and graphics, JPG for photographs.

🔍 Testing your card

After you deploy the tags, X may not show the new card immediately. Link previews are cached, and the cached version can be served for some time after you fix the page.

X's old standalone Card Validator preview is no longer a dependable way to test. The most reliable check today is to compose a post containing your live URL on X and look at the preview before sending it. If you see a stale card, the simplest workaround is to change the image filename or add a harmless query string to the URL, since a new URL is fetched fresh.

⚠️ The URL must be public. X's crawler runs on its own servers. If your page is behind a login, on localhost, or behind a VPN, it cannot be fetched and no card will appear. Always test the production URL, not a staging one.

Common problems

🚩 Five mistakes that break X Cards

🔒 Your privacy and how we handle data

Nothing you type is sent anywhere. Every preview, character count and code snippet on this page is generated in your browser with JavaScript. There is no server-side component, no account and no logging. If you paste internal copy into the Builder, it stays on your own device.

What is stored on your device. Your fields are not saved, so refreshing the page resets them. The only thing stored locally is your cookie choice and, if you allow functional storage, your light or dark theme preference.

Cookies and advertising. Advertising and analytics cookies are switched off by default. They only turn on if you press Accept all, or select them individually under Manage preferences. You can change your choice at any time with the Cookie settings link in the footer. Full details are in our Cookie Policy and Privacy Policy.

About the author

Khalil Rahman — Front-end developer and tool builder

Khalil has spent the last eight years building browser-based tools for SEOs and developers. He built this generator after getting frustrated with the ones that already exist — most of them either ignore the app and player card types entirely, or show a preview that does not resemble what X actually renders. The previews here approximate X's colours and layout widths, so what you see is close to what you get. He maintains the SkillsInsider SEO toolset.

More about SkillsInsider · Editorial policy · Report an issue

❓ Frequently asked questions

Do I still need Open Graph tags if I use Twitter Cards?

Yes. X falls back to Open Graph tags when its own are missing, and every other platform — Facebook, LinkedIn, Slack, Discord, WhatsApp — reads Open Graph only. Add both sets of tags to the same page. The twitter:* tags take priority on X, and the og:* tags cover everything else.

What is the difference between twitter:site and twitter:creator?

twitter:site is the X handle of the website or brand publishing the page, such as @skillsinsider. twitter:creator is the handle of the individual author, such as @khalilrahman. Both are optional.

What image size should I use for summary_large_image?

1200 × 628 pixels, a 1.91 to 1 aspect ratio shared with Facebook and LinkedIn, so one image works everywhere. The minimum is 300 × 157 and files must be under 5 MB. Keep important content away from the edges, since images can be cropped. The summary card uses a square image of at least 144 × 144 instead.

Why is my card not showing up when I share the link?

Common causes: X has cached an older version of the page; the image URL is relative instead of absolute; the image is too small; or the tags are injected by JavaScript, which X's crawler does not run. Check each in turn, and test with a fresh URL or a new image filename to bypass the cache.

Does X still show link previews without card tags?

Yes. X falls back to your Open Graph tags, and then to the page title and description. Adding twitter:card plus an image and title lets you control the layout, such as the large-image card.

Why does the app card not work when I test it?

The app card is a legacy format and X may no longer render it. If it does, it needs a published app: the App Store ID or Google Play package name must correspond to a live app available in the country set in twitter:app:country.

Can I use the player card for a YouTube video?

No. The player card requires your own domain to be approved by X, and YouTube links already have their own handling. For a YouTube link, just use summary_large_image with a thumbnail of the video.

Is my data sent to a server?

No. Every preview, character count and code snippet is generated in your browser with JavaScript. Nothing you type is uploaded or shared. Close the tab and it is gone.

Related tools

✓ Copied