2026-05-217 min de leitura

Open Graph vs Twitter Card tags — what's the difference and which do you actually need?

Everything you need to know about Open Graph (Facebook, LinkedIn, Slack, iMessage) vs Twitter Card meta tags — and the cleanest way to ship both.

Last updated: May 2026By FeedPulse Editorial
Este artigo está disponível em inglês. Estamos traduzindo — o conteúdo ainda aparece em inglês.

You ship a blog post, paste the link into Twitter, and the preview looks broken. You fix the Twitter Card tags, test again, and now Facebook shows a blank gray square. Sound familiar? Open Graph and Twitter Card meta tags overlap, contradict each other, and break in subtle ways. But here's the truth: you need both, they're not interchangeable, and if you set them up wrong you're bleeding clicks. This post breaks down what each protocol does, how they clash, which tags matter most, and how to stop wasting time debugging social media meta tags that should've worked the first time.

What Open Graph tags actually do

Open Graph is Facebook's invention from 2010. It tells social platforms — Facebook, LinkedIn, Discord, Slack, iMessage — how to render your link when someone shares it. Without these tags, Facebook guesses. It might scrape the first image it finds (often your logo at 200×200 pixels), pull a random sentence from your footer, or show nothing at all.

The four required Open Graph tags are og:title, og:description, og:image, and og:url. Miss any one of them and Facebook's scraper falls back to guessing. The og:image is the most fragile: Facebook recommends 1200×630 pixels, but it'll accept anything above 200×200. If your image is smaller, it won't display. If it's too large (over 8 MB), Facebook silently ignores it.

Real-world example: a SaaS founder I know shipped a launch post with a 4000×2000 PNG. Facebook loaded a spinner for three seconds, then showed no image. He resized to 1200×630, cleared Facebook's cache with their Sharing Debugger, and the preview appeared. The original image wasn't "wrong" — it was just too big for Facebook's parser to handle quickly.

Why Facebook ignores your fallback images

If you don't set og:image, Facebook scrapes your page for any <img> tag. It prioritizes images above the fold, then larger images, then anything it can find. This logic breaks when your hero section uses a background image in CSS, because Facebook only sees HTML. Your beautiful landing page screenshot never gets picked up, and visitors see your generic avatar instead.

Open Graph works beyond Facebook

LinkedIn, WhatsApp, and Discord all respect Open Graph tags. Discord even displays og:description in-line when you paste a link into a server. If you only set Twitter Card tags, Discord shows a blank embed. That's why Open Graph isn't optional, even if Twitter is your main traffic source.

What Twitter Card tags do differently

Twitter created its own meta tag protocol because Open Graph didn't fit its card UI. Twitter Cards include twitter:card, twitter:title, twitter:description, and twitter:image. The twitter:card property has four values: summary, summary_large_image, app, and player. For almost every use case, you want summary_large_image — it shows a big horizontal image above your title and description. The default summary card displays a tiny square thumbnail on the right, and most people scroll past it.

Here's where it gets messy: if you set og:title but not twitter:title, Twitter uses the Open Graph value as a fallback. Same for description and image. But if your og:image is 1200×630 and you're using twitter:card summary (not summary_large_image), Twitter crops your image into a square. You end up with half a logo and some white space.

Twitter also cares about twitter:site and twitter:creator — these add attribution links to the card. If you set twitter:site to @FeedPulse, Twitter shows "via @FeedPulse" under the card. It's a small detail, but it reinforces brand authority and drives profile visits.

Twitter Card validator vs real previews

Twitter's Card Validator (cards-dev.twitter.com) shows you a preview before you publish. But the validator is famously slow to refresh. I've seen it cache an old image for 48 hours even after updating the tags and clearing the browser cache. The fix: append a query parameter like ?v=2 to your twitter:image URL. Twitter treats it as a new image and fetches it immediately.

If you skip this step, you'll ship a post, see the wrong preview, panic, and change ten things at once. Then you won't know which fix actually worked.

The overlap problem and how to handle it

Both protocols need a title, description, and image. You could write the same values twice, but that's fragile. If you update your blog post title, you now have to update og:title and twitter:title separately. Miss one and your previews diverge.

The cleaner approach: set Open Graph tags for everything, then override only where Twitter's display rules differ. For most pages, that means setting twitter:card to summary_large_image and letting Twitter fall back to og:title, og:description, and og:image. You only need dedicated Twitter tags if you want a different preview on Twitter than on Facebook.

