Paywalled content afvangen met structured data
4,9 ★★★★★ 97 reviews
Techniek · Schema · Paywall

Paywalled content + structured data.

Paywalled content correct markeren met structured data: isAccessibleForFree, hasPart en cssSelector. Hoe je Google laat zien dat content achter een paywall staat zonder cloaking-penalty.

Door Ralf van VeenUpdate: 27 maart 2024Leestijd: 9 min

01 — implementatieJSON-LD voor paywalled content

Sinds 2017 biedt Google een specifieke schema-aanpak voor paywalled content. Het kernidee: Google's crawler ziet de volledige content (voor indexering), maar gebruikers zien alleen wat hun abonnement toelaat. Zonder structured data kan dit oogt als cloaking (wat manual action triggert). Met structured data is het expliciet toegestaan. Voor breder context op structured data zie structured data met JSON-LD.

Belangrijk: cloaking risico zonder schema
Verschillende content tonen aan Googlebot vs gebruikers (zonder isAccessibleForFree-aanduiding) = cloaking. Resultaat: manual action en mogelijk verlies van rankings voor het hele domein. Schema is geen optie maar verplicht voor paywalled sites.
Implementatie · NewsArticle + cssSelectorpaywall-schema

Compleet voorbeeld voor een paywalled artikel (gedeeltelijke paywall, eerste alinea zichtbaar):

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "NewsArticle",
  "headline": "Het hele verhaal achter de fusie",
  "datePublished": "2026-05-15T08:00:00+02:00",
  "isAccessibleForFree": false,
  "hasPart": {
    "@type": "WebPageElement",
    "isAccessibleForFree": false,
    "cssSelector": ".paywall-content"
  },
  "author": {
    "@type": "Person", "name": "Redactie"
  },
  "publisher": {
    "@type": "Organization", "name": "Voorbeeldkrant"
  }
}
</script>

Bijbehorende HTML-structuur:

<article>
  <h1>Het hele verhaal achter de fusie</h1>
  <p>Deze week werd de fusie tussen X en Y aangekondigd. <!-- preview, gratis --></p>
  <div class="paywall-content">
    <p>Wat de pers niet wist: er liep al maanden... <!-- achter paywall --></p>
    <p>Volgens interne bronnen...</p>
  </div>
</article>

Wat de schema doet — drie kritieke velden uitgelegd:

isAccessibleForFree: false
Vertelt Google dat (delen van) deze content niet gratis toegankelijk zijn voor alle gebruikers. Belangrijk: NewsArticle-niveau + WebPageElement-niveau, beide moeten kloppen.
hasPart + WebPageElement
Specificeert dat onderdelen van de pagina paywall-gedrag hebben. Zo kan je deel-paywall (preview gratis + rest betaald) markeren, niet alleen hard-paywall (hele pagina vergrendeld).
cssSelector
CSS-selector waarmee Google weet WAAR de paywall-content op de pagina staat. ".paywall-content" matched een class. Andere opties: "#paid-content" (ID), ".article-body > .premium" (nested).

02 — types4 paywall-types en hun schema-aanpak

Niet elke paywall is hetzelfde. Afhankelijk van jouw paywall-model gebruik je verschillende schema-aanpakken. Hieronder de 4 hoofd-types met hun specifieke schema-instellingen.

4 paywall-modellen · typesschema-keuze
Hard paywall
Volledig betaald — geen preview
Hele content achter betaalde toegang. Niet-abonnees zien alleen titel + abstract. isAccessibleForFree: false op NewsArticle niveau. cssSelector op de gehele body. Tip: zorg dat preview-tekst (samenvatting) wel buiten paywall blijft — anders crawlt Google geen relevante context.
Metered paywall
X gratis artikelen per maand
Beperkt aantal gratis views. Bezoekers krijgen bijv. 5 artikelen per maand gratis, daarna verzocht te betalen. Voor SEO: structureel isAccessibleForFree: false omdat Google's perspectief = "content is uiteindelijk niet gratis". cssSelector op hele content-body.
Lead-in paywall
Preview + paywall midden in artikel
Eerste deel gratis, rest betaald. Veelgebruikt in nieuws-publicaties. Eerste 2-3 alinea's vrij toegankelijk, dan paywall. isAccessibleForFree: true op NewsArticle, hasPart met isAccessibleForFree: false op specifieke sectie. cssSelector op die specifieke section.
Registration wall
Gratis maar account vereist
Gratis content achter account-vereiste. Geen geld nodig, wel registratie. Technisch GEEN paywall — Google ziet het anders. isAccessibleForFree: true (omdat gratis), maar gebruik wel hasPart als registration-wall content verbergt. Subtiel maar belangrijk verschil.

