Advanced

Content model

How Signal maps your show onto Ghost — episodes and blog posts are both posts, hosts and guests are authors, shows are tags, and internal tags set each post's content type.

Signal runs entirely on Ghost's native content — there's nothing custom to learn or maintain. Once you know how your show maps onto Ghost's posts, authors, and tags, every part of the theme falls into place.

ContentGhost primitiveWhere it lives
Episode (video, audio, or embed)Post/episodes/{slug}/
Blog post (a written article)Post tagged #blog/blog/{slug}/
Host / guestAuthor (staff)/people/{slug}/
Show / topicTag/topics/{slug}/

Two content types

Every post you write is one of two content types, and a single internal tag decides which:

  • Episodes — the default. A post with no #blog tag is an episode: it gets the full podcast layout with a player, the show-notes / transcript / chapters tabs, and its hosts and guests.
  • Blog posts — a post tagged #blog. It gets a clean, reader-focused article layout: a title, a simple author byline with reading time, the feature image, your writing, and comments. No player, no tabs, no host/guest labels.

The two types live in separate places — episodes under /episodes/, blog posts under /blog/ — and each keeps to itself: blog posts never show up in your episode feeds, and episodes never show up on the blog. You can run a pure podcast and never touch the blog, or mix long-form writing in whenever you like.

Episodes are posts

Every episode is a Ghost post, published to the /episodes/ collection and shown at /episodes/{slug}/. The episodes archive (and its topic filters) live at /episodes/, and the podcast's feed is at /episodes/rss/.

You write an episode like any Ghost post: a title, a feature image (used as the episode cover and poster), the show notes in the body, and one or more authors. The media itself — a video embed, an uploaded video, or an audio file — goes in the post body; Signal lifts it into the player automatically.

Let Signal Tools do the heavy lifting

The Signal Tools extension (included with Signal) turns a YouTube video, an audio file, or a podcast feed into a ready-to-publish episode draft — transcript, chapters, show notes, and cover image included.

Episode types

An episode is a video by default. Two optional internal tags change how its hero plays:

TypeInternal tagHero
Video (default)noneThe video plays inline and in the persistent player
Audio#audioA waveform audio player
Embed#embedThe episode's third-party embed (e.g. a Spotify player) is lifted into the hero

Internal tags are Ghost tags whose name starts with #. They never appear to readers — no archive, no tag label — they just tell Signal how to present the post. Add them in Post settings → Tags. See Media player for how each type plays.

Adding the #audio internal tag in Ghost post settings

Toggle Featured on a post (in the post settings) to surface it in the Featured episodes row on your homepage. See Episode sections. (Blog posts are never pulled into the episode rows, even when featured.)

Blog posts

A blog post is a written article — an editorial, an announcement, a companion read for an episode. It uses the same Ghost editor as everything else; one internal tag turns it into a blog post.

Write your post in Ghost as usual — title, feature image, body, and an author.

In Post settings → Tags, add the internal tag #blog (type the #, then blog). Ghost hides internal tags from readers, so it never shows as a label.

Publish. The post appears at /blog/{slug}/ with the clean article layout, and is listed on your blog index at /blog/.

Adding the #blog internal tag in Ghost post settings

A blog post shows:

  • The topic (its primary tag), the title, and your excerpt.
  • A plain author byline — name, date, and estimated reading time. Writers are shown as authors, never as "hosts" or "guests."
  • The feature image, then your article, then an author bio card and comments.
  • A "More from the blog" row of other articles, when you have more than one.

A published blog post with the clean article layout

The blog index and feed

All your blog posts are listed at /blog/, newest first, and the blog has its own feed at /blog/rss/ (separate from the podcast feed at /episodes/rss/). To give readers a way in, add a Blog link to your menu — see Navigation.

The blog index at /blog/

Your homepage also gains a From the blog band showing your three latest articles. It stays hidden until you publish your first blog post, so a pure podcast never shows an empty section.

One-time setup: update your routes

The /blog/ address is defined in the theme's routes.yaml. If you're upgrading an existing Signal site, upload the new routes.yaml once — Settings → Labs → Beta features → Upload routes file — or /blog/ will return "not found." Fresh installs that follow Installation already have it.

Hosts and guests are authors

Everyone credited on an episode is a Ghost author. On the episode's Hosts & Guests tab, each author is labelled Host or Guest by their Ghost staff role — the same rule the homepage grids use (below): a Contributor is a guest; any other role (Owner, Administrator, Super Editor, Editor, Author) is a host. Add or reorder authors in the post settings; the labels follow each person's role, not the order.

Each person shows their name, photo, bio, and — from their Ghost Location field — their role or title (for example, "Host of Signal" or "CEO, Acme"). Their profile page lives at /people/{slug}/ and lists everything they've appeared on.

Host and guest labels are an episode idea. A blog post simply credits its author in the byline — there are no host/guest roles on written articles.

The Hosts & Guests tab on an episode

Who counts as a host vs. a guest

Across the site (the homepage Meet the hosts and Recent guests grids, and the directories), Signal sorts people by their Ghost staff role:

  • Hosts — authors with an editorial role: Owner, Administrator, Super Editor, Editor, or Author.
  • Guests — authors with the Contributor role.

Guests are usually added with Signal Tools, which creates each one as a locked Contributor — a credited author with no login. You can also add them by hand in Settings → Staff.

Curating who appears

To override the role-based lists — say, to hide developer staff who aren't really hosts, or to feature a specific set of guests — create a Ghost Page with the slug hosts or guests and assign the authors you want. Signal then uses that page's authors for the homepage grid and links the section to /hosts/ or /guests/. See Page templates.

Shows and topics are tags

Public tags become your shows or topics, with an archive at /topics/{slug}/. A post's primary tag (the first in its list) is the label shown on cards. The /episodes/ archive and topic pages carry a row of topic filter chips so listeners can narrow by topic. Every public topic appears — ordered by how many episodes carry it — in a single row that becomes a horizontal scroller when the topics outrun the space, with arrows on desktop, swipe on touch, and the topic you're viewing kept in view.

The topic filter chips above the Episodes archive

A topic can span both content types: if you tag a blog post with the same public topic as some episodes, that /topics/ page shows them together — each row clearly marked so readers can tell an article from an episode at a glance (episodes carry a play cue; articles are badged Blog). The same is true of a person's /people/ page.

A topic archive at /topics/ mixing episodes and a blog post

To keep a blog post out of your topic archives entirely, simply don't give it a public topic tag — the #blog internal tag alone never creates or appears on a topic page.

  • Navigation — add a Blog link to your menu.
  • Signal Tools — create guests (with social links) in one step.
  • Episode page — the tabs, players, and up-next that make up an episode.
  • Page templates — the Hosts and Guests directory pages.