One snippet, pasted into Settings → Code injection → Site Header — because it has to load on every page before your clicks happen, and it renders nothing visible. Ghost powers tens of thousands of independent publications, and almost none of those sites want another integration just to render a small piece of live data. No integration to configure. Ghost renders raw HTML and script tags from Code injection and from an HTML card, so there is nothing to install and no third party in the loop.
Hotjar charges $99-$389/mo. Crazy Egg charges $99-$249/mo. The two FREE click heatmap tools that used to exist (Mouseflow Lite, Lucky Orange Free) both quietly killed their free tiers in 2023. We rebuilt the click heatmap in 2026 — free forever, no signup, no email, no recording quotas. Paste one HTML snippet, return to FeedPulse in 24 hours, see exactly where every visitor clicked on every page of your site. Blazing / hot / warm / smoky temperature bins, per-page breakdown, dead-zone detection — all the things you used to pay $99/mo for. Want to see exactly what you get? → Try the live demo on /sample-heatmap (real visualisation, sample data, zero install).
Ghost's whole appeal is speed. Putting a script in Site Header makes the browser deal with it before painting your post; Site Footer runs it after. Our snippet is async either way, so use the Footer box unless the widget must exist before first paint (the heatmap and the speed badge are the only two that benefit).
An HTML card displays the raw code while you're writing and only renders on the published page. That's by design, not a failed paste. Publish (or use the preview link) and check the live URL — and remember post-level code injection doesn't run in preview at all on some versions.
If you paste the snippet into a `.hbs` file, the next theme update or theme switch silently removes it. Code injection is stored in your Ghost settings, not in the theme, so it survives both. On Ghost(Pro) you can't edit theme files directly anyway — Code injection and HTML cards are the whole surface.
No integration to configure. Ghost renders raw HTML and script tags from Code injection and from an HTML card, so there is nothing to install and no third party in the loop. Installing an integration for this would mean an extra dependency, an update cycle and a security surface to render one snippet. Paste it into Settings → Code injection → Site Header and you're done.
Settings → Code injection → Site Header — because it has to load on every page before your clicks happen, and it renders nothing visible. In Ghost admin go to Settings, then scroll to Code injection (under Advanced on newer versions). Paste the snippet into the Site Header box — it is injected into the <head> of every page. Click Save. It is live immediately; Ghost has no build step and no cache to purge. For script tags, prefer the Site Footer box just below: same coverage, nothing blocking paint.
No. The script tag is async, so it never blocks your page from rendering, and the widget draws itself after your content is already on screen. Ghost is already the fastest mainstream publishing platform and the point is to keep it that way: the snippet is one async tag, so it never blocks your post from rendering. Site Footer is the right injection slot for script tags — Site Header is for things that must run before paint.
Ghost admin: Settings → Code injection → Site Footer. Ghost editor: insert an HTML card. Post settings: per-post Code injection fields. Self-hosted themes: edit default.hbs above {{ghost_head}}. Any builder with a raw-HTML or code block will render it, because there's nothing framework-specific in the snippet.