Ghost CMS Featured Posts: How to Display and Customize Them

Ghost CMS featured posts guide - how to display featured content on your homepage

You mark a post as "featured" in Ghost. You wait. You refresh your homepage. Nothing changes. The post sits in the same chronological list as everything else — no spotlight, no special placement, no visual cue. Sound familiar?

This is one of the most common points of confusion on the Ghost forum. A user posted just days ago: "Do none of the default themes use featured posts?" — and the answer isn't a simple yes or no. The featured flag exists in Ghost's core data layer, but whether it does anything visible depends entirely on your theme.

This guide explains exactly what the featured flag does, which themes support it out of the box, how to add featured post sections to any theme with Handlebars, and how to use the Ghost Admin API to bulk-feature posts programmatically.

Quick answer: The Ghost featured flag marks posts with a boolean in the database but doesn't change your site's layout automatically. Your theme must include code to query and display featured posts — most default Ghost themes like Casper don't show a dedicated featured section unless the theme is specifically built for it.

Ghost CMS featured posts guide - how to display featured content on your homepage

When you mark a post as featured in Ghost Admin, two things happen:

  1. The post's featured field is set to true in the database
  2. A featured CSS class gets applied to the post card in your theme

That's it. Ghost doesn't automatically move featured posts to the top of any page. There's no built-in homepage section for them. The flag is a data attribute — a signal your theme can respond to. Whether anything visible happens is up to the theme's Handlebars templates.

To feature a post, open it in Ghost Admin, go to the post settings panel on the right side, and toggle the Feature this post switch. You can also feature posts from the post list by clicking the three-dot menu next to any post.

The Ghost Admin panel shows a star icon (⭐) next to featured posts in the posts list — that's the only reliable place you'll always see the featured flag in action, regardless of theme.

Why doesn't my featured post show up differently on my homepage?

The official Ghost documentation says: "If your theme includes functionality to feature specific posts, give them special styling, or place them into a carousel on the homepage, you can define your featured posts with this toggle."

That "if" is doing a lot of heavy lifting. Most default Ghost themes — including Casper, Source, and Edition — treat the featured flag inconsistently:

ThemeFeatured Post SupportWhere It Shows
Casper (default)PartialAdds a CSS class, no dedicated section
SourceNone by defaultNo visual difference on homepage
EditionNoneFeatured flag ignored in layout
HeadlinePartialSome versions pin featured posts
StarterNoneSame list regardless of featured status

The featured CSS class that Ghost adds automatically lets you style featured post cards differently with custom CSS — a border, a background color, a star icon — but it won't reorder your posts or create a separate homepage section without Handlebars changes.

To pull featured posts into a specific section, you use Ghost's {{#get}} Handlebars helper. Open your theme's index.hbs (or home.hbs if your theme has a custom homepage template) and add this block where you want the featured section to appear:

