Link Preview Checker

Paste a public URL. We fetch the first HTML response, read Open Graph and Twitter tags, and sketch how a link card may look. Nothing is uploaded except the URL you type. The fetch runs in a Cloudflare function so we can see the same public document a crawler sees — JavaScript in your browser cannot do that for other people’s sites.

http or https only. We fetch the live HTML; we do not log the URL.

What a link preview is

When someone pastes a URL into Facebook, LinkedIn, Slack, iMessage or WhatsApp, the app does not screenshot your page. It asks a crawler to download the HTML and look for a small set of tags: usually og:title,og:description andog:image. Those values become the card. If a tag is missing, the crawler guesses — a random image, a truncated title, or a blank box.

The card is not your homepage design. It is a separate object you control with meta tags in the first HTML response. Client-side frameworks that inject tags after load will look fine in a browser and empty to a bot. This checker fetches as a bot: one GET, no cookies, no login.

How platforms build the card

Facebook popularised Open Graph. LinkedIn and WhatsApp still read those tags. X adds Twitter Cards (twitter:card should besummary_large_image for a wide picture). The image is downloaded separately. If that second request fails — relative URL, blocked hotlink, 4 MB PNG — the card has text and no picture.

Each client then crops. A 1200×630 file is the usual landscape. WhatsApp shows it smaller. X may use a slightly taller large card. Pinterest is a different object entirely; do not treat a pin as og:image. For sizes, use thesize cheat sheetand theOG image size guide.

Why previews are cached

Crawlers do not re-download your page on every share. They store the tags and often the image bytes. Replacing og.png in place is the most common reason a “fixed” preview still shows last month’s artwork. Change the image path or add a query string, deploy, then force a scrape.

This checker caches a successful JSON result for five minutes so repeats are cheap. Use “Recheck (bypass cache)” after you deploy. That only bypasses our cache, not Facebook’s.

How to force a re-scrape

After the tags look right here, scrape the canonical https URL in the vendor tool:

WhatsApp has no public debugger. If Facebook’s scrape works and WhatsApp does not, wait, then paste the URL into a new chat. Old bubbles keep the empty card.

Common errors this tool will show

  • No og:image, or a relative path the crawler cannot resolve.
  • An image URL that is http, blocked, or missing a Content-Type the crawler accepts.
  • A title that only exists after JavaScript runs — we will not see it, and neither will they.
  • A file so large the HEAD probe reports hundreds of kilobytes or more.
  • Missing twitter:card on a page you care about on X.

If the image is missing or the ratio is wrong, generate a 1200×630 PNG in theOG Image Generator, host it, and check again. Guides for stubborn caches live underGuides.

We will not fetch localhost, private networks, or metadata addresses. That is not a preview problem — it is how the function stays safe. Read what the bot sends on theSocialImageKitBot page.

How to read the health report

Pass, warn and fail are publishing checks, not a vendor score. A missing og:image is a fail because most feeds will then guess. A relative image URL is a fail because crawlers resolve against the page URL poorly or not at all. A title over about 70 characters is a warn: the tag is present, but a mobile card will truncate it. twitter:card is a warn when absent because X often falls back to Open Graph, but summary_large_image is the clearer contract for a wide picture.

File size uses Content-Length from a HEAD request to the image URL, with the same SSRF rules as the HTML fetch. If the host omits Content-Length we warn instead of guessing bytes from a download. We do not run Facebook’s or LinkedIn’s own scrapers. After this page looks healthy, still hit their debugger on the live canonical URL.

This checker does not execute JavaScript, fill forms, or follow links on the page. It does not log in. It does not store the URL you typed. If your preview only appears after a client-side router paints the head, the function will report missing tags — that is the same view a crawler has. Render the meta tags in the first HTML response, then check again.

Frequently asked questions

Answers about this checker: cost, storage, blocked URLs and caches.

Is the Link Preview Checker free?

Yes. You can paste a public URL and see the tags we read from the HTML without creating an account. The check runs on a small server function so we can fetch the page the way a crawler would. There is a per-network rate limit so the function stays usable for everyone.

Do you store the URLs I check?

No. The function fetches the URL, parses the HTML in memory, and returns JSON to your browser. We do not write the URL or the result to a database. Short-lived cache and rate-limit counters may exist at the edge so repeats are cheap and abuse is limited. They are not a history of your checks.

Why does this look different from Facebook or WhatsApp?

The cards on this page are layout sketches using the title, description and image we found. Each app crops, recodes and caches on its own schedule. Use this tool to confirm the tags exist, then scrape the live URL in that platform’s debugger if the real feed still looks wrong.

Why did a check fail with “blocked”?

The function only fetches public http and https pages. Private, loopback, link-local and metadata addresses are rejected, as are unusual ports and URLs that include a username and password. That is to stop the server being used to scan your home network.

Can I check a staging site behind a login?

No. If the HTML is not returned to an anonymous GET, we cannot see the tags — and neither can Facebook or LinkedIn. Publish a public URL, or temporarily allow the crawler, then check again.

What User-Agent do you send?

Requests use SocialImageKitBot/1.0 and a link to the bot page on this site. If you block unknown bots, allow that user agent for the pages you want to test, or temporarily allow all crawlers while you debug a preview.