ScreenshotNeo

BlogHow-to

Facebook Open Graph Debugger

Use Facebook’s Open Graph debugger to refresh stale link previews, verify metadata, and fix incorrect titles, descriptions, and images.

By the ScreenshotNeo team1 October 20267 min read

Facebook Open Graph Debugger

Short answer: submit the exact page URL to Facebook’s Sharing Debugger, compare the scraped values with your intended Open Graph tags, fix the page source, then submit the URL again and use Scrape Again if that control is available. The debugger can reveal stale or incorrect title, description, canonical URL, and image data, but it cannot repair your HTML for you.

Open Graph metadata belongs in the document <head>. The protocol defines four basic properties: og:title, og:type, og:image, and og:url. og:url is the canonical identifier for the object. og:description is optional but recommended, and an image should include og:image:alt. Read the Open Graph protocol reference.

What the Facebook Open Graph Debugger checks

The debugger fetches a URL as a crawler and reports the Open Graph values it can read, along with warnings described by current third-party guidance. Interface labels, login requirements, and availability can change, so verify the labels shown in the live tool before documenting them for an internal process.

The debugger fetches a URL and reports the Open Graph values present in the response.
The debugger fetches a URL and reports the Open Graph values present in the response.
Property Purpose Example
og:title Title shown in the share preview Product launch guide
og:type Object type, commonly website or article article
og:image Preview image URL https://example.com/share.jpg
og:url Canonical object URL https://example.com/guide
og:description Summary beneath the title Step-by-step implementation notes
og:image:alt Accessible description of the image Screenshot of the guide
og:image:width, og:image:height Optional image dimensions 1200, 630
og:image:type, og:image:secure_url Optional MIME type and HTTPS variant image/jpeg

How to use the debugger

  1. Publish the metadata changes on the page you want to share.
  2. Open Facebook’s current Sharing Debugger and enter the exact URL, including the protocol, path, query string, and trailing slash when those are meaningful.
  3. Review the scraped title, description, image, canonical URL, and warnings. Compare them with the source returned by your production server.
  4. Fix the template, CMS fields, redirect target, image URL, or crawler access problem identified by the comparison.
  5. Submit the same URL again. If the interface offers Scrape Again, use it to request a fresh fetch. A new scrape does not guarantee that every already-created post or preview changes immediately.

Correct Open Graph markup

Place one authoritative set of tags in the page head. This example includes the required properties plus commonly useful image metadata:

<!doctype html>
<html lang='en'>
<head>
  <meta property='og:title' content='Product launch guide'>
  <meta property='og:type' content='article'>
  <meta property='og:url' content='https://example.com/guide'>
  <meta property='og:image' content='https://example.com/images/guide-1200x630.jpg'>
  <meta property='og:image:secure_url' content='https://example.com/images/guide-1200x630.jpg'>
  <meta property='og:image:type' content='image/jpeg'>
  <meta property='og:image:width' content='1200'>
  <meta property='og:image:height' content='630'>
  <meta property='og:image:alt' content='Screenshot of the product launch guide'>
  <meta property='og:description' content='Step-by-step implementation notes for a reliable launch.'>
  <title>Product launch guide</title>
</head>
</html>

If a property appears more than once, the first value from top to bottom is preferred when values conflict. Remove duplicate tags instead of placing the desired value later in the document.

Inspect the production response yourself

Before blaming a cache, verify what an unauthenticated crawler can actually fetch. These commands retrieve the HTML and show response headers.

cURL

curl -L -I 'https://example.com/guide'
curl -L --compressed 'https://example.com/guide' | grep -iE 'og:title|og:type|og:url|og:image|og:description|og:image:alt'

Python

import requests
from bs4 import BeautifulSoup

url = 'https://example.com/guide'
r = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'}, timeout=30)
r.raise_for_status()
soup = BeautifulSoup(r.text, 'html.parser')
for tag in soup.select('meta[property^="og:"]'):
    print(tag.get('property'), '=>', tag.get('content'))

Node.js

