Twitter Open Graph Fallback Explained
How X.com's crawler falls back from Twitter Card meta tags to Open Graph tags to standard HTML tags when building preview cards.
When you share a link on X (formerly Twitter), the platform’s crawler reads your page’s metadata to build a preview card. But it doesn’t just look at twitter: tags — it has a well-defined fallback chain that every developer should understand.
This is an expanded companion to our existing How Twitter Cards Fallback to Open Graph Tags article, focused on the technical implementation details.
The Complete Fallback Chain
X’s crawler processes metadata in this exact priority order for each card property:
Title
twitter:title→ Used if presentog:title→ Fallback<title>→ Last resort
Description
twitter:description→ Used if presentog:description→ Fallback<meta name="description">→ Last resort
Image
twitter:image→ Used if presentog:image→ Fallback- (no further fallback — no image shown)
Card Type
twitter:card→ Required (no fallback exists)
This last point is critical: there is no Open Graph equivalent of twitter:card. If this tag is missing, X will attempt to render a summary card by default, but the behavior is inconsistent.
Practical Implementation Strategies
Strategy 1: Minimum Tags (OG + twitter:card)
If you want the simplest setup that works across all platforms including X:
<!-- Open Graph (used by Facebook, LinkedIn, Discord, WhatsApp, Slack, Telegram) -->
<meta property="og:title" content="Page Title" />
<meta property="og:description" content="Page description" />
<meta property="og:image" content="https://example.com/image.png" />
<meta property="og:url" content="https://example.com/page" />
<meta property="og:type" content="article" />
<!-- Twitter Card type (required, no OG fallback) -->
<meta name="twitter:card" content="summary_large_image" />
X will read twitter:card for the layout type, then fall back to og:title, og:description, and og:image for the content.
Strategy 2: Full Tags (Different Content for X)
If you want to customize the card specifically for X’s audience:
<!-- Open Graph -->
<meta property="og:title" content="Twitter Open Graph Fallback: Developer Guide" />
<meta property="og:description" content="A technical guide to X's metadata fallback chain." />
<meta property="og:image" content="https://example.com/og-image.png" />
<!-- Twitter Card (overrides OG for X) -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="How X Falls Back to OG Tags 🔄" />
<meta name="twitter:description" content="X reads twitter: tags first, then og: tags. Here's the exact chain." />
<meta name="twitter:image" content="https://example.com/twitter-image.png" />
Fallback Verification Testing
To verify which tags X’s crawler actually sees:
# Simulate X's crawler
curl -A "Twitterbot/1.0" -s https://your-url.com | grep -E 'twitter:|og:|<title'
Check the output:
- If
twitter:titleis present → X uses it - If
twitter:titleis missing butog:titleexists → X falls back toog:title - If both are missing → X uses
<title>
Edge Cases
og:image But No twitter:image
X will use og:image. However, if the OG image is an unusual aspect ratio (e.g., 1:1 square), X may crop it awkwardly for summary_large_image cards.
Multiple og:image Tags
X uses the first og:image tag encountered in the HTML source.
Missing twitter:card With Complete OG Tags
X may render a basic summary card using OG data, but the behavior is unreliable. Always include twitter:card explicitly.
Related Resources
- How Twitter Cards Fallback to Open Graph Tags — The original fallback overview.
- Twitter Card vs Open Graph — Full comparison of both systems.
- Twitter Card Meta Tags: Complete Guide — All Twitter Card properties.
- Open Graph Tags: Complete List With Examples