How link previews work
What this analyzer checks
Enter a public page and the analyzer downloads its HTML once, reads the metadata, and answers two questions: how will this page look when it is shared, and is anything wrong with its social metadata? It covers:
- Open Graph tags (including repeated og:image tags and duplicates) and Twitter/X Card tags, with the fallback each platform may use
- Social images: reachability, redirects, file type, dimensions, aspect ratio and size
- The title, meta description, language, viewport and charset, plus canonical and robots directives
- Redirects, the HTTP status, and signs that a login or bot protection is in the way
- Preview approximations in generic, Facebook-style, LinkedIn-style and X-style layouts, each showing which tag every value came from
A minimal set of tags
Most pages need only a handful of tags in the HTML <head>:
<title>Page title</title> <meta name="description" content="A short summary of the page."> <link rel="canonical" href="https://example.com/page"> <meta property="og:type" content="website"> <meta property="og:title" content="Page title"> <meta property="og:description" content="A short summary of the page."> <meta property="og:url" content="https://example.com/page"> <meta property="og:image" content="https://example.com/images/card.png"> <meta property="og:image:alt" content="Describe the image"> <meta name="twitter:card" content="summary_large_image">
See Open Graph meta tags explained for what each tag does, and Twitter/X Card tags explained for the X-specific ones.
Choosing a social image
A 1200 × 630 pixel PNG or JPEG (about 1.91:1), served over HTTPS without a login, suits most large-image cards. Platforms crop and resize differently and publish different limits, so the analyzer rates your image as recommended, acceptable or potentially problematic rather than passing or failing it. More in What size should an Open Graph image be? and How to fix an OG image not showing.
Why previews can look out of date
Social platforms and messaging apps cache link metadata and images. If you changed a tag recently, an older preview can keep appearing until the platform refreshes its copy, regardless of what the page says now. Each platform decides when and how it refreshes, so this analyzer shows what your server delivers today rather than what a platform has stored. If a preview looks stale, first confirm here that the tags are right, then use the platform's own debugging or re-scrape option where one exists. Why is my link preview not showing correctly? walks through it.
What the analyzer cannot see
The analyzer reads the HTML your server sends and does not run JavaScript. Tags that a script adds in the browser will not appear in the results, and most social crawlers do not run scripts either, so such tags usually do not produce previews. It also makes a single request with a neutral user agent, so it cannot tell whether a particular platform's crawler receives a different response, and it never tries to get past logins, CAPTCHAs or bot protection. Treat the previews as approximations and confirm important links in each platform's own tools.
Privacy and limits
Unlike most DevCraftKit tools, this one cannot run entirely in your browser, because browsers are not allowed to read other sites' pages. The URL is therefore sent to DevCraftKit's server, which fetches the public page and its social images and returns the analysis. Private, local and internal addresses are refused; redirects are re-checked at every step; the size and time of each request are limited; and the analyzer is rate limited. The URL is not stored, results are not saved, and analyzed addresses are not sent to analytics. The preview images are loaded by your own browser directly from their hosts.
Related tools
- Redirect Chain Analyzer for a closer look when a URL redirects before the page you meant to share
- HTTP Security Headers Analyzer for a full review of the security headers this tool only lists
- CSP Analyzer if a Content-Security-Policy is blocking images or scripts on your own site
- Canonical URL vs og:url for when the two should differ