This page describes how to use schema.org JSON-LD to indicate paywalled content on your site with
CreativeWork
properties. This
structured data helps Google differentiate paywalled content from the
practice of cloaking, which
violates our
guidelines. Learn more about
subscription and paywalled content.
Example
Here's an example of
NewsArticle
structured data with
paywalled content.
Guidelines
You must follow the general structured data guidelines and technical guidelines for your page to be eligible to appear in search results. In addition, the following guidelines apply to paywalled content:
- JSON-LD and microdata formats are accepted methods for specifying structured data for paywalled content.
- Don't nest content sections.
- Only use
.class
selectors for thecssSelector
property.
Add markup to paywalled content
If you offer any subscription-based
access to your website content, or if users must register for access to any content you want to be indexed, follow
the steps below. The following example applies to NewsArticle
structured data. Make
sure to follow these steps for all versions of your page (including AMP and non-AMP).
- Add a class name around each paywalled section of your page. For example:
<body> <p>This content is outside a paywall and is visible to all.</p> <div class="paywall">This content is inside a paywall, and requires a subscription or registration.</div> </body>
- Add
NewsArticle
structured data. - Add the highlighted JSON-LD structured data to your
NewsArticle
structured data.{ "@context": "https://schema.org", "@type": "NewsArticle", "mainEntityOfPage": { "@type": "WebPage", "@id": "https://example.org/article" }, (...) "isAccessibleForFree": "False", "hasPart": { "@type": "WebPageElement", "isAccessibleForFree": "False", "cssSelector": ".paywall" } }
Multiple paywalled sections
If you have multiple paywalled sections on a page, add the class names as an array.
Here's an example of the paywalled sections on a page:
<body> <div class="section1">This content is inside a paywall, and requires a subscription or registration.</div> <p>This content is outside a paywall and is visible to all.</p> <div class="section2">This is another section that's inside a paywall, and requires a subscription or registration.</div> </body>
Here's an example of NewsArticle
structured data with multiple paywalled sections.
{ "@context": "https://schema.org", "@type": "NewsArticle", "mainEntityOfPage": { "@type": "WebPage", "@id": "https://example.org/article" }, (...) "isAccessibleForFree": "False", "hasPart": [ { "@type": "WebPageElement", "isAccessibleForFree": "False", "cssSelector": ".section1" }, { "@type": "WebPageElement", "isAccessibleForFree": "False", "cssSelector": ".section2" } ] }
AMP considerations
Here's a list of considerations to keep in mind if you use AMP pages:
- If you have an AMP page with paywalled content, use amp-subscriptions where appropriate.
- Make sure that your authorization endpoint grants access to content to the appropriate bots from Google and others. This is different per publisher.
- Ensure that your bot access policy is the same for AMP and non-AMP pages, otherwise this can result in content mismatch errors that appear in Search Console.
Make sure Google can crawl and index your pages
There are several ways to make sure Google can crawl and index the content on your page:
- If you only want Google to crawl and index the content of a page that's outside of a paywall and visible to all, skip this step.
- If you want Google to crawl and index your entire page, including the paywalled sections, make sure Googlebot, and Googlebot-News if applicable, can access your page.
- If you want to prevent Google from showing the cached link for your page, use the
noarchive
robots meta tag.