OG Image vs Twitter Card: What's the Difference?
OG image (og:image) is the universal Open Graph tag every platform reads; Twitter cards (twitter:image) are X's own tags that override it. In practice you set both, pointing at the same image. Generate that image with our OG image generator — the full comparison is below.
Two tag systems, one image
The confusion starts with history. Open Graph is the open protocol Facebook created in 2010 — a set of meta tags (og:title, og:description, og:image) that any platform can read to build a link preview. Twitter Cards are X's parallel system (twitter:card, twitter:title, twitter:image) from the same era, created because Twitter wanted card types Open Graph did not define. Here is the key fact for 2026: X reads your Open Graph tags as fallback, so a page with only og: tags still renders a card on X — but you lose control over the card type, and X defaults to the small summary card instead of the large image card. The professional setup is both tag sets on every page: og:image pointing at your 1200 x 630 image for the universal fallback, twitter:card set to summary_large_image to force the big card, and twitter:image pointing at the same image URL. They can share one image file — there is no requirement for separate assets — though the crop differences below explain when you might want two. Total markup is about 10 lines and you write it once in your site template. Our OG image generator produces the single image both tags reference.
The crop difference that actually matters
The one technical difference worth designing around is the aspect ratio. Open Graph's canonical card is 1.91:1 (1200 x 630), while X's summary_large_image card displays at 2:1 (1200 x 600 visible). That means X crops roughly 15 pixels off the top and bottom of a standard OG image — invisible for full-bleed backgrounds, but fatal for headlines or logos placed near the edge. This is the entire reason the central safe zone exists: compose critical content inside the middle 1000 x 500 pixels and both ratios render perfectly from one file. The other card types matter less but are worth knowing: X's summary card (the default if you forget twitter:card) shows a small square thumbnail, roughly 144 x 144, beside the text — dramatically less visual impact. There is no longer a separate photo or gallery card type in common use. LinkedIn, Slack, Discord, and Facebook all use the OG 1.91:1 ratio natively, so the X crop is the only deviation in the mainstream set. If your design absolutely must use the full canvas edge to edge, generate a second 1200 x 600 version for twitter:image — but for 95% of pages, one safe-zone-composed 1200 x 630 image serves everywhere. The dimension details live in our OG image size guide.
Exact markup for both tag sets
Here is the complete head markup for a page, using a single image for both systems. The Open Graph block: og:title with your page title, og:description with a 1-to-2-sentence summary, og:image with the absolute HTTPS URL of your 1200 x 630 image, og:image:width content='1200', og:image:height content='630', og:image:type content='image/jpeg' (or image/png), and og:url with the canonical page URL. The Twitter block: twitter:card content='summary_large_image', twitter:title, twitter:description, and twitter:image with the same absolute URL. Order does not matter; completeness does. Keep both titles tight — our word counter flags bloat — and pair the card copy with the discipline in how to write a meta description that gets clicks. Three markup mistakes break cards silently: relative URLs in og:image or twitter:image (crawlers cannot resolve them — always absolute), missing width and height (some crawlers render a thumbnail or distorted card without them), and HTTP instead of HTTPS image URLs (modern crawlers may refuse insecure images). After deploying, validate with Facebook's Sharing Debugger and X's Card Validator — both show you exactly what the crawler fetched, including which image URL it resolved. For generating the tags themselves, see how to generate Open Graph meta tags.
When to use separate images
One image serves both systems in most cases, but three scenarios justify separate assets. Scenario one: edge-to-edge typography. If your brand design places the headline across the full canvas width, X's 2:1 crop will clip it — serve a 1200 x 600 twitter:image variant with the text repositioned. Scenario two: platform-specific messaging. Some publishers tailor the X card with platform-native cues ('Thread below' or the X logo) while keeping the OG image neutral for LinkedIn and Facebook — a legitimate CTR optimization if your X audience differs from your LinkedIn audience. Scenario three: the square-thumbnail fallback. If you cannot set twitter:card reliably (some CMS plugins fight you), design an image whose center 600 x 600 square still communicates the message, so the small summary card degrades gracefully. Outside these cases, separate images double your production work and invite version drift — the OG image gets updated for a new campaign while the Twitter variant shows last quarter's headline. The 80/20 rule: one safe-zone-composed 1200 x 630 image, both tag sets pointing at it, validated in both debuggers. Only split when you have measured a CTR problem the single image cannot solve. Our keyword density checker can help keep the on-image headline keyword-aligned with the page it represents.
Caching, validators, and troubleshooting
The tags are only half the system — caching is the other half, and it causes most 'my card is broken' complaints. Facebook, LinkedIn, and X all cache link previews aggressively: after the first scrape, changing your image or tags does nothing until you force a re-scrape. Facebook's Sharing Debugger has a 'Scrape Again' button, X's Card Validator refreshes on each validation, and LinkedIn's Post Inspector re-fetches when you inspect. When debugging, check in order: is the image URL absolute and HTTPS? Is it publicly accessible (no login, no hotlink protection, no robots.txt block on the image path)? Is the file under the platform's size limit? Are width and height declared? Then force a re-scrape and wait — caches can take minutes to clear across all edge servers. A subtler issue: CDN-signed URLs with expiring tokens make terrible og:images, because the cached card outlives the URL signature and the image 404s for everyone. Always use a stable, permanent image URL. If X shows the small summary card instead of the large one, the cause is almost always a missing or misspelled twitter:card tag — it must read exactly 'summary_large_image'. For the broader failure catalog, see common OG image mistakes.