Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

Set the thumbnail with Open Graph tags in your page’s HTML <head>. Use an absolute, public image URL in og:image, keep the markup in the first 300 KB of the response, and meet WhatsApp’s image limits: under 600 KB, at least 300 pixels wide, and no more than a 4:1 width-to-height ratio. Then paste the URL into a WhatsApp composer and wait up to 10 seconds for the preview.

The exact HTML to add

Place these four tags in the page head. Replace the example values with the page’s real title, a concise description, its canonical URL, and the image you want shown.

<head>
  <meta property="og:title" content="Page title" />
  <meta property="og:description" content="A short description of the page." />
  <meta property="og:url" content="https://example.com/page" />
  <meta property="og:image" content="https://example.com/images/share-image.jpg" />
</head>

Use https:// URLs that anyone can fetch without logging in. The URL in og:url should be the clean canonical address: omit session IDs, identifying parameters, counters and other tracking values. The image address must be absolute, not a relative path such as /images/share-image.jpg.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What each property controls

  • og:title: the headline in the card.
  • og:description: supporting text. WhatsApp says about 80 characters will suffice; the displayed text is generally one or two lines.
  • og:url: the page represented by the preview.
  • og:image: the thumbnail file WhatsApp should fetch.

The broader Open Graph protocol also defines og:type, image MIME type, dimensions, secure URL and alt text. They can be useful to other consumers, but the four properties above are the WhatsApp-specific minimum described in its developer documentation.

WhatsApp’s image and markup limits

These are implementation limits from the WhatsApp developer documentation (updated November 5, 2025), not performance guarantees:

Item Requirement Why it matters
Head location The head containing the tags must be within the first 300 KB of HTML A crawler may stop looking before it reaches late-generated markup
Title, description and URL All must be present inside the head and non-empty Missing core fields can prevent a normal card
Image file Under 600 KB Larger files may be reduced to a small preview or not used
Image width At least 300 pixels Narrow files do not meet the documented minimum
Aspect ratio Width-to-height ratio of 4:1 or less Extremely wide banners are outside the guidance
Description length About 80 characters is sufficient Keeps the card readable in one or two lines

Compress the image to stay below 600 KB without making text illegible. A roughly landscape image that is comfortably wider than 300 pixels, but not wider than four times its height, is a practical starting point. WhatsApp does not document a required file format in the cited guidance; serve a normal web image such as JPEG, PNG or WebP with the correct response type.

Adding the tags in common site setups

Direct HTML or a server-rendered app

  1. Open the template that renders the individual page’s <head>.
  2. Insert the four tags before the closing </head>.
  3. Make the values page-specific when each article or product needs a different card.
  4. Deploy, then inspect the server-returned HTML rather than only the post-rendered browser DOM.

CMS or site builder

Use its page-level social-sharing, Open Graph or SEO fields if available. Verify that the resulting tags are emitted in the initial HTML response and that you can set an absolute image URL. A visual editor can show a preview while still placing metadata too late for a crawler, so inspect the source returned over HTTP.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

JavaScript-rendered pages

Do not rely exclusively on client-side code that adds tags after load. WhatsApp’s crawler issues an HTTP GET request and looks for markup in the response. Prefer server-side rendering, static generation or edge middleware that writes the tags into the early head.

Test before sending a message

  1. Publish the page and confirm the URL works in an incognito browser window.
  2. Paste the URL into a WhatsApp message composer, but do not send it.
  3. Wait for the preview above the composer; the documented check allows up to 10 seconds.
  4. Confirm the title, description and intended image appear, then send a test message to yourself or a private chat.

WhatsApp’s crawler makes an HTTP GET request. A preview is best effort: the developer documentation says WhatsApp may relax requirements, look for other HTML markup or fall back to a small link preview, and that previews are not guaranteed to work or continue working.

An independent checker such as WhaTools’ WhatsApp link preview debugger can reveal missing or malformed Open Graph fields before you test in the app. It is not an official Meta tool and cannot guarantee that WhatsApp will display exactly the same card.

Troubleshooting a missing or stale thumbnail

