---
title: "WhatsApp & Multiple Images"
description: "Generate multiple OG images per page for different platforms like WhatsApp."
canonical_url: "https://nuxtseo.com/docs/og-image/guides/whatsapp"
last_updated: "2026-09-04T17:46:37.880Z"
---

Different social platforms have different requirements for OG images:

| Platform  | Recommended Size | Aspect Ratio |
| --------- | ---------------- | ------------ |
| Twitter/X | 1200x600         | 2:1          |
| Facebook  | 1200x630         | 1.91:1       |
| LinkedIn  | 1200x627         | 1.91:1       |
| WhatsApp  | 800x800          | 1:1 (square) |

WhatsApp displays OG images as square thumbnails, so the default landscape image gets cropped. To avoid this, you can generate multiple images with different dimensions.

## Basic Usage

Pass shared props and an array of size variants to `defineOgImage`. The module shares props across all variants - no need to repeat them:

```vue
<script lang="ts" setup>
defineOgImage('NuxtSeo', { title: 'My Page' }, [
  // Default landscape for Twitter/Facebook
  { key: 'og' },
  // Square for WhatsApp
  { key: 'whatsapp', width: 800, height: 800 },
])
</script>
```

Each image gets a unique URL based on its options:

- `/_og/s/title_My+Page,p_...` (default)
- `/_og/s/k_whatsapp,w_800,h_800,title_My+Page,p_...`

## How Keys Work

The `key` option determines which meta tags the module generates:

| Key Value        | Meta Tags Generated                 |
| ---------------- | ----------------------------------- |
| `'og'` (default) | Both `og:image` and `twitter:image` |
| `'twitter'`      | Only `twitter:image`                |
| Any other string | Only `og:image` (additional images) |

Since WhatsApp uses `og:image` meta tags, multiple OG images with different keys will all be available for WhatsApp to choose from. WhatsApp typically picks the first image that meets its size requirements.

## Recommended Setup

For optimal display across all platforms:

```vue
<script lang="ts" setup>
defineOgImage('NuxtSeo', { title: 'My Page' }, [
  // Primary image for og:image and twitter:image (1200x600)
  { key: 'og' },
  // Additional square image for WhatsApp (800x800)
  { key: 'whatsapp', width: 800, height: 800 },
])
</script>
```

## Twitter-Only Images

Use `key: 'twitter'` to generate an image that only appears in Twitter meta tags:

```vue
<script lang="ts" setup>
defineOgImage('NuxtSeo', { title: 'My Page' }, [
  // og:image only (no twitter:image)
  { key: 'og-only' },
  // twitter:image only
  { key: 'twitter' },
])
</script>
```

## Per-Variant Prop Overrides

Shared props can be overridden per variant using the `props` field:

```vue
<script lang="ts" setup>
defineOgImage('NuxtSeo', { title: 'My Page', description: 'Full description here' }, [
  { key: 'og' },
  { key: 'whatsapp', width: 800, height: 800, props: { description: 'Short' } },
])
</script>
```

## Accessing Image URLs

`defineOgImage` returns an array of generated URLs:

```vue
<script lang="ts" setup>
const urls = defineOgImage('NuxtSeo', { title: 'Default' }, [
  { key: 'og' },
  { key: 'square', width: 450, height: 450 },
])

// urls = [
//   '/_og/s/title_Default,p_...',
//   '/_og/s/k_square,w_450,h_450,title_Default,p_...'
// ]
</script>
```

## Component Variants

You can use different components for different platforms using the array-only syntax:

```vue
<script lang="ts" setup>
defineOgImage('OgImageLandscape', [
  { props: { title: 'My Page' } },
  {
    component: 'OgImageSquare',
    props: { title: 'My Page' },
    key: 'whatsapp',
    width: 800,
    height: 800,
  },
])
</script>
```