Ghost Open Graph: Auto-Generate Social Cards from Metadata
Ghost generates Open Graph and Twitter card tags automatically — og:title, og:description, og:image, og:url, and the matching twitter: tags ship on every post out of the box. The catch is the image: Ghost only emits og:image when the post has a feature image, so a post published without one shares as a blank, text-only preview. Set a 1200×630 feature image (or a per-post override) and Ghost handles the rest.
Does Ghost generate Open Graph tags automatically?
Yes. Ghost's default theme layer outputs a full set of social meta tags from each post's metadata — no plugin, no manual <meta> editing. Open the source of any published Ghost post and you'll find:
<meta property="og:title" content="Your Post Title" />
<meta property="og:description" content="The post excerpt." />
<meta property="og:image" content="https://yoursite.com/content/images/card.jpg" />
<meta property="og:url" content="https://yoursite.com/post-slug/" />
<meta name="twitter:card" content="summary_large_image" />
The values map cleanly: og:title from the post title, og:description from the excerpt (or meta description, if set), og:image from the feature image, and og:url from the canonical URL. Ghost also emits structured data, so the same metadata feeds your link previews and your SEO markup. For the field-by-field tag reference, see What Is Open Graph?.
Where Ghost's defaults map to each platform
Ghost emits one image and lets every platform read it. Because the major networks all accept a 1.91:1 card, a single correctly-sized feature image covers nearly all of them:
| Platform | Reads | Recommended size | Aspect ratio |
|---|---|---|---|
og:image | 1200×630 | 1.91:1 | |
| X / Twitter | twitter:image → falls back to og:image | 1200×628 | 1.91:1 |
og:image | 1200×627 | 1.91:1 | |
| Discord | og:image | 1200×630 | 1.91:1 |
| Slack (expanded) | og:image | 1200×600 | 2:1 |
A single 1200×630 feature image satisfies the first four rows directly. For the complete per-platform breakdown including iMessage and WhatsApp, see the social media image size cheat sheet. Ghost defaults the Twitter card to summary_large_image, the big banner format — the Twitter/X card meta tags guide covers when to override it.
Why image cards matter for a Ghost blog
A correct social card isn't cosmetic — it's the difference between a link people click and a link they scroll past.
That last number is the gap in Ghost's defaults. The tags are correct, but the image is only as good as whatever you remembered to upload — and the day you forget, the post ships blank.
How to ship a branded card for every Ghost post
The manual flow is reliable but easy to skip. Here's the path that produces a correct card every time:
- Set a feature image. In the Ghost editor, open post settings and upload a 1200×630 image. Ghost wires it to
og:imageautomatically — no template editing. - Add per-post social overrides. Expand the Facebook and X sections in post settings to set a social-specific title, description, and card image independent of the on-page title. Use this when the headline that works on the page is too long for a card.
- Verify the rendered tags. View source on the live URL and confirm
og:imageis an absolute HTTPS URL. A relative path is the most common cause of a blank preview. - Re-scrape the cached preview. Paste the URL into the Facebook Sharing Debugger or the X Card Validator and force a re-fetch. Platforms cache previews aggressively; a fix won't show until you clear the old one. When a card still won't appear, work through why your link preview is broken.
The weakness here is human: the card is only consistent if you do steps 1–2 perfectly on every post, forever. That's exactly what an automated generator removes — Social Card Studio (see the Ghost setup docs) hooks into your post metadata and renders a branded, correctly-sized 1200×630 card for every post automatically, so og:image is never blank and never off-brand, even on the post you publish in a hurry.
The one-line takeaway
Ghost already emits the Open Graph tags — your job is the image. Set a 1200×630 feature image (or automate it), keep the file under ~200 KB, confirm og:image is an absolute HTTPS URL, and re-scrape after changes. Do that and every Ghost link shares as a card that earns the click.
Frequently asked questions
Does Ghost generate Open Graph tags automatically?
Yes. Ghost outputs og:title, og:description, og:image, og:url, and the matching twitter:card tags on every post and page, pulling from the post's title, excerpt, and feature image. You don't write the tags by hand — but you do have to set a feature image, because Ghost won't invent one.
What size should a Ghost feature image be for social cards?
Use 1200×630 pixels (a 1.91:1 ratio). Ghost passes the feature image straight through to og:image, so a 1200×630 image renders correctly on Facebook, LinkedIn, Discord, and as an X summary_large_image card. Keep the file under ~200 KB so scrapers don't time out.
Why is my Ghost post showing no image when shared?
Almost always a missing feature image. Ghost only emits og:image when the post has a feature image (or a Facebook/Twitter card override in post settings). Add one, then re-scrape the URL in the platform's debugger to clear the cached blank preview.