const res = await fetch('https://example.com/guide', {
  redirect: 'follow',
  headers: { 'user-agent': 'Mozilla/5.0' }
});
if (!res.ok) throw new Error(`${res.status} ${res.statusText}`);
const html = await res.text();
for (const match of html.matchAll(/<meta\s+[^>]*property=["'](og:[^"']+)["'][^>]*content=["']([^"']*)["'][^>]*>/gi)) {
  console.log(match[1], '=>', match[2]);
}

For production diagnostics, also check the final URL after redirects, the response status, whether the tags are present in the initial HTML rather than injected only by JavaScript, and whether the image URL is publicly fetchable.

Why a preview is wrong or outdated

The debugger shows old metadata

Confirm that the fix is deployed at the exact URL submitted. Request another scrape when available, then compare the returned source with your deployment. Do not assume a new scrape rewrites every historical share.

Duplicate properties can produce surprising previews because the first value is preferred.
Duplicate properties can produce surprising previews because the first value is preferred.

The wrong image is selected

Look for multiple og:image tags. Because the first repeated property is preferred, an older tag above the intended one can win. Remove duplicates, use an absolute HTTPS URL, and verify that the image response is public, quick, and returns an image content type.

The title or description is missing

Check the raw server response, not only the browser’s rendered DOM. Server-side templates should emit the tags in <head> for unauthenticated requests. Check for malformed attributes, empty CMS fields, and a redirect that lands on a different page.

The canonical URL is unexpected

Make og:url match the URL you want represented as the object. Review trailing slashes, HTTP-to-HTTPS redirects, locale paths, and query parameters. Keep one canonical value across your SEO and social metadata.

The debugger reports a 403 or cannot fetch the page

Inspect firewall, WAF, bot-management, authentication, and geo restrictions. Test the final URL without a logged-in browser session. Allow the crawler to receive the page and its image assets, and make sure redirects do not lead to a protected host.

The page works in a browser but not in the debugger

Browser JavaScript, cookies, and client-side rendering can hide the difference. The crawler may see only the initial HTML. Render critical Open Graph tags on the server or at build time.

Reliability, performance, and cost checklist

  • Return the metadata in the first HTML response; avoid depending on JavaScript.
  • Use stable absolute HTTPS URLs for the page and image.
  • Keep the share image available without authentication, expiring signatures, or hotlink blocks.
  • Use one value for each primary property and remove plugin or theme duplicates.
  • Test redirects and the final canonical URL from outside your office network.
  • After deployment, inspect the source and then request a fresh debugger scrape.
  • The debugger is a web diagnostic tool; the Open Graph protocol does not define a paid quota or a guaranteed cache duration. Treat refresh timing as an operational variable and verify the result on the live page.

Or skip the browser setup

If your goal is a clean screenshot of the page rather than inspecting Facebook metadata, ScreenshotNeo provides a single-request website screenshot API. Its capture can accept the cookie or consent banner as a visitor and remove more than 60 known consent platforms, newsletter popups, and chat widgets before the shot. Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed, and response headers identify the page verdict and billing status.

See the ScreenshotNeo API documentation for all options. This cURL request saves a WebP screenshot:

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

Python

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

Node.js

const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);

ScreenshotNeo also includes an MCP server for AI agents, including Claude, Cursor, and other MCP clients. The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 screenshots. Create a free ScreenshotNeo account.

FAQ

Does changing the HTML update old Facebook posts?

A fresh scrape updates what the debugger retrieves. Existing posts and already-generated previews may not all change at the same time.

Is og:description required?

No. The protocol treats it as optional, but it is generally recommended for a useful preview.

Should I add several og:image tags?

You can provide multiple values, but conflicting duplicates make diagnosis harder because the first value is preferred. Use one deliberate primary image unless you have a clear reason to provide alternatives.

Why does the browser show one title while the debugger shows another?

The browser may show the HTML <title> or a client-rendered value, while the debugger reads Open Graph tags from the fetched response. Compare both sources and make them consistent where appropriate.