Feature Request / Support Question: Secure Tier-Based Preview Links for Unpublished Drafts

Hi everyone,

I’m looking for guidance on whether Ghost supports a workflow for sharing unpublished draft posts with external people while restricting access to only a permitted content preview.

My goal

I would like to create a dedicated tier called “Review” and use it to restrict access to draft posts that are undergoing review.

The posts must remain unpublished until the review process is complete.

Ideally, when anyone opens the link, they should see:

  • The post header and title.
  • A short preview of the content, limited to the portion I choose to make visible.
  • A customized locked-content message: “This post is currently under review.”

The locked-content message should not display any default membership-related calls to action, including “Subscribe,” “Become a Member,” or “Sign In.” This should only work for this specific tier.

My current setup

  • Membership is disabled globally on my Ghost site.
  • I have created a paid tier named “Review”, which I intend to use only as a way to assign posts to this specific access category. I do not intend to charge users.
  • The posts must remain unpublished drafts throughout the review process.
  • I would prefer to implement the solution through Code Injection, without modifying theme files, if possible.
  • Any customization must apply only to the “Review” tier. All other tiers and their existing behavior must remain unchanged.

The problem I’m encountering

When I share Ghost’s preview link for an unpublished draft, the URL contains a parameter such as:

?member_status=anonymous

With this parameter present, Ghost displays the expected teaser and locked-content CTA.

However, if I remove the member_status parameter entirely, Ghost displays the full post content, including when I open the URL in a fresh incognito window without being logged in.

This is a significant concern because I need to share these links with external users, and I do not want the entire unpublished post to be accessible simply by modifying the URL.

My questions

  1. Is there a supported way to restrict the content returned by a draft preview link? Specifically, can Ghost enforce a teaser boundary server-side, regardless of whether the member_status parameter is present, absent, or modified?

  2. Can a custom tier be used for this workflow when memberships are disabled? I would like to assign unpublished posts to the “Review” tier without enabling public membership signup or requiring users to become paying members.

  3. Can the locked-content CTA be customized for one specific tier? I would like to replace the default CTA with “This post is currently under review” and remove all membership-related links and buttons, without changing the default behavior of other tiers.

What I need to achieve

The essential requirement is that an external user can open a link to an unpublished draft and see only the post header, the teaser I permit, and the custom review message. The rest of the post must remain inaccessible, even if the external user removes or changes URL parameters.

How do I achieve this?

Thank you for your help!

Hi ChatGPT, long time, no talk! (Edit: that was intended as good-natured ribbing. I apologize to Roy if I’ve offended you.)

The way you’ve defined the essential requirements: no, this is not possible.

1 - no. Not enforced by the server. Someone with a preview link can put any status they want on it.

2 - You probably want ‘invitation only’, not ‘disabled’. And to get tiers, you’ll need Stripe linked.

3 - You can edit content-cta.hbs to use any logic you like, including matching on tier name.

If it were me, I’d rethink the requirement that things be drafts. What’s the point? Why is that a requirement? Remove that, and I think you’ve probably got something workable.

In code injection? No, absolutely not.

Alternative, if you must share a preview link for some reason: Don’t put the restricted access content into the post at all. Then you can safely send out a preview link, since there’s nothing to be revealed.

How to respond to a forum comment:

Person 1: Requests clarity/assistance. May or may not have used an AI tool to organize a long message, but that’s beside the point.

Person 2 (who moves between talking as if they work for Ghost but also clarifies that they are not part of Ghost core team, just helping out, but occasionally moves, deletes, or redacts forum comments, and also sells their own products and services – so I’m sure there is no conflict of interest issues here): responds sarcastically.

1 Like