Ghost is one of the most beloved publishing platforms for independent writers, newsletter operators, and small media teams. Its native members and newsletter product is a big part of the pitch: you can go from a fresh install to a subscriber-funded publication in an afternoon. What Ghost doesn't advertise on the landing page is that when you press "Send," your issue is handed off to Mailgun under the hood, and from that point on, deliverability follows the same rules as any other bulk sender — rules that are not kind to image-heavy, link-heavy newsletters with weak DNS configuration.
In this article we walk through the Ghost sending pipeline, the DNS setup that separates publications hitting 95% inbox from those stuck in Promotions or worse, and a simple seed-test workflow you can run before hitting "Publish" on each new issue.
How Ghost actually sends your newsletter
When a Ghost site publishes a post marked as an email-to-members issue, the platform queues a job that renders the HTML per recipient (for personalisation and unsubscribe links), then submits the batch to Mailgun via API. Ghost(Pro) hosts this integration transparently; self-hosted Ghost requires you to bring your own Mailgun account and paste the API key into config.production.json.
This means two things. First, Mailgun's reputation at the IP and shared-pool level is part of your deliverability equation whether you like it or not. Second, your domain still needs to authenticate correctly — SPF including Mailgun's servers, DKIM signing on your sending subdomain, and a DMARC policy that won't block legitimate mail but also tells mailbox providers you care.
The DNS setup that actually works for Ghost
Most placement problems for Ghost publishers come down to one of three DNS mistakes. Let's walk through the correct setup for a site sending from newsletter.example.com.
1. Use a dedicated sending subdomain
Do not send newsletters from your root domain. Createnewsletter.example.com or mail.example.com and point Mailgun's DNS records there. This isolates the reputation of your bulk mail from your transactional and human mail, and lets you apply stricter DMARC on the parent without breaking newsletters.
2. SPF, DKIM, and DMARC — all three
newsletter.example.com. TXT "v=spf1 include:mailgun.org ~all"
k1._domainkey.newsletter.example.com. TXT "k=rsa; p=MIGfMA0..."
_dmarc.example.com. TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com; pct=100; adkim=r; aspf=r"Note the relaxed alignment (adkim=r, aspf=r) on DMARC. Ghost's From header uses your root domain while the envelope sender uses the Mailgun subdomain, so strict alignment will fail and your DMARC pass rate will look terrible in reports.
3. Add a BIMI record once you are warmed up
BIMI is not a ranking factor by itself, but for publisher brands it has two real benefits: your logo appears next to the From line in Gmail and Yahoo, and the VMC vetting process pushes you to clean up your entire authentication stack along the way.
Why image-heavy issues still land in Promotions
Even with flawless DNS, many Ghost publishers find their newsletters consistently routed to Gmail's Promotions tab. This is not spam — Promotions is a legitimate Gmail category — but it materially hurts open rates. The usual culprits:
- Image-to-text ratio above 60%. Ghost's default "hero image plus caption plus bullets" layout is gorgeous, but spam classifiers weight heavy imagery as promotional.
- Multiple calls-to-action. Two buttons in the same issue, especially with words like "Shop," "Subscribe," or "Upgrade," push you firmly into Promotions.
- List hygiene on auto-pilot. Ghost does not prune unengaged subscribers. After 12–18 months you may have 30% of your list as inactive Gmail addresses dragging down engagement signals.
- Send cadence drift. If you usually send weekly, then miss two months, then resume with a "Big update!" subject line, Gmail treats the resumption as a reactivation campaign and routes accordingly.
A seed-test workflow for every issue
The single most valuable habit for a Ghost publisher is running a seed test on every issue before it goes out. This takes two minutes and catches problems before 20,000 subscribers do.
- Create a members list of 10–20 seed addresses: personal Gmail, work Outlook/Microsoft 365, Yahoo, ProtonMail, Fastmail, and a couple of regional mailboxes if your audience is international.
- Use Ghost's "Send preview email" feature (under the publish menu) or create a hidden members-only tag that only your seed addresses belong to.
- After sending, check each seed: did it land in Inbox, Promotions, Spam, or Quarantine? Take screenshots.
- If more than one provider routes you away from the inbox, delay the real send, iterate on subject line and image ratio, and retest.
This is the exact workflow the inbox-check.online free test automates — you paste a test address from our pool, send to it, and get placement results across 20+ providers in under a minute, without having to maintain your own seed list.
A native Ghost integration is in private beta — run placement tests in-platform and get alerts on drops.
When to leave Ghost's native email behind
For 90% of Ghost publishers, the built-in Mailgun pipeline is fine once DNS is correct. But there are two scenarios where migrating to a dedicated ESP pays off:
- List size above 50,000. At that scale, the economics of a dedicated IP and granular segmentation tools (Buttondown, ConvertKit, Substack-as-CDN) start to beat Ghost's native product.
- Deliverability-sensitive content. Finance, crypto, and adult-adjacent publishers run into shared-pool issues and benefit from an ESP with stricter content policing and warm, isolated IP pools.
For everyone else — the indie tech writer, the food newsletter, the local journalism project — the fix is not to switch tools. It is to get DNS right, send a seed test before each issue, and prune unengaged subscribers once a quarter.