How Ghost gets paywalls right

Getting paywalls right is one of the things I really like about Ghost. Ghost doesn’t serve paywalled content at all.

An adorable ghost with pen and paper.
Utterly adorable Ghosts are the work of Aletheia Shade. Tell her I sent ya.

One of Ghost's big strengths is the paywall. If you're publishing content for members (whether free or paid), you really do want to make sure that only members get access to that content.

At the same time, you do want search engines (Halloooo GoogleBot!) to find and index your content. The public preview is a great way to do this. Make the first part of your content accessible to users AND the GoogleBot, while protecting the meat of your content. To add a public preview card, start typing /public on a new line in the Ghost editor, or hit the big + button and select it from the dropdown list. When you're using the public preview card, you also need to make sure you set the post access to whatever is required to have full content. That can be members, paid members, or a specific paid tier. (But don't set access to public - that causes the public preview to have no effect.)

With the public preview card, users who meet the access requirements get the whole article. Users who don't meet the access requirements get everything before the preview line, followed by a "Call to action" telling them they need to subscribe or upgrade.

💡
Tip: You can customize what users see in the Call to Action. That content comes from partials/content-cta.hbs. If your theme doesn't have a content-cta.hbs partial already, you can grab the generic one from here, copy it into the theme, then edit it to your liking.

Why does Ghost do it this way? Why not just serve the same content to everyone? Then the GoogleBot could index the whole page, and you could just use some CSS or something to hide the paywalled content, right?

This is generally not a good way to protect content, because it means delivering the content and then trusting the user’s browser to not show it. Don't do this. Users are not trustworthy, and browsers lie. (Sorry guys, but it's the truth!)

Here’s an illustration of the problem with trusting the browser:

  • Visit Skillet Chicken With Tomatoes, Pancetta and Mozzarella Recipe - NYT Cooking . Unless you have a paid NYT Recipes subscription, it’s going to tell you you can’t have access to it.
  • Open your browser’s console (F12 and choose ‘console’).
  • Paste in: 
    document.querySelector('.modal_modal-window-container__59UFY').remove();
    document.querySelector('body').classList.remove('mask_no-scroll__jhmpB')

And voila. Full text content, for free. I'm not here to encourage you to steal tasty recipes from the NYTimes, but I do want you to see that this is exactly why Ghost should not do paywalls that way. Your tech-y users will open Dev tools and steal your content. And if you’re popular enough, someone will create and sell an extension or an app that automates the process of stealing your content. Or they'll scrape it and republish it, with their own ads. In any case, bye-bye paywall.

I don't know why the New York Times does it this way. They're surely smarter than I am, so perhaps you'll tell me why in the comments section below. Meanwhile, I'm just glad Ghost doesn't.

Part 2: What if I want to do Paywalls wrong?