If you want something more flexible than taxonomies, but less rigid than collections, then channels might be for you.

A channel is a custom stream of paginated content matching a specific filter. This allows you to create subsets and supersets of content by combining or dividing existing posts into content hubs.

Unlike collections, channels have no influence over a post's URL or location within the site, so posts can belong to any number of channels.

The best way to think of channels is as a set of permanent search results. It's a filtered slice of content from across your site, without modifying the content itself.


Creating a channel

Channels are defined as a custom route, with a custom controller property called channel, and a filter to determine which posts to return.

routes:
  /apple-news/:
    controller: channel
    filter: tag:[iphone,ipad,mac]
  /editors-column/:
    controller: channel
    filter: tag:column+primary_author:cameron

In this example there are two channels. The first is a channel which will return any posts tagged iPhone, iPad or Mac on a custom route of site.com/apple-news/.

The second is a special Editor's Column area, which will return any posts tagged with Column, but only if they're explicitly authored by Cameron.

These are two small examples of how you can use channels to include and exclude groups of posts from appearing together on a custom paginated route, with full automatic RSS feeds included as standard. Just add /rss/ to any channel URL to get the feed.


When to use channels vs collections

Collections and channels share a lot of similarities, because they're both methods of filtering a set of posts and returning them on a custom URL.

So how do you know when to use which?

You should generally use a collection when...

There's a need to define permanent site structure and information architecture

  • You're sorting different types/formats of content
    eg. posts are blog posts OR podcasts
  • You're filtering incompatible content
    eg. posts are either in English OR German
  • You want the parent filter to influence the post's URL
    eg. an index page called /news/ and posts like /news/my-story/

You might be better off with a channel if...

All you need is a computed view of a subsection of existing content

  • You're combining/grouping different pieces of content
    eg. posts tagged with news AND featured
  • You're dividing existing streams of content with multiple properties
    eg. posts tagged with news but NOT authored by steve
  • You want to be able to update/change properties without affecting post URLs
    eg. quickly creating/destroying new sections of a site without any risk

If you're still not sure which is the best fit for you, drop by the Ghost Forums and share what structure you're hoping to accomplish. There's a large community of Ghost developers around to help.