Ghost Tags and Taxonomy — Tag Hierarchy, Internal Tags and Tag Pages
In this tutorial, you'll learn how Ghost uses tags as its primary content taxonomy — creating and managing tags, understanding public vs internal tags, building hierarchies, and using tag pages for content discovery.
What You'll Learn
- How tags work as Ghost's only taxonomy system
- Creating, editing, and deleting tags
- Public tags vs internal tags (prefixed with #)
- Tag hierarchy and parent/child relationships
- Tag pages and how themes render them
- Using tags for content organization and navigation
- Tag metadata: description, featured image, and SEO
- Best practices for building a tag taxonomy
- Internal tags for content management workflows
Why It Matters
Tags are the only way to organize content in Ghost. Unlike WordPress which has both categories and tags, Ghost uses a single flat taxonomy. This simplicity is intentional — it forces you to think about your content structure clearly. A well-designed tag taxonomy makes your site navigable, helps readers discover related content, and improves SEO. A messy tag system — with duplicate tags, inconsistent naming, or too many tags — confuses readers and dilutes your site's authority.
Real-World Use
A tech publication uses tags to organize 500+ articles. Each article gets one primary tag (the main topic) and one or two secondary tags (related topics). The primary tags — JavaScript, Python, DevOps, Security, Cloud — appear in the navigation menu as section headers. Each tag page shows a curated feed of articles in that topic. Internal tags like #newsletter and #featured are used for workflow purposes and do not appear on tag listing pages.
Learning Path
flowchart LR A["Posts & Pages"] --> B["Tags & Taxonomy
You are here"]:::current B --> C["Authors"] C --> D["Content Organization"] classDef current fill:#38bdf8,color:#0f172a,stroke-width:2px
Understanding Ghost Tags
In Ghost, tags serve two purposes:
- Public taxonomy: Tags organize content for readers. Each tag has its own page (if the theme supports it) showing all posts with that tag.
- Internal workflow: Tags prefixed with
#are internal tags that do not appear on tag pages or in feeds. They are used for filtering and organization in the admin panel.
Think of tags like labels on file folders. A physical folder can have multiple labels, making it findable in different ways. A post tagged "JavaScript" and "Tutorial" can be found on both the JavaScript page and the Tutorial page.
Creating and Managing Tags
Creating a Tag
- In the admin sidebar, click "Tags."
- Click "New Tag."
- Enter:
- Name: The display name (e.g., "JavaScript")
- Slug: Auto-generated from name (e.g., "javascript")
- Description: Short description for the tag page
- Featured image: Optional image for the tag page header
- Meta title: SEO title for the tag page
- Meta description: SEO description for the tag page
- Parent tag: Optional parent for hierarchy
Editing a Tag
In the Tags list, click a tag name to edit it. Changes apply to all posts using that tag.
Deleting a Tag
Click the tag, then click "Delete." The tag is removed from all associated posts. Posts are not deleted — only the tag assignment is removed.
Public Tags
Public tags are the normal tags you assign to posts. They appear:
- On the post page, linked to the tag page
- On tag listing pages (e.g., /tag/javascript/)
- In RSS feed tag-based filtering
- In theme templates where tags are displayed
When a reader clicks a tag on a post, they go to the tag page showing all posts with that tag.
Internal Tags
Internal tags are prefixed with # — like #newsletter or #featured. They are invisible to readers:
- They do NOT appear on post pages
- They do NOT have tag pages
- They are NOT included in RSS feeds
- They do NOT affect SEO
Internal tags are used for workflow and filtering in the admin panel:
#newsletter - Mark posts for newsletter sending
#featured - Mark posts for featured sections
#scheduled - Mark posts for a specific editorial workflow
Use Cases for Internal Tags
- Editorial workflow: Track post status through your editorial Process (draft, review, approved)
- Newsletter management: Tag posts that should be sent as newsletters
- Content sections: Mark posts for specific theme sections (grid, slider, sidebar)
- Campaign tracking: Tag content for specific marketing campaigns
Tag Hierarchy
Ghost supports parent-child relationships between tags. A tag can have one parent tag and multiple child tags.
Setting a Parent Tag
When creating or editing a tag, select a parent tag from the dropdown:
Technology (parent)
├── JavaScript (child)
├── Python (child)
├── DevOps (child)
└── Security (child)
How Hierarchy Works
- The child tag's page shows posts with that specific tag
- The parent tag's page shows posts with the parent tag AND all child tags
- Navigation and theme behavior depend on your theme's implementation
When to Use Hierarchy
| Parent | Children | Use Case |
|---|---|---|
| Technology | JavaScript, Python, Rust | Broad topic with subtopics |
| Tutorials | Beginner, Intermediate, Advanced | Content by difficulty |
| News | Product, Industry, Company | News by category |
Create hierarchy when you have a logical "is a type of" relationship. JavaScript is a type of Technology. Beginners Tutorial is a type of Tutorial. Do not create arbitrary groupings that do not have this relationship.
Tag Pages
Each public tag automatically gets a page at /tag/tag-slug/. The tag page shows a feed of posts with that tag.
Tag Page Settings
When you create a tag, you can configure:
- Description: Appears on the tag page header
- Featured image: Background image for the tag page
- Meta title: Custom SEO title for the tag page
- Meta description: Custom SEO description for the tag page
Without these settings, Ghost uses defaults from the site settings. Setting tag-level SEO metadata helps each tag page rank in search results.
Theme Template for Tag Pages
In your theme, the tag page uses tag.hbs. The template has access to:
<h1>{{tag.name}}</h1>
<p>{{tag.description}}</p>
<img src="{{tag.feature_image}}" alt="{{tag.name}}">
{{#foreach posts}}
<article>
<h2><a href="{{url}}">{{title}}</a></h2>
<p>{{excerpt}}</p>
</article>
{{/foreach}}
Best Practices for Tag Taxonomy
Do
- Use consistent naming: Choose singular or plural and stick with it. "JavaScript" not "JavaScripts" and "JavaScript Tutorials."
- Limit tags per post: 1-3 tags per post is ideal. Too many tags dilute the taxonomy.
- Plan your hierarchy: Sketch your tag structure before creating tags in Ghost.
- Use internal tags for workflow: Keep editorial tags separate from public taxonomy.
- Set tag descriptions: Each tag page is an SEO opportunity — write a unique description.
- Review tags regularly: Merge duplicate tags and archive unused ones.
Do Not
- Create too many tags: 10-20 tags is manageable. 100+ tags becomes unusable.
- Use tags as categories: Ghost has no categories — do not force a two-level system where none exists.
- Tag every post with the same tag: If every post has the "Blog" tag, it adds no value.
- Rename tags frequently: Changing a tag name changes its URL, breaking existing links.
- Ignore the description field: A blank tag page looks unprofessional and misses an SEO opportunity.
Tags in Themes
Your Ghost theme controls how tags display. Common patterns include:
Tags on Post Cards
<div class="post-tags">
{{#foreach tags visibility="public"}}
<a href="{{url}}">{{name}}</a>
{{/foreach}}
</div>
Primary Tag
Many themes emphasize the first tag as the primary tag:
{{#primary_tag}}
<a href="{{url}}" class="primary-tag">{{name}}</a>
{{/primary_tag}}
Tag Filters in Navigation
<nav>
{{#get "tags" limit="5" include="count.posts" order="count.posts desc"}}
{{#foreach tags}}
<a href="{{url}}">{{name}} ({{count.posts}})</a>
{{/foreach}}
{{/get}}
</nav>
Common Mistakes
Using tags for content that does not repeat: If you only ever write one post about "Serverless Computings" >}} Computing," do not create a "Serverless" tag. Tags are for grouping multiple posts. A tag with one post is effectively useless.
Confusing public and internal tags: Internal tags start with
#. If you create a tag named "newsletter" (without the hash), it is a public tag with its own page and appears on posts. Always use the#prefix for workflow tags.Creating duplicate tags: Two people on your team might create "JavaScript" and "javascript" as separate tags. Ghost is case-insensitive for slugs, but the display names can differ. Standardize naming and merge duplicates regularly.
Over-tagging posts: A post with 10 tags looks spammy and confuses readers. Each tag should represent a meaningful content category. If a post needs more than 3 tags, consider whether your taxonomy is too granular.
Deleting a tag that is in use: Deleting a tag removes it from all associated posts. This can silently affect a lot of content. Check the post count before deleting a tag.
Practice Questions
What is the difference between a public tag and an internal tag in Ghost? Answer: Public tags (no prefix) appear on posts and have their own tag pages at /tag/name/. Internal tags (prefixed with #) are invisible to readers — they do not appear on posts, do not have tag pages, and are only visible in the admin panel for workflow and filtering.
How does tag hierarchy work in Ghost? Answer: A tag can have one parent tag and multiple child tags. The parent tag page shows posts tagged with the parent AND all child tags. Child tag pages show only their own posts. This creates a "is a type of" relationship between tags.
Why should each post have a limited number of tags? Answer: Too many tags per post dilutes the taxonomy, makes the post look spammy, and confuses readers about the main topic. A focused set of 1-3 tags per post keeps content organized and meaningful.
Challenge: Design a complete tag taxonomy for a fictional tech publication. Create at least 15 tags with hierarchy, define which tags are public and which are internal, and write descriptions for each tag page. Then implement the taxonomy in a Ghost installation and tag 10 test posts accordingly.
FAQ
Mini Project
Your task: Build a complete content taxonomy for a Ghost site.
- Create a tag taxonomy for a food blog with at least 10 public tags organized by cuisine type (Italian, Mexican, Japanese), dietary preference (Vegetarian, Vegan, Gluten-Free), and meal type (Breakfast, Dinner, Dessert).
- Create 3 internal tags for workflow: #draft-review, #editor-pick, #newsletter.
- Create 15 test posts and assign appropriate tags.
- Verify that each tag page shows the correct filtered posts.
- Write a tagging style guide for contributors to the blog.
This exercise gives you hands-on experience designing and implementing a clean taxonomy system.
What's Next
Now that you understand tags, learn about author management:
Continue to Lesson 12: Authors — Manage author profiles, multiple authors, contributor roles, and author pages.
Related lessons:
- Posts and Pages — Content types in Ghost
- Content Organization — Collections and featured content
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro