You publish something, someone shares it, and the link renders as a bare URL with no image and a description scraped from your cookie banner. That is what missing Open Graph tags look like in the wild, and it is invisible to you because you never see your own links the way other people do.

Advertisement: Kinsta managed WordPress hosting, free for the first 30 days

Advertisement. We earn a commission if you sign up through this link, at no extra cost to you.

This is a reference. What the tags are, what values they take, what sizes the images need to be, and which of the tools that claim to validate them still work.

How the two systems relate

Open Graph is Facebook’s specification from 2010, and it became the de facto standard: Facebook, LinkedIn, Slack, WhatsApp, Discord, Signal, iMessage and most others read it. Twitter Cards are X’s parallel system, and they exist mainly to add the card type — the choice between a small square thumbnail and a full-width image.

The important thing, and the thing that saves you half the work: X falls back to Open Graph. If there is no twitter:title, X uses og:title. Same for description and image. So you do not need a parallel set of tags — you need a complete Open Graph set plus a couple of X-specific ones.

The Open Graph tags that matter

Four are required by the specification:

<meta property="og:title" content="How to Fix Redirects, Chains and Broken URLs">
<meta property="og:type" content="article">
<meta property="og:url" content="https://example.com/redirects-and-url-structure/">
<meta property="og:image" content="https://example.com/img/redirects.jpg">

Three more you should always include:

<meta property="og:description" content="What actually costs you rankings, and what does not.">
<meta property="og:site_name" content="Expert Web Audit">
<meta property="og:locale" content="en_US">

Notes on the ones people get wrong:

og:url must be the canonical, absolute URL of the page. Its job is to make every share of the page — with tracking parameters, from different referrers — count as the same object. Get this wrong and your share counts fragment.

og:image must be an absolute URL. Relative paths silently fail. The image also has to be publicly fetchable — behind a login, behind hotlink protection, or on a staging domain, and the scraper gets nothing.

og:type is article for posts, website for the homepage and landing pages, product for shop items. Using article lets you add publication metadata:

<meta property="article:published_time" content="2026-09-06T09:00:00+00:00">
<meta property="article:author" content="https://example.com/about/">

Adding the image dimensions saves the scraper a fetch and stops the layout jumping on first render:

<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Diagram of a three-hop redirect chain">

The X tags you still need

Only two are genuinely necessary, because the rest fall back to Open Graph:

<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@yourhandle">

Note the attribute difference, which is a real and common source of silent failure: Open Graph uses property, X uses name. Writing property=”twitter:card” produces a tag that looks correct and does nothing.

The card types worth knowing:

Optionally, twitter:creator with the author’s handle, which shows attribution on the card.

Image sizes

One image can serve every platform if you size it right.

1200 × 630 pixels is the answer for almost everyone. That is 1.91:1, which matches Facebook and LinkedIn exactly and works with summary_large_image on X, which accepts anything from 2:1 to 1.91:1.

The constraints worth knowing:

If you use the summary card type instead, the image is cropped to a square, so a 1200 × 630 image loses its sides. Match the image to the card type you declared.

Setting it up in WordPress

Do not hand-write these into your theme. Every SEO plugin generates them from content you have already entered, which means they stay correct when you edit a post.

Rank Math: Titles & Meta → Social Meta sets the site-wide defaults and the fallback image. Per post, the Social tab in the Rank Math panel overrides title, description and image for Facebook and X separately.

Yoast: Social settings under SEO, with a Social tab in the sidebar of each post.

SEOPress: Social tab in the settings, per-post overrides in the metabox.

Two site-wide defaults are worth setting once and forgetting: a fallback image for content with no featured image, and the card type set to summary_large_image rather than the default small card.

If you are writing the tags yourself in a theme, check first that the plugin is not already outputting them. Duplicate og: tags produce unpredictable results, because different scrapers resolve the conflict differently.

Testing, and which validators still exist

This is where most guides are out of date.

Facebook Sharing Debugger — still the best tool for the job. It shows exactly what Facebook parsed, lists warnings, and lets you force a re-scrape. Use it even if you never post to Facebook, because it validates the Open Graph tags every other platform reads.

LinkedIn Post Inspector — same idea for LinkedIn, and worth using separately because LinkedIn caches aggressively and independently.

X Card Validatorgone. X retired cards-dev.twitter.com/validator in 2022. Guides still telling you to use it, including the version of this article that used to sit at this URL, are wrong. To check an X card now, post the link in a draft compose window and look at the preview, or use a third-party checker such as opengraph.xyz.

View source — the fallback that never breaks. Search the page source for og: and twitter: and read what is actually there.

The caching problem

Every platform caches what it scraped the first time anyone shared a URL. Fix your tags and reshare, and you will often still see the old broken preview, which sends people off looking for a bug that is no longer there.

Facebook: paste the URL into the Sharing Debugger and click Scrape Again. LinkedIn: the Post Inspector re-scrapes on inspection. X: the cache clears on its own, typically within a week, and there is no way to force it.

The practical consequence is worth building into your process — check the tags before you share a link the first time, not after someone tells you the preview looks wrong.

Writing the text

The tags are the easy half. What goes in them is a separate decision from your SEO title and meta description, and treating them as the same thing wastes the opportunity.

A search snippet is read by someone who is already looking for what you have. A social preview is read by someone scrolling past who was not looking for anything. The first can afford to be descriptive; the second has to earn attention.

So: og:title can drop the keywords and say the interesting part. Around 60 to 90 characters survives on most platforms. og:description has roughly 150 to 200 characters before truncation, and should give a reason to click rather than summarising the page. And the image does more work than either — a plain photograph with no text is a wasted slot where a chart, a screenshot, or a single legible sentence would stop the scroll.

The short version

Write a complete Open Graph set and let X fall back to it. Add twitter:card set to summary_large_image and your handle. Make one 1200 × 630 image with the text away from the edges. Set a site-wide fallback image in your SEO plugin. Check it in the Facebook debugger before the first share, because after that you are arguing with a cache.

These tags describe your page to social platforms. The parallel job for search engines is done by structured data, which lives in the same part of the head and answers a different question.

Working through this list on your own site and would rather not? That is what an Expert Web Audit is for.

Advertisement: Kinsta managed WordPress hosting

Advertisement. We earn a commission if you sign up through this link, at no extra cost to you.

Leave a Reply

Your email address will not be published. Required fields are marked *