SEO for Ghost

Ghost Tag Pages SEO: Index Them, Block Them, or Make Them Rank

Ghost generates a tag page for every tag. Most should be noindexed; some should be your best ranking pages. Here's the decision matrix.

Published May 24, 20267 min readBy RankCrab Team

Every tag you create in Ghost generates a public archive page at /tag/your-tag-name/. That page is indexed by default. For most Ghost sites, this creates one of two problems: either you have a pile of thin tag archive pages getting indexed and diluting your crawl budget, or you have high-value topic pages sitting at /tag/seo-tips/ with none of the content they need to rank.

The fix is different in each case. Here's how to decide which situation you're in and what to do about it.

How Ghost generates tag pages

When you assign a tag to a post, Ghost automatically creates (or updates) a tag archive at /tag/{tag-slug}/. The page lists all posts with that tag, shows the tag name as the page title, and uses the tag description field as the meta description — if you've set one.

By default:

  • The page is publicly accessible
  • It has a robots: index, follow meta tag
  • It appears in sitemap-tags.xml
  • It has no custom content beyond the tag name, description, and the list of posts

That last point is the crux of the SEO problem. A tag page with a name, an optional one-sentence description, and a list of post titles is not a competitive web page. It's an archive. Archives rarely rank for head terms in competitive niches.

The decision matrix

Before you do anything, categorize your tags:

High-volume topic tags — Tags that correspond to a keyword you actually want to rank for. Examples: seo, content-marketing, python-tutorials, personal-finance. These are candidates for optimization.

Sub-topic tags — Tags that are specific enough to have a defined audience but not high search volume on their own. Examples: email-subject-lines, ghost-themes, react-hooks. These are borderline: optimize if you have enough content to support a real archive, noindex if you don't.

Organizational tags — Tags you use internally to manage your content workflow: newsletter-2025, imported, featured-homepage, archive, needs-update. These should never generate public pages.

Author-specific or series tags — Tags that track a content series or author's beat. Can be indexed if the series is a real topic, but usually these are better handled as internal tags.

Option 1: Optimize the tag page as a pillar

If a tag corresponds to a keyword you want to rank for and you have 6+ posts tagged with it, the tag page can be a legitimately useful pillar page — especially if you add custom content to it.

Ghost's tag metadata feature lets you add:

  • A custom meta title (up to 70 characters)
  • A custom meta description (up to 160 characters)
  • A custom OG image

Access these in Settings → Tags → [tag name] → Meta data.

But the more important field is the Tag description — this is the visible content that appears at the top of the tag archive page (in most themes). A well-written 200–400 word tag description that covers the topic, includes the primary keyword, and explains what readers will find in the posts below turns a thin archive into a real content page.

Here's an example of a tag description that works:

Learning Python? This archive covers every tutorial, project walkthrough, and 
cheat sheet published on this blog — from beginner syntax to advanced patterns 
like decorators, async/await, and data pipelines. Start with "Python Basics 
in 30 Minutes" if you're new, or jump to the data structures guide if you've 
got the fundamentals down.

That's useful, includes the keyword, and gives Googlebot something to index beyond a list of titles.

Free tool
Heading structure analyzer
Paste HTML, get a clean outline plus every issue Google would flag.
Try it

Option 2: Noindex the tag page

For sub-topic, organizational, and series tags that don't warrant a full pillar page, noindexing is the right call. Thin tag archives indexed by Google contribute to crawl budget waste and can trigger quality signals that affect the rest of your site.

Ghost doesn't have a per-tag noindex toggle in the admin UI, so you have to use Code Injection. In Settings → Tags → [tag name] → Code injection (header), add:

<meta name="robots" content="noindex, follow" />

This overrides the default index, follow for that specific tag page.

If you want to noindex all tag pages globally and then opt specific ones back in, you can add the noindex meta tag site-wide via Settings → Code injection and use per-tag Code Injection to add index, follow on the tags you want indexed. This is harder to manage at scale, so it's better for sites with mostly organizational tags.

Option 3: Convert to an internal tag

Ghost supports Internal Tags — tags prefixed with # that are never exposed publicly. An internal tag #newsletter-2025 functions exactly like a regular tag for organizational purposes, but:

  • No public archive page is created
  • The tag doesn't appear in sitemap-tags.xml
  • The tag name appears in the Ghost admin but not on your public site

To create an internal tag, name it with a # prefix when creating it: #imported, #needs-update, #featured-homepage.

You can also convert an existing tag by renaming it in Settings → Tags — change newsletter-2025 to #newsletter-2025. All posts tagged with the old tag are automatically re-tagged with the internal version, and the public archive page disappears.

Internal tags are the correct solution for all organizational tags. They give you the organizational structure you need in the admin without the SEO baggage of public thin pages.

Casper's tag page template

Ghost's default Casper theme renders tag pages using the tag.hbs template. Out of the box, Casper shows:

  • The tag name as the page H1
  • The tag description (if set) below the title
  • A grid or list of post cards for all tagged posts
  • Pagination if there are more than the configured number of posts per page

If you want to add custom content sections to a tag page — an introduction, a curated list of best posts, a "Start here" section — you need to create a custom tag template in your theme. For example, a tag-seo.hbs file will be used specifically for the tag with the slug seo, letting you add custom Handlebars markup.

{{!-- tag-seo.hbs: Custom template for the "seo" tag --}}
{{!< default}}

<main>
  <div class="tag-header">
    <h1>{{tag.name}}</h1>
    {{#if tag.description}}
      <p class="tag-description">{{tag.description}}</p>
    {{/if}}
    
    {{!-- Custom "Start here" section --}}
    <div class="start-here">
      <h2>Start here</h2>
      {{get "posts" filter="tag:seo+featured:true" limit="3" as |featured|}}
      {{#foreach featured}}
        <a href="{{url}}">{{title}}</a>
      {{/foreach}}
    </div>
  </div>
  
  {{!-- Full post archive below --}}
  {{#foreach posts}}
    ...post card markup...
  {{/foreach}}
</main>

This approach lets you treat a tag page like a real editorial content page rather than a default archive.

Practical checklist for existing Ghost sites

If you're auditing a Ghost site that's been running for a year or more, here's the order of operations:

  1. Export your tag list from Settings → Tags
  2. Categorize every tag: optimize, noindex, or convert to internal
  3. Add # prefix to all organizational tags
  4. For tags you're optimizing: write tag descriptions (200–400 words), set meta title/description, create custom tag templates if needed
  5. For tags you're noindexing: add the robots meta tag via Code Injection
  6. Resubmit your sitemap in Google Search Console and monitor the Coverage report for changes

The Ghost SEO checklist covers the full site-wide setup. For canonical tag handling on tag pages (rare, but relevant if you've duplicated topic coverage across multiple tags), see the Ghost meta data and canonical guide.

Ship optimized content this afternoon.

7-day trial. $29 when it converts. Cancel from the dashboard the second it stops earning its keep.