Add structured data for paid content to be indexed in Google search

Ghost is AWESOME with structured data at the article level on free content. Would love to add structured data to paywalled content, per Google’s guidelines, to attract a far wider audience to Ghost publications. It’d be great if we could toggle on-off or opt into having our paid content indexed, since I know not every publication is in favor.

Here’s why:

  1. Google organic search is the top traffic driver to most websites (8x more than any social channel and much more than referral or paid), directly connecting audiences with the in-depth content they’re seeking. It works extremely well for free posts on Ghost.
  2. Indexing all paid content means that our websites/publications will show up on more topics throughout the Google ecosystem, attracting more users to our content when they are searching for it.
  3. Organic search converts to paid subscribers at far higher rates than social media or referrals, even when the content is paywalled to users, so it’s a win-win for publishers who choose ghost because of its stellar SEO and website capabilities.

After using Ghost(Pro) for 2 years and being a paid SEO consultant of multiple content management systems in the past that I cannot mention here, I have to say this feature recommended by @thecontenttech is by far and away the most valuable that could be added. Yes, for me which is why I am voting for it, but also in aggregate for all of Ghost’s users who choose to restrict some content to members and still want to be found :earth_africa: :earth_americas: :earth_asia:

I have written 86 posts so far on Ghost(Pro) that use the public preview feature. I counted each post and found that only 23,000 of the 89,000 words that I have written are above the fold and thus publicly searchable. That’s 270 words per post or about 25% of my content, which is definitely more than the average paywall on news sites since they typically only provide a paragraph or two at most for free. Yet I have gotten very little organic search traffic at all despite scoring relatively well on other SEO metrics.

I do not know how many of your other users use the public preview functionality, but implementing this feature would triple their organic search traffic at a minimum. That’s just based on simple math. Three times as much content indexable by Google means three times as relevant. In actuality, the growth would be much higher than that because click through rates are exponential and 270 words is rarely enough to rank on valuable terms without a substantial amount of online authority. But 1,000 words – to use my example – would triple the relevance of content and thereby catapult posts higher to drive even more visitors since hardly anyone goes past the first page or two of search results.

I have not been a real developer for 15 years, so I am sorry that I would not be a lot of help to build the functionality. However, I am more than happy to help build the business case (either to staff or the rest of the community) as to why this is so critical for the growth of Ghost. The details of how to implement the concept is found here:

So I’m confused here. Having the paywalled content accessible to Google means making it accessible to anyone, and then trusting to CSS or Javascript to stop users from accessing it.

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. Getting paywalls right is one of the things I really like about Ghost. Ghost doesn’t serve paywalled content at all.

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();

And voila. Full text content, for free. This is 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 that automates the process of stealing your content. Byebye paywall.

I would love to be that popular. If you already have a huge audience and are able to sufficiently monetize that with Ghost, it’s great. And yes, you don’t have to worry about content getting picked up elsewhere in that case.

If you do not already have a huge audience and are trying to utilize SEO to capture more potential paid subscribers via organic search (which is usually the #1 referrer for most sites on the web), then it’s never going to provide enough content to be relevant if the majority of your stuff is behind the paywall. I am assuming a similar 25%/75% before and after the fold split as I have averaged thus far. I suppose if you posted 75% of your content publicly, then it might have a shot but giving that much away wouldn’t really encourage people to sign up.

Sure, both use cases are equally valid. However, currently only the first is a feature, so my request is that the second also be added to the dev queue given the exponential growth potential for the Ghost community. They do not have to be mutually exclusive. A platform could offer both.

Yes, allowing content to be indexed may allow people who are resourceful enough to access it without paying. But that is far preferable to my current situation. After writing 86 issues, I have hardly gotten any visits at all from organic search because my average public post length is 270 words. I doubt that would be true on a competing platform. I’ve stuck with Ghost because I I love almost everything else about it and was hoping this feature would be forthcoming. However, this may be a deal breaker for me if it remains unlikely.

We’re 100% behind this suggestion over at Our biggest source of free subscribers is in organic search, and it’s disheartening that none of our most valuable content is indexed. We’ve seen a stark difference since leaving Substack for Ghost – overall, the ranking of our free content and its conversions have improved while ranking for paid posts has flatlined. The core issue we want to fix is that because people are finding us via our free content, it’s taking a long time to educate and convert them to pay, rather than them finding a paid post and instantly wanting to unlock it as their intro to us. Thanks, team!

1 Like

Interesting. Thanks for explaining!

You could certainly implement a javascript-based paywall right now in Ghost, no major coding required. If you only need to distinguish between members and non-members, you could even do it with only code injection.

I’d insert HTML cards above and below free and paid content, like this.

<!--Only this part goes in the HTML card:-->
<div class='free-content'>

put your free content here, using the Ghost editor

<!-- this goes in another HTML card -->

Then do the same for a ‘paid-content’ class.
Tell Google about what you’re doing using adam’s link, above.

And then you could use some combination of css and javascript to hide the paywalled content and/or replace it with a call-to-action card.

I’d detect whether someone is subscribed by checking for a cookie, something similar to example #2 on this page: Document: cookie property - Web APIs | MDN . Your logged-in users will have a cookie with the name ghost-members-ssr. If you don’t find that cookie, remove the ‘.paid-content’ div, or add a class that hides it, or replace it with a CTA. This approach could be done with just code injection.

If you need to distinguish between paying and free members, you’ll need to edit the theme, because you need to check for @member.paid. So you could something like this in the theme file (hbs, not javascript):

{{^if @member.paid}}
.paid-content {visibility: none}

Or you could put in some javascript that replaces the paid content with your CTA, or animate in a big CTA that blocks content access after so many second, or a variety of other effective but obnoxious paywall implementations.

I’m not voting against your idea or anything, just trying to give you an idea for how you could get the functionality you say you need right now. :) Hope that helps!