Example: your landing page has a 1200×630 og:image size with dense text and a CTA button. Facebook shows it perfectly. But Twitter crops 75 pixels off the top and bottom when rendering summary_large_image cards on mobile. So you create a second image at 1200×600, trim the top padding, and set twitter:image to the cropped version. Now both platforms look sharp.

When to use separate Twitter tags

If you're promoting an episode with guest headshots, you might want a horizontal layout for Facebook and a square crop for Twitter's summary card. Or if your blog post has a data-heavy infographic that reads better in portrait, you'd set og:image to the wide version and twitter:image to a taller crop. But for 90% of pages, identical images work fine.

How to test your tags before you hit publish

Don't trust your CMS preview. WordPress, Webflow, and Shopify all claim to "optimize for social," but they generate tags that fail half the time. You need to validate with the actual platform scrapers.

Use Facebook's Sharing Debugger (developers.facebook.com/tools/debug) and paste your URL. It shows exactly what Facebook scraped, flags missing tags, and lets you force a re-scrape. Twitter's Card Validator does the same, but you need a Twitter account to access it. LinkedIn also has a Post Inspector (linkedin.com/post-inspector), though it's less reliable.

If all three tools show green checks and your image renders correctly, you're good. If not, check your image file size, dimensions, and MIME type. Some CDNs serve WebP images with incorrect headers, and Facebook refuses to load them.

Common validation errors and fixes

"Image could not be downloaded" means your server blocked Facebook's user-agent, your image is too large, or the URL requires authentication. "Missing required property" means you forgot og:url or misspelled a tag. "Inferred property" means Facebook guessed a value because you didn't provide one — that's a warning, not a fatal error, but you should still fix it.

If you update your tags and the validators still show the old version, append ?v=2 to your page URL in the validator. That bypasses the cache and forces a fresh scrape.

How to add Open Graph and Twitter Card tags to your site

If you're on WordPress, install Yoast or Rank Math. Both plugins auto-generate Open Graph and Twitter Card tags from your post title, excerpt, and featured image. Yoast defaults to summary_large_image for Twitter, which is correct 95% of the time.

If you're on a custom stack, add the tags in your HTML <head> like this:

<meta property="og:title" content="Your post title" />
<meta property="og:description" content="A 150-character summary" />
<meta property="og:image" content="https://yourdomain.com/image.jpg" />
<meta property="og:url" content="https://yourdomain.com/post-slug" />
<meta name="twitter:card" content="summary_large_image" />

Set og:image to a 1200×630 JPEG or PNG hosted on a fast CDN. Avoid relative URLs — Facebook and Twitter need the full https:// path. And don't forget og:url — without it, Facebook treats every query parameter as a separate page and splits your share count across dozens of URLs.

  1. Create a 1200×630 image with your post title and branding
  2. Upload it to your CDN and copy the full URL
  3. Add Open Graph tags to your page <head>
  4. Add twitter:card set to summary_large_image
  5. Validate with Facebook Sharing Debugger and Twitter Card Validator
  6. If the image doesn't load, check file size and CDN headers
  7. Update your template so future posts inherit the same structure

The fastest way: use FeedPulse's Free Meta Tag Generator (free, forever)

Stop hand-coding meta tags and second-guessing dimensions. FeedPulse's Meta Tag Generator lets you paste your page URL, upload an image, and get production-ready Open Graph and Twitter Card tags in under 30 seconds. It auto-validates og:image size, checks for missing properties, and outputs clean HTML you can copy straight into your CMS. No signup, no upsells, no daily limits — just a tool that works. We built it because debugging facebook share preview issues at 11 PM is miserable, and every indie founder we know has burned an hour on it. You can also check how your existing pages perform with our SEO Audit tool to catch missing meta tags before they cost you clicks.

Stop guessing, start shipping

Open Graph and Twitter Card tags aren't optional. They're the difference between a link that gets clicked and a link that gets scrolled past. Facebook needs Open Graph, Twitter needs both (with fallbacks), and every other platform picks one or mashes them together. The fix is simple: set Open Graph for everything, add twitter:card summary_large_image, validate with the official debuggers, and move on. If you're launching a product, promoting a blog post, or sharing anything that matters, get your social media meta tags right the first time. Your click-through rate will thank you.

Made with Emergent