No preview appears

  • Check the early response: fetch the URL and inspect the raw HTML. Ensure the tags are in <head> and within the first 300 KB, rather than injected only after JavaScript runs.
  • Check required values: title, description and canonical URL must be non-empty. Ensure og:image points to the intended absolute address.
  • Check public access: remove login requirements, IP restrictions and rules that block WhatsApp’s crawler from the page or image. Confirm the image returns successfully over HTTPS.
  • Check redirects and canonicalization: use the final, preferred page URL in og:url, not a tracking or session URL.

The wrong image appears

Look for duplicate og:image tags from a theme, plugin or layout. Remove conflicting values or place the intended one where your platform’s renderer will emit it. Verify that the image URL itself has not been replaced by a redirect or an access-controlled variant.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The image is tiny or cropped oddly

Measure the actual downloaded file, not the source design. Keep it under 600 KB, at least 300 pixels wide and within a 4:1 width-to-height ratio. Re-export a less extreme crop and compress it, then retest.

The old card keeps appearing

The consulted WhatsApp documentation does not state a cache duration or provide a cache-reset tool. Re-paste the unchanged URL after publishing and allow the crawler time to fetch it. A third-party workaround is to change the URL, for example by adding a query parameter, to prompt another fetch; this is not an official or guaranteed cache-clearing method and should not replace a clean canonical URL on the page.

Make previews reliable in production

  • Generate a distinct, stable image URL for each page and keep the file available for as long as links may circulate.
  • Keep the head small and place metadata near the beginning of the response.
  • Use concise titles and descriptions that still make sense when the message is forwarded without context.
  • Check every deploy that changes templates, routing, image storage or access-control headers.
  • Test representative pages (home, article, product and paginated pages), not just one URL.

There is no documented guarantee that every preview will be generated, so treat the card as an enhancement and ensure the plain URL remains understandable on its own.

Or skip the browser setup

ScreenshotNeo is a website screenshot API and MCP server. It can capture a rendered page after handling consent banners and removing more than 60 known consent platforms, newsletter popups and chat widgets; each step can be disabled. Only clean shots are billed: bot checks or CAPTCHAs, blank pages, timeouts, failed loads and cache hits cost nothing, and response headers identify the page verdict and billing status.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

For a direct image capture, use the API documented at https://screenshotneo.com/docs/:

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com/page -o shot.webp

Python:

import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://example.com/page"}, timeout=90)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)

Node.js:

const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://example.com/page' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = Buffer.from(await res.arrayBuffer());
require('fs').writeFileSync('shot.webp', data);

ScreenshotNeo also offers full-page and element captures, device presets, custom viewports and retina scale, dark mode, PDF output, custom CSS and JavaScript, selector waits or network-idle waits, request blocking, headers, cookies, user agents, authorization, timezone and geolocation, transparent backgrounds, resizing, configurable caching, signed links, asynchronous webhooks, bulk capture of up to 100 URLs per call, a usage API and an OpenAPI specification. Its parameter names are compatible with those used by other screenshot APIs, which can simplify migration. An MCP server provides take_screenshot, get_page_info and capture_pdf tools for Claude, Cursor and other MCP clients.

The Free plan includes 1,000 shots per month with no card. Paid plans start at $5 for 3,000 shots; Growth is $15 for 15,000, Pro $39 for 60,000, Scale $99 for 250,000 and Business $249 for 1,000,000. Yearly billing gives two months free, and every feature is available on every plan. Create a free ScreenshotNeo account to try it with 1,000 shots a month and no card.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

FAQ

Does WhatsApp require og:type?

The WhatsApp-specific pattern documents the title, description, URL and image tags. The Open Graph protocol defines og:type, but it is not listed as required in that WhatsApp setup.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Can I use a relative image path?

Use an absolute URL. A relative path does not tell an external crawler the complete address of the file.

Will changing the image filename immediately refresh WhatsApp?

It may cause a new fetch, but WhatsApp documents neither a cache duration nor a guaranteed reset mechanism. Test the resulting URL in the composer rather than assuming an update.

Frequently Asked Questions

Does WhatsApp require og:type?

The WhatsApp-specific pattern documents title, description, URL and image. og:type is part of Open Graph but is not listed as required there.

Can I use a relative image path?

No. Set og:image to an absolute, publicly reachable URL.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Will changing the image filename immediately refresh WhatsApp?

It can prompt another fetch, but WhatsApp documents no guaranteed cache reset or refresh time.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.