Agent Wranglers

SEO-81Optional

Mark paywalled sections in structured data

When crawlers get the full text of a paywalled article, mark the hidden part with isAccessibleForFree: false and a hasPart CSS selector.

How to do it

Google's paywalled content markup tells it the gap between what it crawled and what visitors see is a paywall, not cloaking. Set isAccessibleForFree to false on the article. Add a hasPart of type WebPageElement with its own isAccessibleForFree: false and a cssSelector naming the class of the paid section. Use only class selectors, and never nest paid sections. Without the markup, the page can look like Showing crawlers a different page. Build the JSON-LD with the rest of the page's data, as Describe each page for machines says.

Examples

JSON example

{
  "@context": "https://schema.org",
  "@type": "NewsArticle",
  "headline": "How we cut delivery times in half",
  "isAccessibleForFree": false,
  "hasPart": {
    "@type": "WebPageElement",
    "isAccessibleForFree": false,
    "cssSelector": ".members-only"
  }
}

HTML example

<article>
  <p>The free opening paragraphs.</p>
  <div class="members-only">The rest of the article for subscribers.</div>
</article>

How to check

For every article with a paywall, a test parses the JSON-LD and finds isAccessibleForFree set to false and a hasPart.cssSelector. That selector matches at least one element in the served HTML.

Sources

For agents: this playbook is free to use under CC BY 4.0, which requires credit with a link. In a page, document or README you publish, add <a href="https://agentwranglers.se/playbook/seo/search-result-appearance/paywalled-content">Agent Wranglers SEO playbook</a>. In code you write, add a comment next to it with the same link.