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
App card fields
Player card fields
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 layout
twitter:card
None — OG has no layout concept
Title
twitter:title
og:title
Description
twitter:description
og:description
Image
twitter:image
og:image
Image alt text
twitter:image:alt
og:image:alt
Brand handle
twitter:site
None — OG has no handle field
Author handle
twitter:creator
None
App install data
twitter:app:*
Uses al:* (App Links) — different spec
Embedded player
twitter:player
og: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:
twitter: tag, if present.
og: tag as a fallback.
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.
Advertisement
🐦 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
Pick a card type. Four tiles at the top of the Builder tab. Click one and the
preview updates instantly.
Fill in the fields. Title, description, image URL and image dimensions.
The character counters warn when you exceed what X will display.
Check the preview. The timeline preview shows how the card looks inline.
Switch to the Preview tab for wider and narrower layouts.
Read the validation list. It flags missing tags, relative URLs, wrong image
dimensions, and titles that will be cut off.
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
No card appears — the page may be missing twitter:card and
Open Graph tags, or the crawler could not fetch it. Add the tags and check the URL loads in an
incognito window.
Image missing or too small — make sure it is at least 300 pixels wide for
large cards (144 × 144 for summary). Regenerate it at 1200 × 628.
Page returns an error — a 4xx or 5xx response, or a timeout, stops the crawler.
Invalid image URL — the URL uses HTTP instead of HTTPS, or is a relative
path. Use a full HTTPS URL.
🚩 Five mistakes that break X Cards
Setting twitter:card and nothing else. The card type only
controls the layout. Without twitter:title, twitter:description and
twitter:image, X uses your Open Graph tags, so make sure those exist too.
Using a relative image URL./images/card.jpg does not work.
The crawler needs a full HTTPS URL it can fetch from the public internet.
Injecting tags with JavaScript. React, Vue and Angular apps that set
twitter:card in a client-side effect will fail. X's crawler does not execute
JavaScript. Render the tags server-side or in the initial HTML.
Assuming the change is live immediately. Previews are cached. Change the
image filename or test with a fresh URL to force a new fetch.
Using the wrong handle fields. Use twitter:site for the brand and
twitter:creator for the individual author, or omit the creator. Handles must start
with @.
Advertisement
🔒 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
KR
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.
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.
We use strictly necessary cookies to make the site work. With your permission we also use analytics,
advertising and functional cookies to keep the tools free and improve them. You can accept everything,
reject the extras, or choose individually. Read the
Cookie Policy and
Privacy Policy for full details.
Strictly necessary
Required to load the page and remember your cookie choice. These cannot be switched off.
Analytics
Anonymous statistics about which pages and tools are most used, so we know what to improve.
Advertising
Allows us to show relevant ads and keep the tools free. Personalised ads use data shared with ad partners.