Most Open Graph guides stop at og:title and og:image. Those tags are the start of a dependable link preview, but image access, canonical URLs, caches, and platform-specific rules determine what people actually see.
This guide covers the tags worth setting, platform differences that can be verified, and common reasons an og:image does not render. It also draws a clear boundary between documented preview behavior and unsupported AI-search claims.
If you want a broader primer on head-level metadata, start with our meta tags that actually matter for SEO guide. This article goes deep on Open Graph only.
What Open Graph Actually Is
Open Graph is a protocol Facebook shipped in 2010 to turn web pages into structured objects that social platforms could render as rich cards. The specification never formally expanded, but adoption did. Today every meaningful sharing surface reads OG tags:
- Social feeds: Facebook, LinkedIn, X, Pinterest, Threads
- Messengers: WhatsApp, iMessage, Telegram, Signal, Slack, Discord, Microsoft Teams
- Email and productivity: Gmail inline previews, Notion, Linear, Figma comments
A URL without OG tags may receive a minimal preview assembled from other page metadata, or no preview at all. Correct tags give compatible platforms explicit title, description, image, and URL values, but presentation remains under the platform’s control.
The protocol is simple on purpose. Each tag is a line of HTML with a property attribute and a content attribute. There is no JavaScript requirement, authentication, or API in the protocol itself. A compatible crawler fetches the URL, reads the head, and can use those values to render a card.
The Four Required Open Graph Tags
Per the official Open Graph protocol, these four tags are required on any page you want to render as a rich object:
<meta property="og:title" content="Open Graph Tags: The Complete 2026 Guide" />
<meta property="og:type" content="article" />
<meta property="og:image" content="https://webaloha.co/images/og/open-graph-guide.jpg" />
<meta property="og:url" content="https://webaloha.co/open-graph-tags-complete-guide/" />
A few non-obvious rules:
- Use
property="og:...", notname="og:...". Strict parsers ignore the wrong attribute. og:imagemust be an absolute HTTPS URL. Relative paths are the single most common reason previews break.og:urlshould be the canonical URL, matching your<link rel="canonical">. Inconsistency between the two confuses share aggregation and AI crawlers.og:typemust be a valid value:website,article,book,profile, or one of the music/video subtypes. Custom values are silently dropped.
Extended Open Graph Tags Worth Setting
These are technically optional, but skipping them costs real rendering quality:
<meta property="og:description" content="The complete 2026 guide to Open Graph tags, platform behavior, image specs, and debugging." />
<meta property="og:site_name" content="Web Aloha" />
<meta property="og:locale" content="en_US" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:alt" content="Diagram of Open Graph tags rendered as a social share card" />
<meta property="og:image:type" content="image/jpeg" />
For blog posts, add the article: namespace. These are read by Facebook, LinkedIn, and several AI crawlers as authorship and freshness signals:
<meta property="article:published_time" content="2026-04-18T09:00:00Z" />
<meta property="article:modified_time" content="2026-04-18T09:00:00Z" />
<meta property="article:author" content="https://webaloha.co/about/" />
<meta property="article:section" content="SEO" />
<meta property="article:tag" content="Open Graph" />
For video and audio pages, og:video:secure_url, og:video:type, og:video:width, og:video:height, and the equivalent og:audio:* tags enable inline playback on platforms that support it. For localized sites, repeat og:locale:alternate for each additional language so Facebook can serve the right regional preview.
A word on og:type=profile. Use it for author pages and team bios, combined with profile:first_name, profile:last_name, and profile:username. AI crawlers parse these as entity signals when building author knowledge graphs, and they complement the Person schema you should also be emitting. Product pages do not have a first-class OG type. Facebook retired product years ago, so use website and lean on Product schema for the actual product metadata.
Open Graph Platform Behavior Compared
Every platform reads OG tags, but they disagree about which ones matter and how to render them. This is the reference table we wish existed when we started debugging shares for clients.
| Platform | Reads OG | Uses Twitter tags | Shows description | Image min | Image preferred | Notable quirk |
|---|---|---|---|---|---|---|
| Yes (primary) | No | Yes | 600x315 | 1200x630 | Caches ~30 days; HEAD-checks image URL | |
| Yes (primary) | No | Yes | 1200x627 (strict) | 1200x627 | Silently drops images below minimum | |
| X / Twitter | Falls back to OG | Yes (preferred) | Summary card only | 300x157 | 1200x600 | Large card needs twitter:card=summary_large_image |
| Slack | Yes | No | Yes | 500x262 | 1200x630 | Generates own thumbnails from og:image |
| Discord | Yes | Yes (fallback) | Yes | ~500x262 | 1200x630 | Uses theme-color for embed border |
| Yes | No | No (title + image only) | 300x200 | 1200x630, under 300 KB | Skips images over ~300 KB on mobile | |
| iMessage | Yes (partial) | No | No (title + image only) | 1200x1200 works | 1200x630 or square | Falls back to apple-touch-icon then favicon |
| Telegram | Yes | Yes (fallback) | Yes | 300x200 | 1200x630 | Requires <html prefix="og: ...">; refresh via @WebpageBot |
| Yes (partial) | No | Yes | 600x900 | 1000x1500 (vertical) | Prefers 2:3 portrait; wants og:type=article |
The practical takeaway: a single 1200x630 JPG keyed to your canonical URL will render correctly on every platform except Pinterest, which rewards a separate vertical image. For most SMBs and agencies, shipping that single image plus the core OG tags covers 95 percent of the sharing surface area. Only invest in per-platform assets when analytics tell you a specific channel is worth bespoke treatment.
Two behaviors worth memorizing. First, platforms with messenger roots (WhatsApp, iMessage) are the strictest about file size and the most willing to silently drop your image. Second, LinkedIn is the strictest about dimensions. It is the only mainstream platform that will refuse an otherwise valid image simply because it is 1199 pixels wide instead of 1200.
Open Graph Image Specs by Platform
Image specs from official platform docs and current behavior:
| Platform | Dimensions | Aspect ratio | Max file size | Format |
|---|---|---|---|---|
| 1200x630 | 1.91:1 | 8 MB | JPG, PNG | |
| 1200x627 | 1.91:1 | 5 MB | JPG, PNG | |
| X (large card) | 1200x600 | 2:1 | 5 MB | JPG, PNG, WEBP, GIF |
| X (summary) | 400x400 | 1:1 | 5 MB | Same |
| Slack | 1200x630 | 1.91:1 | - | JPG, PNG |
| Discord | 1280x640 | 2:1 | 8 MB | JPG, PNG, WEBP, GIF |
| 1200x630 | 1.91:1 | ~300 KB ideal | JPG, PNG | |
| iMessage | 1200x1200 or 1200x630 | 1:1 or 1.91:1 | ~5 MB | JPG, PNG |
| Telegram | 1200x630 | 1.91:1 | 5 MB | JPG, PNG |
| 1000x1500 | 2:3 | 20 MB | JPG, PNG |
Text overlay rules that survive every platform:
- Keep all text, logos, and key visual elements within the central 80 percent of the canvas. LinkedIn crops ~5 percent on each side on some viewports; X trims the top and bottom on some clients.
- Never rely on text smaller than 32 px. Share cards render at roughly 360 px wide in most feeds, so your 32 px becomes ~10 px, already near illegibility.
- Put your brand in a consistent position. Bottom-left or top-right are the two spots least affected by platform cropping.
- Use high contrast. Social feeds are cluttered, and low-contrast imagery loses every time.
For the broader image rules (alt text, file format choices, CDN delivery), see our image SEO guide. You can also audit an OG image programmatically with our Image SEO Checker.
Twitter Card Tags: When You Still Need Them
X reads property="og:..." and falls back to OG values for missing twitter: tags. Which means the minimal X-friendly setup is a single extra line:
<meta name="twitter:card" content="summary_large_image" />
That plus your existing OG tags produces a full-bleed image card on X. You only need the full set if X is a meaningful distribution channel or if you want different copy or imagery there:
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@webaloha" />
<meta name="twitter:creator" content="@olegcapo" />
<meta name="twitter:title" content="Open Graph Tags: The Complete 2026 Guide" />
<meta name="twitter:description" content="The full 2026 guide to OG tags, platforms, images, and debugging." />
<meta name="twitter:image" content="https://webaloha.co/images/og/open-graph-guide.jpg" />
Explicit Twitter tags give you control over truncation (X truncates titles around 70 characters and descriptions around 200) and let you switch imagery per platform if you want X-native artwork.
The 11 Reasons Your og:image Is Not Showing
If a platform is rendering your link without the image, the problem is almost always one of these, roughly in order of frequency:
- Relative URL.
content="/images/og.jpg"fails on every crawler. Always use the absolute HTTPS URL including the domain. - HTTP, not HTTPS. Several platforms refuse non-HTTPS images outright. Also set
og:image:secure_urlif you serve a mixed environment. - Platform cache is stale. You updated the image; the platform is still showing the old one. Force-refresh via the platform’s debugger (see next section).
- Image below minimum dimensions. LinkedIn rejects anything under 1200x627. Facebook rejects under 200x200. Always default to 1200x630 or larger.
- File size too large. WhatsApp skips images over ~300 KB on mobile. Facebook caps at 8 MB. Compress before deploying.
- Wrong or missing file extension. Some crawlers infer type from the URL. Use
.jpg,.jpeg, or.png. WebP is supported on X but inconsistent elsewhere. - Image behind auth, CDN rules, or hotlink protection. Crawlers are not logged in. Test the image URL in an incognito window; if it 401s or 403s, the crawler will too.
- robots.txt or bot-protection blocking the crawler. Cloudflare bot-fight mode, AWS WAF, and aggressive robots.txt rules block FacebookExternalHit, LinkedInBot, TwitterBot, TelegramBot, and Slackbot. Allow these user agents explicitly in your bot rules and robots.txt.
- Redirects. Each redirect hop is a chance for the crawler to bail. Keep OG image URLs as direct 200 responses.
- CORS or hotlink headers stripping the crawler. Some CDNs refuse requests without a Referer header. Check your CDN’s bot rules.
- Mismatch between
og:imageandog:urlorigins. Serving the image from a different domain than the page sometimes triggers validation errors on LinkedIn. Keep them on the same domain where possible, or pre-warm the cache with both.
A diagnostic shortcut: run curl -A "facebookexternalhit/1.1" -I https://yourdomain.com/path/og.jpg from a terminal. If you get a 200 OK with Content-Type: image/jpeg and a reasonable file size, the image is reachable for Facebook and most other crawlers. If you get a 403, 404, or a challenge page, you have found the bug without having to touch a single platform debugger. Repeat with LinkedInBot, TwitterBot, and TelegramBot as user agents if a specific platform is failing.
Run a broken URL through our Open Graph Checker to see which tags the crawlers actually parse. It catches most of the issues above in one pass. Starting from scratch? Our Open Graph Generator writes the full tag set for you to paste into your <head>.
Open Graph and AI Search: The Evidence Boundary
Open Graph is documented as a link-preview protocol. The major AI search providers do not publicly document it as a ranking signal, a citation selector, or a fallback for missing JSON-LD. It is therefore not defensible to promise AI visibility gains from OG tags alone.
Keep the layers separate:
| Layer | Documented purpose | What to verify |
|---|---|---|
| Open Graph | Shared-link title, description, image, type, and URL | Inspect an actual preview on each important distribution platform |
| Schema.org / JSON-LD | Structured description of entities and page content | Validate vocabulary and ensure markup matches visible content |
| Search and AI eligibility | Provider-specific crawling, indexing, snippet, and content policies | Follow official Google, OpenAI, Perplexity, or other provider documentation |
Google’s AI features guidance, for example, says no special AI markup is required and points publishers back to normal Search eligibility and snippet controls. OpenAI’s publisher guidance focuses on crawler access and referral attribution rather than Open Graph.
Good OG hygiene is still worthwhile: it keeps shared titles, summaries, images, and canonical URLs consistent. Just evaluate it through preview accuracy and referral behavior, not an unverified citation claim. For structured-data work, use the separate schema markup guide.
Open Graph Implementation in Astro, Next.js, and WordPress
Three short, practical examples.
Astro (dynamic OG per page):
---
// src/layouts/BaseLayout.astro
const { title, description, image, type = "website" } = Astro.props;
const canonical = new URL(Astro.url.pathname, Astro.site).toString();
const ogImage = new URL(image ?? "/og-default.jpg", Astro.site).toString();
---
<meta property="og:title" content={title} />
<meta property="og:description" content={description} />
<meta property="og:type" content={type} />
<meta property="og:url" content={canonical} />
<meta property="og:image" content={ogImage} />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:site_name" content="Web Aloha" />
<meta name="twitter:card" content="summary_large_image" />
Next.js (App Router metadata API):
// app/blog/[slug]/page.tsx
export async function generateMetadata({ params }) {
const post = await getPost(params.slug);
return {
title: post.title,
description: post.description,
openGraph: {
title: post.title,
description: post.description,
type: "article",
url: `https://example.com/blog/${post.slug}/`,
images: [{ url: post.ogImage, width: 1200, height: 630 }],
publishedTime: post.publishedAt,
},
twitter: { card: "summary_large_image" },
};
}
WordPress: Yoast SEO and Rank Math both emit OG tags automatically from the post title, excerpt, and featured image. Override per-post in the “Social” tab when the defaults are not what you want. If you hand-code your theme, drop the tag block into header.php inside the <?php wp_head(); ?> output and pull values from get_the_title(), get_the_excerpt(), and get_the_post_thumbnail_url($post, 'full'). A common WordPress gotcha: both Yoast and Rank Math will happily emit OG tags, and if both plugins are active you can end up with two og:image tags on the same page. Some crawlers pick the first, some pick the last, and you get inconsistent previews. Pick one plugin and deactivate the other’s social module.
How to Debug Open Graph Tags
The workflow we use on every client launch, in order:
- Facebook Sharing Debugger: parses the URL, shows Facebook’s last scrape, and lets you “Scrape Again” to force a cache refresh. This also covers WhatsApp and Instagram because they share Meta’s crawler.
- LinkedIn Post Inspector: the only way to refresh LinkedIn’s cache. If the image is wrong on LinkedIn, you have to re-inspect after every edit.
- X Card Validator (retired as a standalone tool; paste the URL into X’s composer to preview): shows exactly how the card will render, including truncation.
- Telegram @WebpageBot: send the URL in a DM to refresh Telegram’s cache. Maximum 10 URLs per day.
- Slack: paste into a private channel; Slack regenerates on every fresh paste if the URL is unchanged, or you can append a dummy query param (
?v=2) to force a re-scrape. - A tag inspector of your own: before you test platform-by-platform, confirm what is actually being served. View source, Chrome DevTools Elements panel, or a server-side fetch will all show you the rendered head.
Cache-busting pattern: if you absolutely need a share to re-scrape and platform debuggers are not available, append a throwaway query string (?v=2026-04-18). Most crawlers treat different query strings as different URLs. Use this sparingly; it fragments share counts if abused.
Pre-launch ritual. Before any major content launch or homepage refresh, we run every canonical URL through Facebook’s debugger and LinkedIn’s inspector once to pre-warm the cache. That way the first real share from a subscriber or stakeholder gets the correct preview immediately instead of Meta or LinkedIn discovering the page live and caching whatever intermediate state they find.
For broader head-tag audits across a site, combine the OG check with our Meta Tag Checker.
Open Graph Implementation Checklist
For every shareable page:
-
og:title,og:type,og:image,og:urlpresent -
og:description,og:site_name,og:localepresent -
og:imageis an absolute HTTPS URL, at least 1200x630, under 5 MB, JPG or PNG -
og:image:width,og:image:height,og:image:altset -
twitter:card=summary_large_imageset (explicittwitter:*tags if X matters) -
article:published_time,article:modified_time,article:authorset on blog posts - Theme-color meta tag set for Discord embed branding
-
og:urlmatches canonical URL exactly - Tested through Facebook Debugger and LinkedIn Post Inspector
- Important text kept inside the central 80 percent of the OG image
- OG image origin not blocked by robots.txt, WAF, or CDN rules
Where Open Graph Fits in Your 2026 Stack
Open Graph remains a practical link-preview layer. Put the tags in your shared layout or CMS, keep them aligned with the canonical URL and visible page, and retest whenever titles, images, domains, or platform requirements change.
The mental model we recommend to clients: OG tags are cheap, durable, and compound. An hour of setup today pays off every time your content is shared, quoted, or cited for as long as the page lives. Very few things in SEO and GEO offer that ratio in 2026.
If you want this implemented across your site, or audited as part of a broader technical SEO review, that is what our web design and SEO services teams do on every launch.
Frequently asked questions
What are Open Graph tags?
Open Graph tags are HTML meta tags in the head of a page that tell social platforms, messaging apps, and crawlers how to render a link preview. The protocol was introduced by Facebook in 2010 and is now read by LinkedIn, X, Slack, Discord, WhatsApp, iMessage, Telegram, and a growing number of AI search crawlers. The four required tags are og:title, og:type, og:image, and og:url.
Do Open Graph tags help SEO rankings?
Open Graph exists to describe link previews, not as a documented Google ranking signal. Better previews can make shared links clearer and more appealing, but their traffic effect depends on the audience and platform. There is no reliable primary-source evidence that major AI search products use Open Graph as a fallback citation signal.
What size should an Open Graph image be?
Use 1200 by 630 pixels at a 1.91:1 aspect ratio as your universal default. This works for Facebook, LinkedIn, Slack, Discord, WhatsApp, and Telegram without cropping, and X will render it as a summary_large_image card. Keep the file under 5 MB and under 300 KB if WhatsApp sharing matters to you. Keep critical text and logos inside the central 80 percent of the canvas to survive platform-specific cropping.
Why is my og:image not showing up?
The most common causes are relative image URLs instead of absolute HTTPS URLs, platform caches that have not been refreshed, images below a platform's minimum dimensions (LinkedIn rejects anything below 1200 by 627), and crawlers blocked by robots.txt or bot-protection rules. Run the URL through the Facebook Sharing Debugger and LinkedIn Post Inspector to see exactly what each platform scraped and force a cache refresh.
Do I still need Twitter Card tags if I have Open Graph tags?
X falls back to Open Graph when Twitter-specific tags are missing, so at minimum you only need twitter:card set to summary_large_image. If X is a meaningful distribution channel for you, add twitter:title, twitter:description, twitter:image, and twitter:site explicitly for predictable rendering. Everything else can safely fall back to your OG tags.
How often do social platforms cache Open Graph tags?
Cache duration and refresh behavior are platform-controlled and can change. After editing tags or images, use the platform's current official inspection or sharing-debug tool where one is available, and test the actual shared URL rather than relying on a universal expiry schedule.
Do AI search engines read Open Graph tags?
Some crawlers may read ordinary page metadata, but the major AI search providers do not document Open Graph as a citation-ranking or schema-fallback mechanism. Implement Open Graph for accurate link previews. For search eligibility, follow each provider's indexing, snippet, crawler, and visible-content guidance instead.