Elementary Standards
HTMLCSSWeb StandardsSEOBlogStart reading
Home / Blog / Open Graph and Social Meta Tags: The Definitive Guide
SEO

Open Graph and Social Meta Tags: The Definitive Guide

A spec-accurate look at which og: tags actually do the work, which ones only polish, and why your preview image still won't update.

A page can have perfect copy, a fast server, and flawless HTML, and still look broken the moment someone pastes its link into Slack, LinkedIn, or X. No title, a random screenshot instead of the intended image, a description lifted from the footer — all because of a handful of <meta> tags nobody wrote. Open Graph is the protocol that fills in that gap, and most of what goes wrong with it traces back to a small, fixable set of mistakes.

Open Graph tags control how your pages look when shared on social platforms. Four tags do the real work: og:title, og:type, og:image, og:url. Everything else is refinement. Most broken previews trace back to relative URLs, missing image dimensions, or stale platform caches — not missing tags.

Treating this as a one-off checklist is how teams end up fixing it twice. The tags live in the same <head> block as your canonical URL and your title tag, and they should be produced by the same disciplined process — which is exactly the kind of thing that falls out naturally when web development at YuSMP treats page metadata as a build-time concern rather than something bolted on per-page by hand.

What Is the Open Graph Protocol, Actually?

Facebook introduced Open Graph in 2010 to solve a specific problem: when someone shares a link, the sharing platform needs to know what the page actually represents — not just scrape whatever text happens to sit near the top. Before Open Graph, that scraping was a guessing game, and the results showed it.

The protocol defines a small vocabulary of <meta property="og:..."> tags that let a page declare its own identity: a title, a type, a canonical URL, and a representative image. It's easy to mistake this for "SEO meta tags with a different prefix," but the audience is different. A <meta name="description"> tag is a hint to search engines about how to summarize a page in results. Open Graph tags are instructions consumed by a completely separate crawler — the one each social platform runs when it fetches a shared link — and they render directly as the visible card, not as a snippet a search engine might rewrite.

The Four Tags That Actually Matter

Strip away the optional refinements and Open Graph comes down to four properties. Get these right and the share card works everywhere that respects the protocol:

<meta property="og:title" content="Open Graph and Social Meta Tags: The Definitive Guide">
<meta property="og:type" content="article">
<meta property="og:image" content="https://example.com/images/og-cover.jpg">
<meta property="og:url" content="https://example.com/blog/open-graph-guide">

og:title is what renders as the card's headline — it doesn't have to match your <title> tag exactly, but for consistency it usually should. og:type tells the consumer what kind of object this is (article, website, video.other, and a handful of others), which some platforms use to decide what metadata to look for next. og:image must be an absolute URL — a relative path like /images/cover.jpg will silently fail on most crawlers, because the Open Graph crawler doesn't resolve paths against the page it just fetched the way a browser does. og:url declares the canonical address for the thing being shared, so likes and shares accumulate against one URL instead of splitting across a tracking parameter or an AMP variant.

The Supporting Cast: og:description, og:site_name, og:locale

A second tier of tags refines the card without changing whether it renders at all:

<meta property="og:description" content="...">
<meta property="og:site_name" content="The Elementary Standards">
<meta property="og:locale" content="en_US">

og:description supplies the subtitle line under the card title; most platforms truncate it well below 160 characters, so front-load the point. og:site_name labels the small source line some platforms show above the title (useful for brand recognition in a crowded feed). og:locale matters more than it looks — it affects how some platforms format dates and choose UI language around the embed, and it's worth setting explicitly rather than letting a crawler guess from the page's lang attribute, which it may not check at all.

Open Graph vs. Twitter Card vs. <meta name="description"> — What's the Difference?

These three tag families get conflated constantly because they all live in <head> and all describe the page in some sense. They're consumed by different systems with different fallback behavior:

Tag familyControlsFallback if absent
og:* (Open Graph)Share cards on Facebook, LinkedIn, X/Twitter, Discord, Slack, iMessageCrawler guesses from page title, first image, body text — inconsistent per platform
twitter:* (Twitter Card)Card layout on X specifically (summary vs summary_large_image)X falls back to the matching og:* values when present
<meta name="description">Search engine result snippet (not a ranking factor)Google generates its own snippet from page content

In practice: write og:* tags for social, add twitter:card so X renders the large-image layout rather than the smaller fallback, and keep a separate <meta name="description"> tuned for search snippets — the audiences and character limits differ enough that reusing one string for both is a compromise, not a shortcut.

What Actually Breaks When You Get This Wrong?

The failure modes are consistent across every site we've audited:

Why Your Changed og:image Still Shows the Old Preview

This is the single most common support ticket Open Graph generates, and it has nothing to do with your HTML. Facebook, LinkedIn and X all scrape a URL once and cache the result against that exact URL — not against the image file, not against a timestamp. Change the tag, redeploy, and the platform will keep serving the stale card until something forces it to re-scrape.

Two practical fixes. First, use each platform's debugger to force a re-scrape: Facebook's Sharing Debugger has an explicit "Scrape Again" button; LinkedIn's Post Inspector and X's Card Validator do the same under different names. Second, and more durable: version your image URLs (/assets/og-cover-v3.jpg or a cache-busting query string) so a content change produces a new URL rather than relying on a cache being invalidated at all. A new URL has never been scraped, so there's nothing stale to clear.

How to Validate Your Open Graph Tags

Three tools cover the platforms that matter most, and each checks something slightly different:

Run all three before calling a metadata change done. They cache independently, so passing one tells you nothing about the other two.

FAQ

Do Open Graph tags affect Google rankings directly?

No. Open Graph tags are not a Google ranking signal. They control how your page looks when shared on social platforms, which can indirectly improve click-through rate from social referrals, but Google's crawler ignores og: properties for ranking purposes.

Is og:image required?

Not by the protocol's bare minimum in every implementation, but skip it and most platforms fall back to a generic text-only card or guess at the first image on the page — neither looks intentional. Treat it as required in practice.

What's the ideal og:image size and aspect ratio?

1200×630 pixels, a 1.91:1 aspect ratio. That's the size most platforms crop to for the standard large-image card, and it's large enough to avoid upscaling and blur on high-density displays.

Can a page have multiple og:image tags?

Yes — repeat the property with different URLs. Most consumers simply use the first one they encounter, so list your best image first rather than relying on the platform to pick intelligently.

Does Open Graph work without og:url?

Tags still render, but without it the platform falls back to whatever address the crawler fetched, which may be a redirect target or a tracking URL. Set it explicitly to keep shares attributed to the right canonical page.

Do I need separate Twitter Card tags if I already have Open Graph?

Mostly no — for summary_large_image, X's crawler falls back to og:title, og:description and og:image when the matching twitter: tags are absent. Setting twitter:card yourself is still worth doing, since the fallback otherwise defaults to a smaller card.

How often do platforms re-scrape a page's Open Graph tags?

On their own inconsistent schedule, often measured in days. Each platform caches the scraped result against the URL, so a tag change won't show up until a debugger tool forces a re-scrape or the URL itself changes.

Open Graph isn't a separate SEO task bolted onto a page after the fact — it's the same <head> block, written with the same care, read by a different crawler. Four tags do the load-bearing work, a cache-busting habit solves the one recurring mystery, and three debugger tools tell you, independently, whether any of it actually worked.

Further reading: the Open Graph protocol specification itself, and MDN's reference on the <meta> name attribute for the search-facing side of this comparison.

Back to the blog
More notes

Keep reading