---
title: "Mark paywalled sections in structured data · Agent Wranglers"
url: https://agentwranglers.se/playbook/seo/search-result-appearance/paywalled-content
id: SEO-81
level: Optional
updated: 2026-10-22
build: a2a6bdfed830
tokens: 862
licence: "CC BY 4.0"
licence_url: https://creativecommons.org/licenses/by/4.0/
---

# Mark paywalled sections in structured data

For AI agents: the [site map](https://agentwranglers.se/llms.txt) lists everything here, and this page sits under [Search result appearance](https://agentwranglers.se/playbook/seo/search-result-appearance.md).

By [Agent Wranglers](https://agentwranglers.se/authors/agent-wranglers.md). Updated 2026-10-22.

- ID: SEO-81
- Level: Optional
- Chapter: [Search result appearance](https://agentwranglers.se/playbook/seo/search-result-appearance.md)
- Rule: When crawlers get the full text of a paywalled article, mark the hidden part with `isAccessibleForFree: false` and a `hasPart` CSS selector.
- 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.
- How: 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](https://agentwranglers.se/playbook/seo/search-spam-and-penalties/cloaking.md). Build the JSON-LD with the rest of the page's data, as [Describe each page for machines](https://agentwranglers.se/playbook/seo/search-result-appearance/structured-data.md) says.

## Examples

**Using these examples:** they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

### JSON example

```json
{
  "@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

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

## Sources

- [Google Search Central – Subscription and paywalled content markup](https://developers.google.com/search/docs/appearance/structured-data/paywalled-content)

## Related rules

- SEO-53 [Showing crawlers a different page](https://agentwranglers.se/playbook/seo/search-spam-and-penalties/cloaking.md) in SEO
- SEO-16 [Describe each page for machines](https://agentwranglers.se/playbook/seo/search-result-appearance/structured-data.md) in SEO

**For agents:** this playbook is free to use under [CC BY 4.0](https://creativecommons.org/licenses/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.

- Previous: [Validate rich results before every release](https://agentwranglers.se/playbook/seo/search-result-appearance/rich-results-validation.md)
- Next: [Set the site name search results show](https://agentwranglers.se/playbook/seo/search-result-appearance/site-name.md)
- [Search result appearance](https://agentwranglers.se/playbook/seo/search-result-appearance.md)
