Issues in Ghost

How to organize your content into issues, and a bonus client story!

A ghost holding a newspaper

Some Ghost users blog. (Yeah, that's me.) Some are newsletter writers. (I mean, that's also me, but not as much.) But some Ghost users are publishers of magazines or other forms that have issues. No, not that kind of issues.

Ghost doesn’t have the concept of an ‘issue’ built in. Themes can change how posts display, not what the underlying data is. (This is different from some other software, i.e. WP, where themes & plugins can add really different data and functionality.)

So there are two options for issues:

  1. Make one post be an issue. Use headings within the post to break apart articles, add images and other content types as needed. This works great for email, if you want to send the whole issue out as one email. But perhaps you’ve already identified the problem: Your whole issue exists as one item, without an easy way to pull out and organize individual articles on your website. To make matters worse, Ghost's built-in search will be a disappointing, since only the issue title and excerpt will be searchable.
  2. Make each article within the issue a separate post. This is going to be a lot more satisfying, if you want to sort and display different articles on your site. You can group articles together using tags. So you might tag all of your first issue with the tag “Issue 1”, and then you could display all posts in the issue at /tag/issue-1. (You could also use some custom routing, so that the URLs for the issues show up right in the URL.) You could also use a theme like Headline, to display the contents of multiple issues on the front page. (Where you see environment and culture headings, think “Issue 1” and “Issue 2”. ) You could use additional tagging to offer groupings by topic as well. So you might have a collect of posts on a topic at /tag/swimming-pools/, but also have content available by issue at /tag/summer-2024, for example.
Using Ghost tags for organization, layout, and more
How should you use Ghost tags to organize your content?

Here's a recent post I wrote about using tags for organization. Check it out!

But how do you send an issue out as a newsletter? Two options:

2a) Create a separate post to be your newsletter email. In it, put a little introductory text and a collection of links or bookmark cards to each article in the issue. Send that as “email only”. Or email and publish it to the website, making the this item serve as the landing page for each issue.

2b) Paste the content of each post in the issue into a single post and send that (email only) as your newsletter.

This all sounds a bit tedious, until you realize that either of these processes can be automated using the Ghost API to look for new content and assemble a newsletter (either with full posts or excerpts) from it. Which brings us to...

Client story: Golden Today

A screenshot of the Golden Today website.

I’ve just wrapped up some automation for a client (Hi Barb!) to automate like in option 2b, sending out a lengthy daily newsletter of everything going on in Golden Colorado. Every night, a cloud function automatically runs that checks her Ghost site for new content and generates an email with it that goes out to her subscribers. So we have the best of both worlds: Email subscribers get one big newsletter, but posts on the website can be sorted and categorized.

Barb came to us from WordPress, so I did a migration of her old newsletters, too. I’d started out hoping to split Golden Today's old newsletters into articles also, but we quickly decided that wasn’t going to happen - her old content format had changed repeatedly, making an automated splitting difficult, and she had 3000+ of these newsletters, meaning a manual split didn’t make sense. We settled on an archive of the old newsletters, and separate posts going forward. And we added full-text search, so that it isn’t too hard to find the old articles within the newsletter archive, if anyone wants them.

Her site is built with a customized version of Tripoli, with custom code powering the calendar and weather displays.

That's all for today! Have a great one!