Integrations ★ Ghost
Testimonials on Ghost, in one HTML card
Ghost takes the tag in an HTML card, and it is the rare platform with no gate to check first — no documented plan requirement on Ghost(Pro), none self-hosted. The thing to know instead is about email: the same post can go out as a newsletter, and no script runs in an inbox.
- Where the tag goes
- An HTML card in the post or page editor — click + on a new line, or type /html. Site-wide code lives in Settings → Code injection, but a visible widget belongs in the card.
- Plan needed
- None documented. Ghost(Pro)'s help pages put no plan requirement on the HTML card or code injection, and self-hosted Ghost has no gate at all.
01 Where the tag goes in the Ghost editor
Ghost calls it the HTML card, and its own description is the whole job: “All you need to do is add a HTML card and paste or write your code.”
- Open the post or page in the editor, on a new line.
-
Insert the card — in Ghost’s words, “either by clicking the
+ button, or typing
/on a new line to search for a particular card”. Typing/htmlgets you there fastest. - Paste the script tag into the card’s code field.
- Click outside the card, then publish or update the post.
The card’s toolbar has an eye icon that sets visibility — public visitors, free members, or paid members. Leave it on public: a testimonial wall gated to members is invisible to the people it exists to convince.
Ghost’s other route, Settings → Code injection, is the wrong tool here: it puts code in the site’s head or footer, and a widget renders exactly where its tag sits — in the head that is nowhere visible, in the footer it is the bottom of every page. Use the card, placed where the testimonials belong.
02 The gate that isn't there
No documented gate, on either kind of Ghost. The help pages for the HTML card and code injection carry no plan restriction, and the Ghost(Pro) pricing comparison lists neither feature as limited on any tier. Self-hosted Ghost treats both as core template behavior.
That silence means something on this platform, because Ghost’s docs gate loudly where gates exist: the Starter plan is restricted to official themes — “On Ghost(Pro), only official themes can be used with the Starter plan” — and its pricing table marks custom integrations and ad networks as unavailable there. The HTML card appears in none of those restrictions.
Sources
- Ghost — Using the editor
- Ghost — Editor cards (HTML card)
- Ghost — Code injection
- Ghost — Can I use embeds in email newsletters?
Plan names and menu labels are the platform’s to change. If what you see differs from what is written here, the linked page is the authority — and tell us so this page gets fixed.
03 When the widget doesn’t show up
- The widget is missing from the email newsletter.
- Expected, and Ghost documents it head-on: “modern email clients automatically disable embeds for security, including iFrames and any type of embed that uses JavaScript”, and “there is no way to make a dynamic embed work in an email.” The web version of the post shows the widget; the email cannot. Ghost’s suggested fallback is a screenshot linked to the post, which works fine for testimonials.
- The editor shows raw code where the widget should be.
- The card shows its code while selected and only renders plain markup in the canvas — scripts run on the site, not in the editor. Judge from the post preview or the published page, not the canvas.
- Logged-out visitors don’t see the section at all.
- Check the card’s eye icon: its visibility was set to free or paid members, which hides the card from the public. Set it back to public visitors.
- You used code injection and nothing appears anywhere.
-
Header injection lands inside
<head>, where nothing visible can render — and footer injection paints at the page bottom. Move the tag into an HTML card at the spot it should render. On a custom self-hosted theme, also confirm the theme includes the{{ghost_head}}and{{ghost_foot}}helpers.
04 What the one tag actually does
The line you paste is a plain external script. There is no plugin, no app to install, no account to connect on the Ghost side, and nothing to configure in the editor afterwards. Testymo generates the tag when you create a widget; the address in it is your widget’s own, and this is the live demo one:
<script src="https://testymo.com/w/demo.js" async></script> The server builds that script per request: the rendering code and your approved testimonials arrive together in one response, so the page makes one request and no follow-up fetches. The demo tag printed above weighs 16.7 KB of JavaScript, about 6 KB over the wire. That figure covers the demo widget's eight quotes. The testimonials ride inside the script rather than arriving in a second request, so a wall carrying thirty of them weighs thirty quotes' worth of text — measure the embed you paste in, not this one. The page-speed guide has the method behind that number, and the case for measuring whatever you embed rather than trusting the category.
It renders into an open shadow root at the exact spot the tag sits, which makes the styling isolation work in both directions: your Ghost theme cannot restyle the widget by accident, and the widget’s CSS cannot leak into your page. It sets no cookies, calls no third party, and reads nothing about your visitors. When you approve a new testimonial, it appears on the next page load — you never touch the site again.
05 The widget, running on this page
Everything below this line was drawn by that one script tag — the same file, on the same terms, that you would paste into Ghost. Eight approved testimonials in the wall design, rendered as a free plan renders them, footer link and all.
06 Where to go next
An embed script is one of three ways to put testimonials on a site, and it is not always the right one — a handful of quotes that will not change for a year are better hand-coded. The full guide to adding testimonials to a website prices all three routes: setup, upkeep, and page weight. Once you know the quotes are arriving, the layout patterns guide covers which shape to show them in, and getting permission first covers the part most sites skip.
The same tag, in another editor
- WordPress Custom HTML block
- Webflow Code Embed element
- Wix Embed HTML element
- Squarespace Code block
- Shopify Custom Liquid section
- Framer Embed component
- Carrd Embed element
- Notion Via Super, or an embed block
- Bubble HTML element
- Kajabi Custom Code block
- Teachable Custom HTML block
- Podia Site-wide code field, or its native section
- Skool None — images and links only