Open Graph Checker
A free open graph checker that reads the HTML you paste or drop in, counts every og: and twitter: tag it finds, grades the ones that decide whether a card renders against the published Facebook, LinkedIn and X rules, loads your og:image to measure it, and draws the resulting card. Nothing is uploaded.
In your browser: right-click the page → View Page Source → copy everything between <head> and </head>.
Privacy: nothing is uploaded. Parsing runs entirely in your browser with DOMParser. The only network request this tool makes is loading the og:image URL you provided, so its real dimensions can be measured — it cannot fetch a page for you because browsers block cross-origin page reads.
How the Open Graph checker works
The Open Graph checker parses HTML in your browser, counts every og: and twitter: tag it finds, grades the ones that decide whether a card renders against the Facebook, LinkedIn and X rules cited below, and draws the resulting card. Duplicate tags are counted, empty content attributes are called out, and each row carries a PASS, WARN or FAIL badge with a one-line reason.
Paste your page head or drop the HTML file
Three input modes cover the common cases. Paste the <head> (or the whole
page) into the textarea, drop a saved .html file, or enter only an image URL when you just
want the og:image measured. In image-only mode the tag table is hidden because there are no
tags to grade.
The image check is real: the tool loads your og:image in an <img> element
and reports its natural width and height, its ratio class (1.91:1, 2:1, 1:1 or other) and a
per-platform verdict. File size is not checked — reading it would need a CORS-enabled
request that most image hosts refuse — so the 8 MB and 5 MB limits stay your job.
Why this checker does not fetch URLs for you
There is no server behind this page, and browsers block JavaScript from reading another site's HTML (the CORS policy). URL-input checkers have to fetch the page from their own server (or a proxy); this one does neither.
The trade-off cuts both ways. You have to paste or drop the markup, but the tool works on localhost, staging and password-protected pages that public fetchers can never reach, and your HTML never leaves your machine.
Get the exact HTML a crawler sees
View source, not the DevTools inspector. Chrome, Edge and Firefox open it with Ctrl+U on Windows and Linux or Cmd+Option+U on macOS; Safari hides the command until you enable the Develop menu under Settings → Advanced. Crawlers read the raw response, so tags injected by JavaScript will not appear here — and they will not appear to Facebook either.
If curl is installed (it ships with macOS and recent Windows), a terminal alternative is
curl -A "facebookexternalhit/1.1" -sL https://example.com/page, which returns
the page as Meta's crawler user agent would receive it. Save the output as .html and drop it
on the checker.
What Open Graph is and why link previews depend on it
Open Graph is the meta-tag protocol, published at ogp.me, the Open Graph protocol specification, that tells Facebook, LinkedIn, X, Slack and messaging apps which title, description and image to show when a URL is shared. The spec names four properties as required on every page: og:title, og:type, og:image and og:url.
The spec also settles a conflict rule: when a property repeats, the first tag from top to bottom wins, and og:image is one of the few properties allowed to repeat on purpose (an array of images), alongside og:video, og:audio and og:locale:alternate. Not every scraper honours the first-wins rule, so the checker keeps the first og:image per the spec and reports duplicates of every other og: and twitter: tag rather than silently keeping the last value.
Slack's developer documentation (unlinked) describes its unfurler as crawling the URL and looking for common Open Graph and X Card metadata. Discord publishes no link-preview specification at all, so the Discord figures repeated around the web are community observations, and the table below labels them that way.
The checker's Slack / Discord verdict is therefore a heuristic, not a published rule: an image at least 1.85:1 and at least 600 px wide gets the large layout, anything else the small thumbnail. Neither platform publishes a spec, so treat that row as a guide and confirm in a real channel.
The Open Graph protocol and SEO: what Google actually reads
Open Graph tags are not on Google Search Central's list of supported meta tags and attributes (unlinked), so treat any open graph SEO claim about rankings with suspicion. Where Open Graph does touch Google is Discover: Google's Discover documentation (unlinked) says to use large images at least 1200 px wide, enabled with the max-image-preview:large robots setting, and names og:image as one way to specify that image.
The real payoff is click-through on shared links. A share with a correct title, a description under X's 200-character cap and a full-width image gets the large card layout on every platform; a share with a missing og:image gets a grey box or a tiny thumbnail. Same URL, very different click rate.
Open Graph and Twitter Card tag reference
The reference below covers sixteen tags; the checker grades the eleven og:/twitter: tags
that decide whether a card renders (title, description, image, image size, url, type,
site_name, twitter:card, twitter:image, twitter:title, twitter:description) plus
<title>, meta description and canonical. It also flags duplicates,
empty content= and og: tags written with name=. The remaining
rows (og:locale, og:image:alt, og:image:type, twitter:site, twitter:image:alt) are counted
but not graded.
Character limits come from X's archived card markup reference (unlinked), and fallbacks are the ones X documents on the same page.
| Tag | Status | Fallback / default | Limit or note |
|---|---|---|---|
og:title | Required (ogp.me) | — | X: 70 characters for twitter:title (X card markup reference, unlinked); the checker warns above 60 and again above 70 |
og:type | Required (ogp.me) | Unmarked pages are treated as website | Values include website, article, book, profile |
og:image | Required (ogp.me) | — | Absolute https URL; see the platform limits table |
og:url | Required (ogp.me) | — | Canonical, absolute; the checker warns when it differs from <link rel=canonical> |
og:description | Optional; read by LinkedIn and X | — | X: 200 characters for twitter:description (X card markup reference, unlinked); the checker warns under 110 or over 200 |
og:site_name | Optional (ogp.me) | — | Shown as the source label on Facebook and Slack cards |
og:locale | Optional (ogp.me) | Defaults to en_US | Format language_TERRITORY |
og:image:width / og:image:height | Optional, strongly recommended by Meta | — | Numeric pixels; lets Facebook's crawler render the image without downloading it first |
og:image:alt | Optional (ogp.me) | — | X: 420 characters for twitter:image:alt (X card markup reference, unlinked) |
og:image:type / og:image:secure_url | Optional (ogp.me) | — | MIME type; https mirror of an http image (the checker warns if only secure_url is set) |
twitter:card | Required for an X card | og:type + og:title + og:description may render a small summary card | summary, summary_large_image, player, app |
twitter:site | Required by X (or twitter:site:id) | — | @username of the site |
twitter:title | Optional | Falls back to og:title | 70 characters |
twitter:description | Optional | Falls back to og:description | 200 characters |
twitter:image | Optional | Falls back to og:image | See X row in the limits table |
twitter:image:alt | Optional | Falls back to og:image:alt | 420 characters |
One markup detail trips up many pages: og: tags use the property attribute,
twitter: tags use name. Most crawlers tolerate the swap, but the spec does not,
so the checker records which og: tags used name= and the corrected-tags output
writes them back properly.
Open Graph image size limits per platform
Facebook wants at least 1200 × 630 at 1.91:1 under 8 MB, LinkedIn a minimum of 1200 × 627 at 1.91:1 under 5 MB, and X a 2:1 image between 300 × 157 and 4096 × 4096 under 5 MB. One 1200 × 630 file therefore passes all three published limits, losing 4.8% of its height in total (2.4% per edge) when X displays it at 2:1.
| Platform | Recommended | Ratio | Minimum / maximum | File size | Source |
|---|---|---|---|---|---|
| 1200 × 630 | 1.91:1 (keep as close as possible) | 200 × 200; below 600 × 315 the large-image layout is lost | 8 MB | Meta sharing documentation | |
| 1200 × 627 | 1.91:1 | 1200 × 627 stated minimum; under 401 px wide displays as a thumbnail (noted beside LinkedIn's ad specs) | 5 MB | LinkedIn Help a521928 | |
| X — summary_large_image | 2:1, e.g. 1200 × 600 | 2:1 | 300 × 157 min, 4096 × 4096 max; JPG, PNG, WEBP, GIF (first frame); no SVG | 5 MB | X Cards documentation (archived) |
| X — summary | 1:1 | 1:1 | 144 × 144 min, 4096 × 4096 max | 5 MB | X Cards documentation (archived) |
| Slack | Reads og: and twitter: tags | Not published | Not published | Not published | Slack developer docs on unfurling (unlinked) |
| Discord | Reads og: and twitter: tags | Not published | Large embed with twitter:card=summary_large_image, else small thumbnail (community-observed, no Discord documentation) | Not published | No official spec |
Facebook's figures are from Meta's sharing documentation on images in link shares, LinkedIn's from LinkedIn Help's page on making a website shareable, and X's from the archived X Cards documentation for the summary card with large image — the live developer.x.com pages now redirect to a generic landing page.
1200 × 630 is really 40:21
1200 divided by 630 is 1.905, exactly 40:21, which Facebook and LinkedIn round to 1.91:1. LinkedIn's 1200 × 627 is 1.914:1 — close enough that the same file satisfies both. The checker's ratio class treats anything within a small tolerance of 1.91:1 as a match.
1.91:1 versus 16:9: the 45-pixel difference
A 16:9 frame 1200 px wide is 675 px tall, 45 px taller than the 1.91:1 card. Cropping a 16:9 still down to 1200 × 630 removes 6.7% of its height in total (3.3% per edge), so keep titles out of that band.
The 1920 × 1080 aspect ratio reference covers the 16:9 side. The same per-edge crop arithmetic applies when you cut a 16:9 still for a 9:16 Reel or Short, and the full aspect ratio and resolution specs library covers every other frame.
Common Open Graph failures and what the checker flags
Most blank or wrong previews come from six causes the checker can see in the markup: a
relative og:image path, an http:// image on an https page, missing og:image:width and
og:image:height, an empty content= attribute, an absent twitter:card, and tags
that only exist after JavaScript runs.
Relative or http:// og:image URLs
A relative path such as /img/card.png is a FAIL: crawlers need an absolute
URL, and the tool does not guess a base because a pasted snippet may not carry one. An
http:// image is a WARN, since browsers and crawlers on an https page may block it as mixed content.
Missing og:image:width and og:image:height
Meta's documentation says these two tags let the crawler render the image immediately instead of downloading and processing it asynchronously — the classic cause of a blank first share. The checker warns when they are missing, fails when they are not numeric, and warns again when the declared numbers differ from the image it actually loaded.
No twitter:card, or text over the X limits
Without twitter:card, X may fall back to a small summary card built from og:type, og:title and og:description, which drops the large image. Titles over 70 characters and descriptions over 200 are truncated on X, so the checker warns at those thresholds and the Copy corrected tags button fills in summary_large_image when the value is missing or unknown.
After you fix the tags: force a re-scrape
Platforms cache the first scrape, so run the URL through Meta's Sharing Debugger and click Scrape Again, then through LinkedIn's Post Inspector. X retired its Card Validator (X, 2022, unlinked), so preview by composing a draft post. Slack documents no re-scrape tool; its previews are cached and refresh on Slack's own schedule.
The previews on this page are approximations and never replace those platform checks.
Making an image that passes
If the checker reports a missing or undersized og:image, build a 1200 × 630 card in the free OG image generator, which draws title, subtitle and logo on a canvas and prints the matching meta snippet. For a photographic or illustrated background, render one in the Playcut AI image generator and compose the text on top.
None of the three image models in Playcut's catalog lists 1.91:1 natively. Nano Banana Pro and Nano Banana 2 offer 16:9 and 21:9 among their ratios, and Grok Imagine (Image) offers both 16:9 and 2:1 — X's card ratio.
Generate at 16:9 and crop 45 px, or at 2:1 and add 15 px per edge. Per-ratio output pixels are not published, so check the export size before you upload; the full free tools library has a resizer and converter for that last step.
Open Graph checker FAQ
Does Open Graph affect SEO?
Not rankings. Open Graph tags do not appear on Google's list of supported meta tags and Google has not named them as a ranking signal. They change what people see when a link is shared on Facebook, LinkedIn, X or Slack, which changes click-through, and Google Discover reads og:image to pick large preview images — so the payoff is traffic from shares and Discover, not position.
What are the four required Open Graph tags?
og:title, og:type, og:image and og:url. The Open Graph protocol (ogp.me) names these four as required on every page; og:description, og:site_name and og:locale are optional, but LinkedIn lists og:description among the fields it reads, and X falls back to og:description when twitter:description is absent.
What aspect ratio is 1200 × 630?
Exactly 40:21, which is 1.905:1 and is printed as 1.91:1 in Facebook's and LinkedIn's documentation. It is slightly wider than 16:9 (1.78:1) — a 16:9 image 1200 pixels wide is 675 pixels tall, 45 pixels taller than the 1.91:1 card, so cropping 16:9 to 1.91:1 removes 6.7% of the height in total (3.3% per edge).
Why does my og:image not show when I share a link?
The usual causes are a relative og:image path instead of an absolute https URL, an image under Facebook's 200 × 200 minimum or narrower than the 401 pixels below which LinkedIn shows a thumbnail, missing og:image:width and og:image:height (Facebook's crawler may skip the image on the first share without them), tags only added by JavaScript, or a cached scrape from before you fixed it. Paste the head into the checker to see which one applies.
Why can't this checker fetch my URL like other tools?
It runs entirely in your browser on a static site, and browsers block JavaScript from reading other websites' HTML (the CORS policy). Tools that accept a URL fetch it from their own server. Here you paste the head or drop the saved HTML file — nothing leaves your machine, which also means it works on localhost and staging pages that public fetchers cannot reach.
What image size does X need for a summary_large_image card?
A 2:1 image at least 300 × 157 and at most 4096 × 4096 pixels, under 5 MB, in JPG, PNG, WEBP or GIF (first frame only; SVG is not supported), per X's archived Cards documentation. A 1200 × 630 Open Graph image passes and is shown at 2:1, so roughly 15 pixels are trimmed from the top and bottom edges (4.8% of the height in total, 2.4% per edge).
How do I clear a cached link preview after fixing my tags?
Facebook: paste the URL into the Sharing Debugger and click Scrape Again — Meta's crawler documentation says passing a URL through the debugger forces a fresh crawl. LinkedIn: run the URL through Post Inspector. X: the Card Validator was retired (X, 2022, unlinked), so compose a draft post with the link to see the current card. Slack documents no re-scrape tool; its previews are cached and refresh on Slack's own schedule.
Need the picture behind the card?
Generate a background at 16:9 or 2:1 in Playcut's AI image generator, crop it to 1200 × 630, then paste the finished head back into this checker.
Open the Playcut studio