{{#get "posts" filter="featured:true" limit="3"}}
  {{#if posts}}
  <section class="featured-posts">
    <h2>Featured</h2>
    <div class="featured-grid">
      {{#foreach posts}}
        <article class="featured-card">
          <a href="{{url}}">
            {{#if feature_image}}
              <img src="{{feature_image}}" alt="{{title}}" loading="lazy">
            {{/if}}
            <h3>{{title}}</h3>
            <p>{{excerpt words="20"}}</p>
          </a>
        </article>
      {{/foreach}}
    </div>
  </section>
  {{/if}}
{{/get}}

The filter="featured:true" parameter tells Ghost to only fetch posts where the featured flag is set. limit="3" grabs the three most recent featured posts — adjust this to your preference.

After editing the template, zip your theme folder and upload it via Ghost Admin → Settings → Design → Change theme → Upload theme. You can also restart Ghost if you're working locally with ghost restart. If you run into theme upload errors, check your Ghost 500 Internal Server Error guide for common causes.

A simple grid works for most sites, but a slider adds visual polish. Here's a lightweight approach using the tiny-slider library — no heavy dependencies required:

Step 1. Add the slider markup in your Handlebars template:

{{#get "posts" filter="featured:true" limit="5"}}
  <div class="featured-slider" id="featuredSlider">
    {{#foreach posts}}
      <div class="slide">
        <a href="{{url}}">
          <img src="{{feature_image}}" alt="{{title}}" loading="lazy">
          <div class="slide-meta">
            <span class="tag">{{primary_tag.name}}</span>
            <h3>{{title}}</h3>
          </div>
        </a>
      </div>
    {{/foreach}}
  </div>
{{/get}}

Step 2. In Ghost Admin, go to Settings → Code injection → Site header and add:

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tiny-slider/2.9.4/tiny-slider.css">

Step 3. In the Site footer field, initialize the slider:

<script src="https://cdnjs.cloudflare.com/ajax/libs/tiny-slider/2.9.4/min/tiny-slider.js"></script>
<script>
if (document.getElementById('featuredSlider')) {
  tns({
    container: '#featuredSlider',
    items: 1,
    slideBy: 'page',
    autoplay: true,
    autoplayButtonOutput: false,
    controls: true,
    nav: true
  });
}
</script>

Code injection is a good option when you don't want to edit theme files directly. For more complex injections, see how full-width HTML embeds work in Ghost.

If you're building a custom frontend or headless setup, the Ghost Content API lets you query featured posts directly:

GET https://your-site.com/ghost/api/content/posts/
  ?key=YOUR_CONTENT_API_KEY
  &filter=featured:true
  &limit=6
  &fields=title,slug,feature_image,excerpt
  &include=tags,authors

This returns only featured posts in JSON format — useful for Next.js, Astro, or any JavaScript frontend pulling from Ghost as a headless CMS. You can combine filters too: filter=featured:true+tag:tutorial to get featured posts from a specific tag.

The response includes the featured: true field on each post object, so your frontend can conditionally render featured posts differently from regular ones. If you're optimizing your Ghost headless setup for search, the full-text search guide for Ghost covers Algolia and Typesense integration.

What's the difference between a featured post and a pinned post in Ghost?

Ghost doesn't have a native "pinned post" feature the way WordPress does. The featured flag is the closest equivalent, but with a key difference:

ConceptGhost BehaviorRequires Theme Support?
Featured postSets featured: true, adds CSS classYes — for dedicated sections
Pinned post (WordPress)Doesn't exist natively in GhostN/A
Pinning via theme hackUse {{#get}} to always put featured firstYes — requires Handlebars edit
Internal tag (#feature)A naming convention for conditional formattingYes — theme reads the tag

To truly "pin" a featured post above all others on your homepage, you'd modify index.hbs to first loop through featured posts, then loop through non-featured ones. This gives you the WordPress-style pinned experience inside Ghost's Handlebars system.

Using internal tags like #feature alongside the featured flag lets you trigger additional template logic — like activating a full-width hero layout for a specific post. See how Ghost tags work for more on internal tag conventions.

Can I feature posts via the Ghost Admin API?

Yes. If you need to bulk-feature multiple posts, the Ghost Admin API makes it straightforward. Here's a Python snippet:

import requests, jwt, time

key_id = "YOUR_KEY_ID"
hex_secret = "YOUR_HEX_SECRET"
secret_bytes = bytes.fromhex(hex_secret)
now = int(time.time())
token = jwt.encode(
    {"iat": now, "exp": now + 300, "aud": "/admin/"},
    secret_bytes,
    algorithm="HS256",
    headers={"kid": key_id}
)

# Feature a specific post by ID
post_id = "YOUR_POST_ID"
updated_at = "2026-03-01T00:00:00.000Z"  # Must match current updated_at

response = requests.put(
    f"https://your-site.com/ghost/api/admin/posts/{post_id}/",
    headers={"Authorization": f"Ghost {token}"},
    json={"posts": [{"featured": True, "updated_at": updated_at}]}
)
print(response.json())

You need the current updated_at value from a GET request first — Ghost uses this to prevent accidental overwrites. The same approach works for unfeaturing posts: just set "featured": False.

If you're managing a large content library programmatically, combining featured post management with your Ghost n8n integration lets you automate the entire workflow — feature new posts, rotate featured content on a schedule, or sync featured status from an external spreadsheet.

Which Ghost themes have built-in featured post support?

If you'd rather not edit Handlebars, these themes support featured posts out of the box:

  • Tripoli — features a dedicated hero carousel for featured posts on the homepage
  • Massively — shows featured posts in a highlighted section at the top
  • Alto — uses the featured flag to populate a top stories section
  • Bulletin — newsletter-style theme with a featured post header
  • Most premium themes from Ghost's marketplace support featured sections

When evaluating themes, look for "featured posts" in the theme description or preview. The best Ghost themes guide breaks down which themes are worth using in 2026 across different use cases.

If you're on a free Ghost theme and don't want to pay for a premium one, the Handlebars approach above works on any theme — it just takes 20-30 minutes to implement and test.

The featured flag has no direct effect on Ghost's SEO output — it doesn't change your post's meta tags, structured data, or sitemap priority. But it has indirect SEO benefits:

  • Internal linking: A featured posts section on your homepage passes PageRank to your best content
  • Crawl priority: Posts prominently linked on the homepage get crawled more frequently
  • Click-through rate: Visually distinguished featured posts can improve dwell time if they match user intent
  • Topical authority: Featuring your cornerstone content signals its importance across your site

For a full breakdown of how Ghost handles on-page signals, the Ghost SEO guide covers everything from title tags to schema markup. If you're also tracking how your featured content ranks, the Ghost SEO reporting guide shows which tools to use alongside Google Search Console.

Frequently Asked Questions

Why doesn't the featured post appear differently on my Ghost homepage?

The featured flag adds a boolean to the post's data and a CSS class to the post card, but it doesn't change the page layout. Your theme needs Handlebars code — specifically the {{#get}} helper with filter="featured:true" — to create a visible featured posts section. Most default Ghost themes don't include this by default.

How do I mark a post as featured in Ghost?

Open the post in Ghost Admin, look at the post settings panel on the right side, and toggle Feature this post. You can also feature posts from the posts list by clicking the three-dot menu next to any post title and selecting "Feature".

Ghost has no limit on how many posts you can mark as featured. The practical limit comes from your theme — if your featured section only shows 3 posts, only the 3 most recently published featured posts will appear there, regardless of how many you've marked.

Do featured posts rank higher in Ghost's default post listing?

No. Ghost's default post listing is chronological. Featured posts don't float to the top unless your theme explicitly queries and displays them before non-featured posts.

Yes. Add &filter=featured:true to any Ghost Content API posts request. You can combine this with other filters: filter=featured:true+tag:guide returns featured posts tagged "guide".

No. Ghost's sitemap includes all published posts at equal priority. The featured flag doesn't change sitemap generation or tell search engines a post is more important. You'd need a custom sitemap solution to control per-URL priority.

What's the difference between a featured post and a featured image in Ghost?

These are different things. A featured post means the post itself is marked for special display via the feature toggle. A featured image (sometimes called the "post image") is the hero/cover image that appears at the top of the post. Every post can have a featured image; not every post needs to be "featured".

Can I feature Ghost pages (not just posts)?

No. The featured flag in Ghost applies to posts only, not pages. Ghost pages are static content (About, Contact) and don't appear in the posts loop or get the featured flag treatment.

How do I remove a post from featured status in Ghost?

Go to the post in Ghost Admin, open the settings panel, and toggle Feature this post off. The post returns to normal status immediately — no restart needed.

The simplest path forward: if you're on Casper or Source and want featured posts to actually do something, add the {{#get}} block to your index.hbs file with a limit of 3-5 posts. Feature your best evergreen content — cornerstone guides, high-traffic posts, and content you want new visitors to find first. That's the setup that actually moves the needle.

Subscribe to Ghost SEO

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe