# Missing Twitter/X card

> Without twitter:card, links on X show a plain URL instead of a rich preview. Add summary_large_image for a full-width card.

_Category: Search visibility · Detector `seo` · Check `twitter-card-missing` · Severity: info_

X (Twitter) reads `twitter:card` to decide how to render a shared link. Without it, your link may appear as bare text instead of a rich card with image and headline. While X often falls back to Open Graph tags, declaring the card type explicitly guarantees the large-image layout.

## Symptoms

- Links on X render as plain text, no image
- The card uses a small thumbnail instead of the large image layout
- Preview differs from other platforms that read `og:*`

## How VibeCheck detects it

The `seo` detector flags this live in the browser and reports it to the widget's Problems list — and to your coding agent over MCP.

- **Issue string:** `Missing Twitter/X card`
- **Threshold:** no <meta name="twitter:card">

## Root causes

- Only `og:*` tags were added; `twitter:*` was skipped
- No explicit card type declared, so the large-image layout is not guaranteed
- The head is unmanaged

## The fix

Add `twitter:card` set to `summary_large_image` for a full-width preview. X reuses `og:title`, `og:description`, and `og:image`, so you usually only need the card type (plus optional `twitter:site/creator` handles).

### Steps

1. Add `<meta name="twitter:card" content="summary_large_image">`
2. Ensure `og:image/title/description` are present (X reuses them)
3. Validate the card in X’s card preview tooling

```html
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@acme" />
```

## Framework-specific fixes

### React

Render the `twitter:card` meta tag (React 19).

```tsx
<meta name="twitter:card" content="summary_large_image" />
```

### Next.js

Set the `twitter` object in metadata. Next reuses your OpenGraph image/title/description automatically.

```tsx
export const metadata: Metadata = {
  twitter: { card: 'summary_large_image', site: '@acme' },
}
```

[Next.js docs](https://nextjs.org/docs/app/api-reference/functions/generate-metadata#twitter)

### Vue

Add it to `useHead` with a `name` key.

```ts
useHead({ meta: [{ name: 'twitter:card', content: 'summary_large_image' }] })
```

### Svelte

Emit it inside `<svelte:head>`.

```svelte
<svelte:head>
  <meta name="twitter:card" content="summary_large_image" />
</svelte:head>
```

### Vanilla JS

Add the `twitter:card` tag to each page’s `<head>`. X reuses your `og:image/title/description`, so the card type is usually all you need.

```html
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@acme" />
```

## FAQ

### Do I need `twitter:*` tags if I already have `og:*` tags?

X falls back to `og:*` for image, title, and description, but you should still set `twitter:card` to guarantee the `summary_large_image` layout.

### What card types exist?

The common ones are “`summary`” (small square thumbnail) and “`summary_large_image`” (full-width image). Use the latter for most content pages.

### What are `twitter:site` and `twitter:creator` for?

They attribute the card to X handles — `twitter:site` to the publishing account, `twitter:creator` to the author. They are optional and don’t change the layout, but they add the “@handle” byline on the card.

### My `og:image` is 1200×630 — does it work as a Twitter card?

Yes. `summary_large_image` uses the same 1200×630 (1.91:1) image as Open Graph, so one image covers both. X reads `og:image` when no separate `twitter:image` is set.

## Related problems

- [Missing social preview image (og:image)](https://vibecheck.wcgw.fun/fix/missing-og-image.md) — Search visibility
- [Missing og:title](https://vibecheck.wcgw.fun/fix/missing-og-title.md) — Search visibility
- [Missing og:description](https://vibecheck.wcgw.fun/fix/missing-og-description.md) — Search visibility
- [Missing meta description](https://vibecheck.wcgw.fun/fix/missing-meta-description.md) — Search visibility

---

Fix guide from VibeCheck — https://vibecheck.wcgw.fun/fix/missing-twitter-card. Full site index for LLMs: https://vibecheck.wcgw.fun/llms.txt
