Open the <head> of almost any marketing page and you'll find the same six fields written twice: once with property="og:*", once with name="twitter:*". The duplication made sense in 2014. It doesn't anymore. X (the platform formerly called Twitter) falls back to Open Graph for almost every field, and every other major preview surface — LinkedIn, Discord, Slack, iMessage, Facebook, WhatsApp — only ever read OG. The minimal modern set is small. This piece spells out exactly what to keep and what to delete.
What each format was designed to do
The Open Graph Protocol was published by Facebook in 2010 at ogp.me. It defines four required fields: og:title, og:type, og:image, and og:url. It also defines optional ones worth shipping: og:description, og:site_name, and og:locale. The protocol is consumed by every link preview surface that matters in 2026.
Twitter Cards launched in 2012 with their own twitter: namespace and four card types: summary, summary_large_image, app, and player. Most of those tags duplicate OG fields. The exception is twitter:card itself, which tells X which preview layout to render. Without it, X picks a default layout that often won't match what you want.
X's fallback is the whole story
X's Cards Markup reference confirms that when a twitter:* tag is missing, X reads the matching og:* tag instead. twitter:title falls back to og:title. twitter:description falls back to og:description. twitter:image falls back to og:image. The single tag without a fallback is twitter:card — there is no OG equivalent for "render this as a large image card."
So the entire reason to keep any twitter:* tag is to override what X picks up from your OG fields. If you're happy letting X read your OG image and OG description verbatim, you only need one twitter tag: twitter:card. Everything else is optional copy-paste.
Image dimensions: pick one and stop
og:image is widely recommended at 1200x630 pixels (1.91:1). summary_large_image is widely recommended at 1200x628 pixels (also 1.91:1). The two-pixel gap doesn't matter to any renderer. Ship one image at 1200x630 and reference it from og:image. X will read the same file and crop it the same way Facebook and LinkedIn do.
LinkedIn flags images smaller than 1200 pixels wide as low quality in its Post Inspector. Keep images under 5MB. Use HTTPS for the image URL. Use an absolute URL like https://example.com/og.png, not /og.png. Crawlers fetch from a different host and can't resolve relative paths.
Who reads what
| Platform | Reads Open Graph | Reads Twitter Cards |
| Yes | No | |
| Yes | No | |
| Discord | Yes | No |
| Slack | Yes | No |
| iMessage | Yes | No |
| Yes | No | |
| Telegram | Yes | No |
| Microsoft Teams | Yes | No |
Yes (plus its own <meta name="pinterest-rich-pin"> opt-out) | No | |
| X (Twitter) | Yes (as fallback) | Yes (preferred when present) |
X is the only mainstream platform with its own meta convention. Every other surface speaks Open Graph. That's the whole map.
The minimal recommended tag set
Drop this into <head> and delete the rest:
<!-- Open Graph: read by every modern preview surface -->
<meta property="og:title" content="Open Graph vs Twitter Cards in 2026" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://example.com/blog/og-vs-twitter-cards" />
<meta property="og:image" content="https://example.com/og/og-vs-twitter-cards.png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:alt" content="Comparison diagram of OG and Twitter Card tags" />
<meta property="og:description" content="The minimal social metadata that covers every share surface in 2026." />
<meta property="og:site_name" content="Example" />
<meta property="og:locale" content="en_US" />
<!-- Single X-only tag: forces the large-image layout -->
<meta name="twitter:card" content="summary_large_image" />That's eleven tags. A typical site ships twenty-plus by duplicating each OG field with a twitter equivalent. The eleven above render the same preview on X, LinkedIn, Discord, Slack, iMessage, Facebook, and WhatsApp. If you want X analytics to credit your handle, add <meta name="twitter:site" content="@yourhandle" /> and stop there.
Note one syntax trap: OG tags use property=, twitter tags use name=. Mixing them silently breaks parsing. The X crawler ignores property="twitter:card".
Where structured data fits in
Open Graph and Twitter Cards drive social previews. They don't drive Google's visual SERPs. For that, your Article JSON-LD needs its own image field, and Google reads that independently of OG. If your social image and your article hero image are the same file, reference the same URL from both. If they differ, ship both.
A common mistake is omitting image from the Article schema because the page already has og:image. Google parses the JSON-LD image for rich result eligibility and visual carousels. The OG tag covers chat previews. The schema covers search. Both ship.
Cache-busting when you change the image
Social platforms cache aggressively. LinkedIn holds previews for roughly seven days. Facebook caches indefinitely until forced to refetch. If you publish a page and then update its og:image, every share that already happened will keep showing the old image until each platform recrawls.
The forcing functions:
LinkedIn: paste the URL into the Post Inspector and click Inspect. That triggers an immediate refetch and updates the cache for future shares.
Facebook: use the Sharing Debugger and click "Scrape Again."
X: the old Card Validator was retired. The current workaround is to share the URL in a draft post on x.com and check the rendered preview. Append a query string like
?v=2to bypass the cache if the old preview persists.Discord and Slack: each workspace caches independently and refetches on a rolling window. Posting the URL fresh in a new channel triggers a re-scrape.
A simpler pattern is to never overwrite an OG image at the same URL. Version the filename instead: og-2026-03.png, og-2026-04.png. Cache invalidation becomes the renderer's problem, not yours.
Verify before shipping
Run isitready.dev on your canonical origin to audit social metadata coverage. The report flags pages missing required OG fields, duplicate or conflicting meta tags, undersized OG images, and pages that ship a twitter:card tag with no matching OG fallback. It also checks that og:image resolves over HTTPS and returns a non-redirect 200, which is the most common reason previews silently fail in production.