Link Preview Checker

Paste a page’s HTML to see how its link will look on Facebook, X, LinkedIn, Discord, Slack and iMessage, and get a plain-English fix for every missing or broken tag.

Used to resolve relative links and to compare with og:url. Nothing is fetched from it.
How do I get a page’s HTML?
  1. Open the page and view its source: Ctrl+U on Windows and Linux, Cmd+Option+U on a Mac (in Safari, first turn on the Develop menu in Settings, then Advanced). Select everything with Ctrl+A or Cmd+A, copy, and paste it above.
  2. Or, from a terminal: curl -sL https://example.com/page. To see what Facebook’s crawler is sent, add its user agent: curl -sL -A "facebookexternalhit/1.1" https://example.com/page.
  3. Do not copy from the browser’s developer tools Elements panel. It shows the page after JavaScript has run, and most crawlers read the raw HTML the server sends, so tags added by scripts can be invisible to them.

The HTML you paste is read in your browser and never uploaded. To draw the previews, your browser loads the preview image (and favicon) directly from wherever they are hosted.

Where a link preview comes from

When someone pastes your link into a post or a chat, the platform’s own server downloads the page, reads a few tags in its <head>, fetches the image they point to, and turns the result into a card. Your visitor’s browser is not involved. The crawler typically does not run JavaScript, does not log in, sends no cookies and no Referer header, and saves what it found so the next share reuses it.

The tags it reads are mostly Open Graph, a format Facebook introduced in 2010 that nearly every platform now understands. X adds its own twitter: tags but falls back to Open Graph for anything missing. When even those are absent, platforms guess from the <title> and meta description. A complete set for one page looks like this:

<meta property="og:title" content="How to Fix a Leaky Faucet">
<meta property="og:description" content="A ten-minute repair with one wrench.">
<meta property="og:image" content="https://example.com/img/faucet-card.jpg">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="A chrome faucet with a drop of water">
<meta property="og:url" content="https://example.com/fix-a-leaky-faucet/">
<meta property="og:type" content="article">
<meta property="og:site_name" content="Example Home">
<meta name="twitter:card" content="summary_large_image">
<meta name="theme-color" content="#42a4c7">

The image is where most previews break

A preview with a broken image is the most common complaint, and the cause is rarely the tag itself. Work through these in order:

  • Use a full https:// address. Several platforms do not resolve relative paths like /img/card.jpg, and an http image is refused by some apps.
  • Make it 1200×630. That 1.91:1 shape fills the large card on Facebook, LinkedIn and X without cropping. Facebook turns anything under 600×315 into a small thumbnail and ignores images under 200×200. Use JPEG or PNG; SVG is not accepted.
  • Declare the size. Facebook has to download and measure an image before it can display it, so the very first share of a new page can appear with no picture. og:image:width and og:image:height let it lay out the card immediately.
  • Check that a crawler can actually fetch it. Hotlink protection is the classic trap. A rule that blocks image requests without a Referer from your own site stops every crawler, because crawlers send no Referer. The image shows perfectly on your pages and fails in every preview. Bot protection and firewalls do the same thing to the page itself, and X’s crawler obeys robots.txt, so a Disallow rule covering your pages or images stops cards there.

This tool loads your image with no Referer, the way crawlers do, so hotlink protection fails here too instead of hiding behind your browser.

Write the title and description for the card

The <title> tag is written for search results and browser tabs, which is why it usually ends in a separator and the site name. A share card already shows your domain, and Discord and Slack show og:site_name as well, so og:title can drop the suffix and spend its space on the headline. Roughly 60 to 90 characters survive before platforms cut it off, fewer in X’s small card, so put the words that matter first.

Treat og:description as a supporting line rather than the pitch. Facebook and LinkedIn often show one line of it or none at all on phones, and X’s large card shows only the image, the title and the domain. One or two plain sentences under 200 characters is plenty. If a page has no og:description, most platforms fall back to the meta description, which is often written for search engines and reads awkwardly in a card.

What each platform reads

PlatformTitleImageWorth knowing
Facebookog:title, then <title>og:imageFollows og:url and builds the card from that page
Xtwitter:title, then og:titletwitter:image, then og:imagetwitter:card decides between a large image and a small square
LinkedInog:titleog:imageShows the title and domain, rarely the description
Discordog:titleog:imageColors the side bar with theme-color; large image only with summary_large_image
Slackog:titleog:imageShows og:site_name and your site icon above the title
iMessageog:title, then <title>og:imageFalls back to your touch icon when there is no image

When the preview is wrong or will not update

It is cached. Every platform stores the card it built the first time. Facebook’s Sharing Debugger has a Scrape Again button and LinkedIn’s Post Inspector refetches on request. X, Slack and Discord refresh on their own schedule.

The tags are added by JavaScript. Single-page apps often set titles and meta tags in the browser after the page loads. You see them in the developer tools, but a crawler that reads only the HTML the server sends never does. The fix is to render the tags on the server or prerender the page. That is why this tool asks for the page source from view-source or curl: it is what the crawler gets.

og:url points somewhere else. A template that hard-codes the home page into og:url makes every article preview as the home page, because Facebook fetches whatever og:url names. It should match the page’s canonical link exactly, trailing slash included.

There are two sets of tags. A theme and an SEO plugin each writing their own og:title is common, and platforms disagree about which copy wins. Keep exactly one.

For a step-by-step walk through each platform’s debugger, read how to fix link previews.

Frequently Asked Questions

The usual causes are a missing og:image tag, a relative address instead of a full https:// URL, an image smaller than 200×200 pixels, or a server that refuses the crawler's request. That last one is common: hotlink protection often blocks image requests that arrive without a Referer header, and most preview crawlers send none. Paste your page source above and the tool loads the image the same way to show which it is.
1200×630 pixels, a 1.91:1 ratio, is the safe choice for every major platform. Facebook shows images under 600×315 as a small thumbnail and ignores anything under 200×200. X wants at least 300×157 for a large card and files under 5 MB. Keep text and faces away from the edges, because each platform crops a little differently.
Platforms cache what they found the first time. On Facebook, paste the URL into the Sharing Debugger and click Scrape Again. On LinkedIn, run it through the Post Inspector. X, Slack and Discord refresh on their own schedule and have no public refresh button. Changing the URL, for example by adding ?v=2, forces a fresh fetch, at the cost of starting share counts again.
Mostly no. X falls back to og:title, og:description and og:image when the twitter: versions are missing. The one worth adding is twitter:card with the value summary_large_image. Without it X typically uses the small layout with a square thumbnail, and Discord uses the same tag to decide whether to show a large image.
This site is static and runs entirely in your browser, and browsers do not let one website read another website's pages unless that site allows it. A checker that fetches URLs for you has to do it from its own server. Pasting the source keeps everything on your device and shows exactly the HTML a crawler would receive, as long as you copy it from view-source or curl rather than from the developer tools.
og:url declares the permanent address of the page. Facebook counts likes and shares against it and fetches that address to build the card, so it should match your canonical link exactly, trailing slash included. If a template sets og:url to the home page on every page, every link previews as the home page.
Usually one of four things: the platform cached an older version, og:url points to a different page, the page contains two conflicting og:title or og:image tags, or the correct tags are added by JavaScript after the page loads, which most crawlers never run. The checks above flag the last three.
Yes. Discord paints the thin bar on the left of a link embed with the page's theme-color, so a hex value such as #42a4c7 gives your links a consistent brand color there. Without it, the bar is a neutral gray.
The Internet Omni-Tool