Short answer: Ghost has a code injection panel in its settings with a site header and a site footer field. Paste the chat widget script into the site footer, save, and it appears on every page of your Ghost site. There is also a per-post code injection panel if you only want it on one page.
Ghost makes this genuinely easy
Of all the platforms in this series, Ghost has the cleanest story. Code injection is a first-class feature rather than an afterthought bolted onto a page builder, and it lives in settings where you would expect it.
Open your Ghost admin, go to settings, and find the code injection area. You get two fields: one whose contents go into the site header, and one whose contents go before the closing body tag on every page.
Paste your script tag into the footer field. Save. That is the install.
Footer over header, for the usual reason: a chat widget is not part of your content and should never be in the critical path for rendering your article. Ghost sites are typically fast and readable, and the widget should not be the thing that changes that.
Per-post injection, and when to use it
Every individual post and page in Ghost also has its own code injection panel, tucked into the post settings. Code there applies to that post only, and stacks on top of whatever is in the site-wide fields.
This is useful in two situations. One is testing: put the widget on a single high-traffic post, see what people ask, then decide whether to roll it out. The other is a dedicated landing page where you want chat but do not want it across your whole publication.
If you use per-post injection while site-wide injection is also active, you will load the widget twice. Pick one.
The publication question
Ghost is used for two fairly different things, and which one you are doing changes whether a chat widget makes sense.
If Ghost is your business website, with services pages and a contact page, a chat widget is straightforwardly useful. Visitors ask about what you do and you capture the ones worth following up.
If Ghost is a newsletter or publication, think about intent. Your readers are not enquiring, they are reading. A widget can still earn its keep by answering questions about your archive, your membership tiers and your billing, which otherwise land in your inbox one at a time. But do not expect it to behave like a sales tool on a site where nobody is buying a service.
Either way, feed it your site by crawling it, so it can answer from your actual published content rather than guessing.
Members, paid content and the widget
Ghost's membership features mean parts of your site may be gated. A chat widget trained by crawling your public pages will only know your public content, which is correct behaviour. You do not want a widget cheerfully summarising paywalled posts to logged-out visitors.
If you want it to answer questions about member benefits, pricing tiers or how to update a card, put that information on a public page or into an uploaded knowledge file, and set the guardrails so anything account-specific hands off to a human rather than being invented. Account questions are exactly the category where a confident wrong answer costs you a subscriber.
Verifying the install
Open your live site in a private browser window. Check a post, the homepage and a static page, because Ghost renders these through different templates and it is worth confirming all three.
View the page source and search for the script tag. Ghost injects code injection content reliably, so if the tag is missing, you most likely saved it in a per-post panel rather than the site-wide settings, or you are looking at a different site than the one you edited. If the tag is present but nothing renders, open the browser console.
Common gotchas
AMP. Ghost has historically offered AMP versions of posts. AMP does not permit arbitrary JavaScript, so your widget will not appear on AMP pages, and no configuration fixes that. If AMP matters to you, accept the gap. If it does not, consider whether you still need AMP at all, since its original advantages have largely evaporated.
Caching and CDN. Ghost sites are commonly served through a CDN. Purge or wait, and always test in a private window.
Theme preview versus live. If you are previewing an unpublished theme, code injection may behave differently. Test the live site.
Custom themes that omit the footer helper. Ghost's code injection relies on the theme calling the standard footer helper. A well-built theme does. A hand-rolled theme missing it will silently drop your injected code. If the tag never appears in the source on any page, this is the likely cause.
Double loading. Site-wide plus per-post injection means two widgets. Remove one.
Frequently asked questions
Does this work on Ghost Pro and self-hosted Ghost?
Yes. Code injection is a core Ghost feature, not a hosting add-on.
Will it appear on every post automatically, including future ones?
With site-wide footer injection, yes, including posts you have not written yet.
Can I style it to match my publication?
Yes. Widget Studio gives you eight themes, light and dark, three shapes and a brand colour, so it can match a minimal publication rather than shouting over it.
Will it interfere with Ghost's Portal or subscribe popups?
The widget renders in its own isolated Shadow DOM. If both sit in the same corner you may want to reposition one for visual reasons, but they do not technically conflict.
Is a chat widget better than my contact form?
Usually, because it answers rather than only collecting. The full argument is in chatbot vs contact form, and if you are still weighing it up, do I need a chatbot for my business is the honest take.