Schema.org vs Open Graph Tags: Which Do You Need and When?
The differences between Schema.org JSON-LD and Open Graph meta tags — when to use each, where they overlap, and why most sites need both.
Two different systems, two different consumers
Schema.org structured data (typically delivered as application/ld+json JSON-LD) and Open Graph meta tags are both ways to describe your page's content to machines — but they serve entirely different consumers:
- Open Graph tags are consumed by social platforms (Twitter, LinkedIn, Facebook, Discord, Slack, WhatsApp) when rendering link previews.
- Schema.org JSON-LD is consumed by search engines (Google, Bing) and AI answer engines to understand page type, entities, and relationships — enabling rich results like article breadcrumbs, FAQ panels, product ratings, and event cards in SERPs.
An OG tag has no effect on Google rich results. A JSON-LD Schema block has no effect on a Twitter card preview. They do not compete — they complement each other.
What Open Graph tags control
Open Graph (og:*) meta tags control how your page looks when shared as a link. The core four are:
<!-- Open Graph core tags --> <meta property="og:title" content="My Article Title" /> <meta property="og:description" content="A short, compelling description." /> <meta property="og:image" content="https://yourdomain.com/og/image.png" /> <meta property="og:url" content="https://yourdomain.com/articles/my-article" /> <meta property="og:type" content="article" /> <!-- Article-specific OG properties --> <meta property="article:published_time" content="2025-01-15T00:00:00Z" /> <meta property="article:author" content="https://yourdomain.com/team/jane" /> <meta property="article:section" content="Technology" /> <!-- Twitter / X (reads OG but also has native tags) --> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:image" content="https://yourdomain.com/og/image.png" />
These tags are read by Twitterbot, LinkedInBot, Discordbot, Slackbot, facebookexternalhit, and other social crawlers when they fetch your URL to generate a link preview card.
What Schema.org JSON-LD controls
Schema.org structured data tells Google (and other search engines) what type of thing your page represents. The most common types are Article, Product, FAQPage, Organization, and BreadcrumbList.
<!-- Schema.org Article (JSON-LD in <head> or <body>) -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "My Article Title",
"description": "A short, compelling description.",
"image": "https://yourdomain.com/og/image.png",
"url": "https://yourdomain.com/articles/my-article",
"datePublished": "2025-01-15T00:00:00Z",
"author": {
"@type": "Person",
"name": "Jane Smith",
"url": "https://yourdomain.com/team/jane"
},
"publisher": {
"@type": "Organization",
"name": "My Site",
"url": "https://yourdomain.com"
}
}
</script>Google uses this to display author bylines in search, show article dates, and understand topical authority. It has zero impact on Twitter or LinkedIn link previews.
Where they overlap (and where they don't)
There is deliberate conceptual overlap between the two systems — both describe a page's title, description, image, and type. But the technical implementation and consumers are completely separate:
- Google primarily reads JSON-LD for rich results but also reads OG tags as signals (e.g., for image previews in search).
- Twitter/LinkedIn/Discord read OG meta tags. They do not execute JSON-LD.
- Facebook reads OG meta tags exclusively for link previews (their Sharing Debugger ignores JSON-LD).
- AI search engines (Perplexity, ChatGPT Browse) read both, but JSON-LD is more authoritative for entity disambiguation.
The practical recommendation: use both
For any content-heavy page (articles, products, events), implement both:
<!-- In your <head> -->
<!-- 1. Open Graph — for social link previews -->
<meta property="og:type" content="article" />
<meta property="og:title" content="My Article Title" />
<meta property="og:description" content="A compelling description." />
<meta property="og:image" content="https://yourdomain.com/og/article.png" />
<meta property="og:url" content="https://yourdomain.com/articles/my-article" />
<meta name="twitter:card" content="summary_large_image" />
<!-- 2. Schema.org — for Google rich results -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "My Article Title",
"description": "A compelling description.",
"image": "https://yourdomain.com/og/article.png",
"datePublished": "2025-01-15T00:00:00Z",
"author": { "@type": "Person", "name": "Jane Smith" }
}
</script>Keep the values in sync — the same title, description, and image URL in both. Having conflicting data between your OG tags and JSON-LD is a minor trust signal issue and makes debugging harder.
Check your Open Graph tags free
After adding OG tags, verify they're correct with OGFixer — see live previews on Twitter, LinkedIn, Discord, and Slack instantly.