What each one is
Open Graph is a protocol created by Facebook in 2010. You add og:* meta tags to your page's <head>, and platforms use them to build link cards. It is the de facto standard: Facebook, LinkedIn, Slack, Discord, WhatsApp, and iMessage all read og:* tags.
Twitter Cards are X's own metadata system, using twitter:* meta tags. They give you fine-grained control over how links appear specifically on X — including the card layout and whether a large image is shown.
Both live in the same <head> block. They do not conflict.
Run the free Twitter Card Validator to see how X renders your card and what it falls back to.
What X falls back to
X reads twitter:* tags first. If they are absent, it falls back to the equivalent og:* tags. Specifically:
- If
twitter:titleis missing, X readsog:title - If
twitter:descriptionis missing, X readsog:description - If
twitter:imageis missing, X readsog:image
This means that if your Open Graph tags are correct and complete, X will produce a reasonable preview without any twitter:* tags at all. The fallback is reliable.
When you need twitter:card
The one twitter:* tag that has no direct Open Graph equivalent is twitter:card. It controls the card layout.
The two layouts you will use:
summary— a small square thumbnail on the left, title and description on the right (the default iftwitter:cardis absent)summary_large_image— a full-width image above the title and description
If you want the large image layout, you must set twitter:card to summary_large_image. Open Graph has no equivalent for this. X will not show the large layout based on og:image alone.
For summary_large_image, the image must be at least 300×157 pixels at approximately a 2:1 ratio. Below that threshold, X will not render the large card. In practice, a 1200×630 Open Graph image already satisfies this requirement.
The minimum set to ship
For most pages, this is everything you need:
<head>
<!-- Open Graph (read by LinkedIn, Slack, Discord, WhatsApp, and X fallback) -->
<meta property="og:title" content="Your Page Title" />
<meta property="og:description" content="A clear description of what this page is about." />
<meta property="og:image" content="https://yourdomain.com/og-image.png" />
<meta property="og:url" content="https://yourdomain.com/your-page" />
<!-- Twitter / X (the one tag with no OG equivalent) -->
<meta name="twitter:card" content="summary_large_image" />
</head>Add twitter:site (your @handle) if you want it attributed to your account in analytics. Add twitter:title, twitter:description, and twitter:image only if you want X's card to differ from the Open Graph version — for example, shorter copy or a differently cropped image.
How to check
The Twitter Card Validator shows you exactly what X reads for any URL — including whether it falls back to Open Graph and which card layout it would use.
If your image renders as a small thumbnail when you expected a large card, the most likely causes are: twitter:card is missing or set to summary, or the image is too small (under 300×157).