You paste a link into LinkedIn. The card looks great. You paste the same link into X. The image is missing. You paste it into Slack. The title got truncated halfway. You paste it into iMessage. There is no preview at all.
One URL. Six rendering engines. Six different decisions about what to show. The reason this happens almost always traces back to a quiet disagreement between Open Graph tags (og:*) and Twitter Card tags (twitter:*), and to platforms that fall back to one or the other in subtly different ways.
Here is the 2026 field guide. What is actually different between OG and Twitter Cards, what each platform reads, what falls back to what, and the minimum tag set that ships clean everywhere.
If you only have time for one sentence: set Open Graph tags for everything, and add exactly one Twitter Card tag — twitter:card set to summary_large_image — to make X render the wide hero layout instead of the small thumbnail.
The full reasoning, the platform-by-platform fallback table, and the copy-paste templates are below.
Open Graph is a protocol Facebook released in 2010 to let any website describe itself to social sharers. The shape is simple: namespaced <meta property="og:*"> tags in your <head> describe the title, description, image, URL, and content type. Sixteen years later, OG is the closest thing the web has to a universal social-preview standard. Facebook reads it. LinkedIn reads it. Slack reads it. Discord reads it. iMessage reads it. WhatsApp reads it. AI search engines read it.
Twitter Cards launched two years later, in 2012, as Twitter's own version of the same idea. The shape is intentionally similar: <meta name="twitter:*"> tags carry the same kinds of fields. The key addition is twitter:card, which tells X which layout to use — a small summary card with a thumbnail or a summary_large_image card with a full-width hero.
For roughly a decade, you needed both. In 2026 you mostly do not — but the exceptions matter.
| Open Graph | Twitter Card | What is different |
|---|---|---|
og:title | twitter:title | Identical purpose. X falls back to og:title when missing. |
og:description | twitter:description | Identical purpose. X falls back to og:description when missing. |
og:image | twitter:image | Same image, different consumers. X uses twitter:image if set, else og:image. |
og:url | — | Twitter has no equivalent. X uses the canonical URL of the page. |
og:type | — | Twitter ignores it. OG uses it for article, video, product, etc. |
og:site_name | twitter:site | OG expects a brand name. twitter:site expects an @handle. |
| — | twitter:card | The only Twitter-specific tag with no OG equivalent. Controls layout on X. |
| — | twitter:creator | Optional @handle of the author. No OG equivalent. |
og:image:alt | twitter:image:alt | Both exist. X uses its own; everyone else uses OG's. |
This is the table that actually decides what your card looks like in 2026. Each row is a major sharer or messaging app and which tag family it prefers, with what it falls back to.
| Platform | Reads first | Falls back to |
|---|---|---|
og:* | Page <title>, first <img> | |
og:* | Same as Facebook. Ignores all twitter:*. | |
| X (Twitter) | twitter:* | og:* for missing fields. Uses twitter:card for layout. |
| Slack | og:* | Title tag, oEmbed |
| Discord | og:* | Title tag, embedded media URLs |
| iMessage / Messages | og:* | Apple Smart App Banner, page title |
og:* | Page title, first <img> | |
| Telegram | og:* | Title tag, oEmbed |
| ChatGPT Search | og:* | Page title, headline schema |
| Perplexity | og:* | Article schema, page title |
| Google AI Overview | og:* + structured data | Page title, meta description |
Eleven major rendering engines. Ten of them prefer OG. Only X prefers Twitter-specific tags — and even X falls back to OG when those tags are missing. This is the core fact that should shape your strategy in 2026.
This is the smallest set of tags that produces a clean card on every platform listed above. Copy, paste, swap in your values, ship.
<!-- Universal: Open Graph --> <meta property="og:title" content="Your page title — under ~60 chars"> <meta property="og:description" content="One-sentence pitch — front-load value into first ~110 chars"> <meta property="og:image" content="https://example.com/og.png"> <meta property="og:url" content="https://example.com/the-page/"> <meta property="og:type" content="article"> <meta property="og:site_name" content="Your Brand"> <!-- X-specific: only what OG cannot express --> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:site" content="@yourhandle">
That is the entire delta from "I have OG tags" to "my card looks correct on every platform in 2026." Eight lines. The last two are the only Twitter-specific lines that actually pay rent.
The one common reason to add a separate twitter:image in 2026: your OG image was designed for the LinkedIn and Facebook feed, and the layout reads poorly at X's slightly tighter aspect crop. If you find yourself regenerating images with X-specific text positioning, that is when adding an explicit twitter:image earns its keep. Otherwise, leave it out and let X fall back to og:image.
Image specs are where most cards still break in 2026, even with the right tags.
summary_large_image cards.og:image silently break on Slack and Discord. Always use a full https:// URL.If you want a one-click way to generate compliant images at this exact spec, our free OG Image Generator ships them at 1200 × 630 with safe-area guides built in.
twitter:card to summary by accident. Many CMS plugins ship this default. The result is a tiny thumbnail card on X instead of a full-width hero. Always use summary_large_image unless you specifically want the small layout.og:image. Slack, Discord, and iMessage drop the image entirely. LinkedIn and Facebook tolerate it but the image often loads slowly. Always absolute.og:url. Without it, some platforms (Slack in particular) cannot deduplicate cards when the same page is shared from multiple URL variants. Set it to your canonical URL.twitter:site as a brand name instead of an @handle. X expects an @-prefixed handle. A brand name makes the tag silently invalid. Either use your handle or leave the tag out.The change that has quietly mattered most in the last two years: AI-powered search engines now read OG tags. og:title becomes the citation title in ChatGPT Search, Perplexity, Google AI Overview, and Bing Copilot. og:description seeds the snippet shown next to your citation. og:image appears when the AI returns a rich card. None of them currently read twitter:*.
If you care about being cited cleanly in AI search results — and in 2026 you should — your highest-leverage edits are og:title (specific, verb-led, under 60 characters) and og:description (front-loaded value, ideally under 110 characters for the AI rewrite to stay faithful). A clean image at og:image is the third lever. The Twitter-specific tags do nothing here.
For more on how to write descriptions AI assistants will cite faithfully, see our companion piece on meta description length in 2026 — same author, same data set.
Three validators that still work in 2026:
Slack, Discord, iMessage, Telegram, and WhatsApp do not provide debuggers. The only reliable test is to send the link to yourself in each app. Caches typically expire in 24–72 hours, so plan to test before you announce.
Our free SEO Meta Tag Generator writes both OG and Twitter Card tag sets at the same time, with live previews of how the card will render on Google, X, Facebook, LinkedIn, and Slack as you type. No signup, no email gate, ships clean tags every time.
Try it free →twitter:card set to summary_large_image. Set it.twitter:title, twitter:description, or twitter:image.Eight lines of <meta> in your <head> will out-render every site that still maintains parallel twitter:* tags by hand. The protocol convergence already happened. The only thing left is to stop maintaining redundant tags and ship the cleaner set.