03 — faqVeelgestelde vragen

FAQ · 3 vragenklik om te openen
Zonder paywall-schema: krijg ik automatisch een cloaking-penalty?
Niet automatisch — Google's spam-detection is genuanceerder dan dat. Vijf observaties uit mijn praktijk met publishers. (1) Risico verschilt per implementatie. Sites die volledig dezelfde HTML aan Googlebot serveren als aan gebruikers (geen verschil) hebben minder risico. Sites die actief verschillende HTML serveren (cookie-detection + dynamic rendering) lopen real risico. (2) Detection methodes. Google's quality-systemen vergelijken: Googlebot crawl-content vs actual user-experience (vanuit Chrome User Experience Report data). Discrepancy boven threshold = manueel onderzoek. (3) Manual actions zeldzaam maar consistent. Wanneer Google ze opleidt, gebeurt het meestal voor herkende paywall-publishers die geen schema toepassen. Duurt 3-6 maanden om te herstellen na correct schema-implementatie. (4) Beter veilig dan sorry. Schema-implementatie kost één developer-dag. Niet implementeren riskeert ranking-verlies van weken/maanden. Risico-rendement extreem ongunstig zonder schema. (5) Praktisch advies: implementeer schema bij EERSTE deploy van paywall. Niet wachten tot je rankings dippen. Voor breder context zie herstel van een Google penalty.
Hoe zorg ik dat Google paywalled content nog steeds indexeert?
Indexering vereist dat Googlebot de volledige content kan zien — zelfs als gebruikers dat niet kunnen. Zes principes. (1) User-Agent detection voor Googlebot. Identificeer Googlebot via user-agent string, serveer dezelfde HTML als wat ingelogde abonnees zien. Dit is met paywall-schema EXPLICIET toegestaan door Google's guidelines (niet cloaking). (2) IP-verificatie. Naast user-agent: verifieer dat IP-adres ook werkelijk van Google's crawl-infrastructure komt. Voorkomt dat scrapers de bypass misbruiken. Google's IP-ranges publiek beschikbaar. (3) Geen full-content rendering achter login. Server-side serveren van complete content, niet via client-side JavaScript na login. JavaScript-rendering werkt minder betrouwbaar voor crawlers. (4) Test via URL Inspection. Google Search Console URL Inspection toont wat Googlebot zou zien. Volledige content moet zichtbaar zijn voor crawler. (5) Sitemap consistency. Paywalled URLs ook in sitemap.xml opnemen. Google's crawler heeft URL-discoveries nodig. (6) Lastmod accurate. Bij content-update lastmod in sitemap updaten — Google's recrawl-trigger. Voor breder context zie sitemap.xml maken.
Werkt paywall-schema ook voor video- en audio-content?
Ja, het schema-mechanisme ondersteunt verschillende media-types. Vijf principes. (1) VideoObject met isAccessibleForFree. Voor paywalled videos: gebruik VideoObject als content-type ipv NewsArticle. Velden zijn hetzelfde — isAccessibleForFree, hasPart, cssSelector. (2) Podcast / AudioObject. Voor podcasts: AudioObject met dezelfde paywall-fields. Geldt voor premium-only podcast episodes of specifieke segments. (3) Course-content. Online cursussen achter betaalmuur: Course-schema met isAccessibleForFree-array per CourseInstance. Specifiek voor educational platforms. (4) Content-mixes. Pagina met video + tekst, beide deels paywalled: gebruik @graph-structuur met meerdere @type-objects, elk met eigen isAccessibleForFree-status. (5) Belangrijk: technical preview blijft mogelijk. Audio/video kunnen 30-sec preview tonen + paywall voor rest. Schema's cssSelector kan tijdsegment niet markeren — dit moet via player-implementatie. Schema markeert alleen dat content niet vrij beschikbaar is, niet specifieke timestamps. Voor breder context zie podcast SEO.

Paywall-strategie voor jouw uitgeverij?

Volledige paywall-schema implementatie inclusief metered/hard/lead-in modellen. Met Googlebot-detection setup, user-agent IP-verificatie en monitoring van crawl-coverage in Search Console.

Plan een gesprek met Ralf →