Ghost Internal Linking: Building Topic Clusters with Casper
Ghost's default theme has minimal internal-linking helpers. Here's how to build a content-cluster structure that ranks.
Internal linking is the area where Ghost sites leave the most ranking power untapped. The default Casper theme shows three related posts at the bottom of every article — posts that share the same primary tag. That's not a content cluster strategy. It's a default behavior that happens to be better than nothing.
A real internal linking architecture signals topical authority, distributes PageRank through your content, and helps Google understand how your posts relate to each other. Here's how to build it on Ghost.
Why Casper's default related-post logic is insufficient
Casper selects "related posts" using this logic: show the most recent posts that share the primary tag with the current post. The number of posts shown is typically three.
The problems:
It's recency-based, not relevance-based. The three posts shown are the most recently published with that tag — not the most topically relevant, not the most linked-to, not the highest-performing. A related-posts section that shows three recent posts that happen to share a broad tag isn't reinforcing topic clusters.
It uses the primary tag only. Ghost's related-post logic only considers the first tag assigned to a post (the "primary tag"). Posts tagged with multiple related tags don't surface via their secondary tags.
It's at the bottom. Footer-of-article internal links carry less PageRank weight than contextual links within the post body. A related-posts section is a supplementary navigation element, not a substitute for in-content linking.
No link to the hub/pillar page. Casper doesn't automatically link to a cluster hub or parent topic page. Every post in a cluster needs a link back to the hub page — this is how you signal to Google that the hub is the authoritative page for the topic.
The topic-cluster model on Ghost
A content cluster has three components:
1. The pillar post (hub page) — a comprehensive, authoritative page on a broad topic. It links to all supporting posts. It earns the most external links. It's the page you want to rank for the head term.
2. Supporting posts — deeper dives on specific subtopics within the pillar's topic. Each one links back to the pillar. They may also link to each other when relevant.
3. The connecting tissue — internal links, both contextual (in-body) and navigational (related-posts section), that make the cluster structure visible to Google.
On Ghost, the tag system is the natural foundation for topic clusters. One tag per cluster. The pillar post and all supporting posts share that tag. The tag archive page can function as the hub, or you can designate one post as the hub and use the tag archive as a secondary resource.
Building contextual internal links
The most important internal links are the ones you write into the post body — not the automated related-posts section.
Every supporting post should have at least one contextual link back to the pillar page. The anchor text should be a descriptive keyword phrase that matches the pillar page's target keyword, not generic phrases like "this article" or "read more."
Weak: "For more information, see [this guide]." Better: "For the full breakdown of [keyword cluster topic], see the [Pillar Page Title]."
Every post in a cluster should also link to 2–4 sibling posts where the topics are genuinely related. Write these links naturally into the text where context warrants them — not as a "see also" list appended at the end.
When you're writing a new supporting post, before you publish, open your pillar page and add a contextual link from the pillar to the new post. This bidirectional linking is what makes the cluster structure legible to search engines.
Automating related posts with the {{get}} helper
Ghost's Handlebars templating language includes a {{get}} helper that queries your Ghost content API within a template. This lets you build dynamic, relevance-filtered related-post sections that are far more useful than Casper's default.
Here's the pattern: in your post template (post.hbs), replace the default related-posts section with a {{get}} query that pulls posts filtered by the current post's primary tag, excludes the current post, and limits to 6 results.
{{!-- Related posts via {{get}} helper --}}
{{#get "posts" filter="primary_tag:{{primary_tag.slug}}+id:-{{id}}" limit="6" as |related|}}
{{#if related}}
<section class="related-posts">
<h2>More on {{primary_tag.name}}</h2>
<div class="related-posts-grid">
{{#foreach related}}
<article>
<a href="{{url}}">
{{#if feature_image}}
<img src="{{feature_image}}" alt="{{title}}" />
{{/if}}
<h3>{{title}}</h3>
{{#if excerpt}}<p>{{excerpt}}</p>{{/if}}
</a>
</article>
{{/foreach}}
</div>
</section>
{{/if}}
{{/get}}
This is better than Casper's default because:
- It explicitly filters by
primary_tag(same cluster) - It excludes the current post (
id:-{{id}}) - You can control the limit (6 instead of 3)
- The section heading uses the actual tag name, which is a relevance signal
Adding a "back to hub" link
Every supporting post in a cluster needs a link back to the hub page. Don't rely on the reader to find it via navigation — put it in the post body or in a styled callout.
The simplest implementation is a Handlebars partial that checks whether the post has a specific tag and outputs a styled link if it does. Create a partial at partials/cluster-hub-link.hbs:
{{!-- partials/cluster-hub-link.hbs --}}
{{#has tag="seo-basics"}}
<div class="cluster-hub-link">
<p>This post is part of the <a href="/seo-basics/">SEO Basics guide</a>.
Start at the <a href="/seo-basics/">SEO Basics hub</a> for the full picture.</p>
</div>
{{/has}}
Include this partial in your post.hbs template above the post content:
{{> "cluster-hub-link"}}
For sites with multiple clusters, create one {{#has tag="..."}} block per cluster in the partial, or create individual partials per cluster and include the relevant one in each cluster's custom post template.
Custom post templates per cluster
Ghost supports custom post templates. If you create a file named post-{slug}.hbs in your theme, Ghost uses that template when rendering the post with that slug. More useful for clusters: if you name the template custom-cluster-post.hbs, you can assign it to multiple posts in the post settings sidebar under Template.
A custom cluster post template lets you:
- Add a cluster navigation sidebar or header
- Include a "Table of contents for this series" section
- Auto-render all posts in the cluster via
{{get}} - Add a prominent link back to the hub page
This is more work to set up, but for sites with 2+ well-developed topic clusters, the ranking impact is worth the template engineering time.
Topic cluster architecture with keyword research
Internal linking structure should follow keyword research. Before you build a cluster on Ghost, you need to understand:
- The hub keyword — the head term you want the pillar page to rank for
- The supporting keywords — specific queries within that topic that each supporting post targets
- The cluster boundary — what's in this cluster vs. a different cluster
If you haven't mapped keywords to pages yet, that's the prerequisite step. See how to map keywords to pages for the full workflow.
Once you have the keyword map, the Ghost implementation is straightforward: one tag per cluster, one post per target keyword, contextual links in both directions.
Auditing your existing Ghost site's link structure
If your Ghost site has been live for a year or more, your internal link structure almost certainly has gaps. Common issues:
- Orphaned posts — posts with no inbound internal links from other posts. These rely entirely on the sitemap and external links for discovery.
- Hub pages with no supporting posts linking back — the hub gets outbound links to supporting posts but doesn't receive links back.
- Broad anchor text — internal links using "this article," "here," or the post title rather than keyword-rich anchor text.
- No link from older high-traffic posts to newer related posts — older posts accumulate links over time; new posts in the same cluster need a link from those high-authority pages.
The Ghost SEO checklist includes internal linking as a per-post requirement. The Ghost SEO hub covers how internal linking fits into the broader Ghost SEO architecture.