---
title: "No Open Graph image anywhere (lint/missing-og-image)"
description: "lint/missing-og-image: Links shared in Slack, X, LinkedIn and iMessage render as a bare URL without an image, which sharply lowers click-through."
canonical: https://void-design.vercel.app/rules/lint/missing-og-image
lastModified: 2026-09-16
---

# No Open Graph image anywhere

`lint/missing-og-image` · severity **warn** · category Lint · detected by `void lint` and `void audit`

## Why it matters

Links shared in Slack, X, LinkedIn and iMessage render as a bare URL without an image, which sharply lowers click-through.

## How to fix it

Add `app/opengraph-image.tsx` (generated 1200×630 with `ImageResponse`) or a static `opengraph-image.png`, and per-section images for key routes.

## Example

```tsx
import { ImageResponse } from 'next/og'
export const size = { width: 1200, height: 630 }
export default function OG() { return new ImageResponse(<div style={{ fontSize: 72 }}>Acme</div>, size) }
```

## References

- https://nextjs.org/docs/app/api-reference/file-conventions/metadata/opengraph-image

## More lint rules

`void lint` reports 67 rules in this category. Static source checks with no browser: Tailwind v4 silent failures, Next.js 16 API traps, React render-body bugs, accessibility markup, SEO files and motion hygiene.

- `og-merge-drops-parent` Page `openGraph` replaces the layout's (shallow merge drops images/siteName) — [lint/og-merge-drops-parent](https://void-design.vercel.app/rules/lint/og-merge-drops-parent)
- `not-found-in-suspense` `notFound()`/`redirect()` inside a component rendered under `<Suspense>` — [lint/not-found-in-suspense](https://void-design.vercel.app/rules/lint/not-found-in-suspense)
- `missing-sitemap` No sitemap — [lint/missing-sitemap](https://void-design.vercel.app/rules/lint/missing-sitemap)
- `missing-robots` No robots.txt — [lint/missing-robots](https://void-design.vercel.app/rules/lint/missing-robots)
- `missing-icon` No favicon / app icon — [lint/missing-icon](https://void-design.vercel.app/rules/lint/missing-icon)
- `missing-llms-txt` No `/llms.txt` — [lint/missing-llms-txt](https://void-design.vercel.app/rules/lint/missing-llms-txt)
- `dynamic-metadata-streaming` Request-time `generateMetadata` without `htmlLimitedBots` — [lint/dynamic-metadata-streaming](https://void-design.vercel.app/rules/lint/dynamic-metadata-streaming)
- `missing-lang` Root `<html>` without `lang` — [lint/missing-lang](https://void-design.vercel.app/rules/lint/missing-lang)

Detected by `void lint` and `void audit`. Explain it in a terminal: `void rules lint/missing-og-image`
