# Open Graph image meets minimum size requirements

- **Pattern:** `ab-002519` (`seo-fundamentals.social-sharing.og-image-size`)
- **Severity:** medium
- **Lifecycle:** active
- **Last modified:** 2026-04-18
- **Canonical URL:** https://auditbuffet.com/patterns/ab-002519
- **License:** CC-BY-4.0 — attribute to AuditBuffet Pattern Catalog (https://auditbuffet.com/patterns/ab-002519)

## Why it matters

Facebook, LinkedIn, and iMessage upscale OG images below 1200x630 to fit their card templates, which produces blurry thumbnails on retina displays — exactly the screens the most active social users are reading on. Images under 600x315 are rejected entirely on some platforms and fall back to no-image cards. Specifying `width` and `height` in metadata also lets scrapers render the correct aspect ratio without fetching the image first, which matters for chat platforms that render previews synchronously.

## Severity rationale

Medium because shares still unfurl with smaller images, but the preview quality is degraded on every retina device.

## Remediation

Export OG images at exactly 1200x630 pixels (1.91:1 aspect ratio). Use PNG for images with text, JPEG for photographic content. Declare dimensions in metadata so scrapers do not need to fetch the file to compute aspect.

```ts
// app/layout.tsx
openGraph: {
  images: [{ url: '/og-image.png', width: 1200, height: 630 }],
}
```

For dynamic generation, use the `size` export in `app/opengraph-image.tsx`: `export const size = { width: 1200, height: 630 }` — Next.js uses this to set the correct metadata automatically.

## Detection

- **ID:** `og-image-size`
- **Severity:** `medium`
- **What to look for:** If an `og:image` tag is present, check whether the referenced image meets the recommended minimum size of 1200x630 pixels. If the image is a local file in `public/`, check its dimensions. If it's a URL or dynamically generated, check for explicit width/height in the metadata.
- **Pass criteria:** Count all OG image declarations. The OG image must be at least 1200 pixels wide and at least 630 pixels tall (as specified in metadata width/height properties, or determinable from the actual image file). Enumerate each OG image found with its dimensions.
- **Fail criteria:** The OG image exists but is smaller than 1200x630, or dimensions cannot be determined and no explicit width/height is specified in the metadata. Do NOT pass when width is under 1200 or height is under 630.
- **Skip (N/A) when:** No `og:image` tag exists (this is caught by the `og-tags` check). Also skip when the OG image URL points to a dynamic route (e.g., `/api/og`, `/opengraph-image`, a Next.js OG Image API route, or any route ending in `/og` or containing `/opengraph`). Dynamic OG images cannot have their dimensions statically verified. Detail on skip: `"OG image is dynamically generated — dimensions should be validated manually or via the route's size export."` Do NOT fail dynamic OG images for unresolvable dimensions.
- **Detail on fail:** `"OG image dimensions are 600x315 — below the recommended 1200x630 minimum"` or `"OG image specified but no width/height in metadata and image file dimensions not determinable"`
- **Remediation:** Social platforms display OG images at various sizes. The recommended minimum is 1200x630 pixels to ensure sharp display on high-DPI screens. Resize your OG image to at least 1200x630 and specify dimensions in your metadata:

  ```ts
  openGraph: {
    images: [{ url: '/og-image.png', width: 1200, height: 630 }],
  }
  ```

Taxons: findability

HTML version: https://auditbuffet.com/patterns/ab-002519
