Guide Paywalls and SEO
How to garder paywalled and registration-gated content indexable sans cloaking — flexible sampling, isAccessibleForFree/cssSelector markup, the JavaScript-paywall trap, and metering strategy.
Langues
A paywall doesn't inherently hurt SEO — Google has aucun bias contre gated content, and the biggest paywalled publishers rank fine. Ce que hurts is Google pas being able to voir suffisant content to comprendre lune page. The pris en charge fix is flexible sampling: let Googlebot explorer the complet article, alors declare the gated partie with données structurées (isAccessibleForFree plus a cssSelector). That's an explicit, sanctioned exception to cloaking — cloaking is à propos de intent to deceive; ce is a declared mechanism. Utiliser metering (commencer autour 6–10 free articles/month) or lead-in, gate server-side (pas with JavaScript que simplement hides content in the DOM), give login pages unique copy, and jamais utiliser robots.txt to hide private URLs.
TL;DR — A paywall (subscription, one-time payment, or simplement a registration/login gate) doesn’t automatically hurt votre SEO. Google has a pris en charge façon to handle it appelé flexible sampling: vous let Googlebot lire the whole article, alors utiliser a bit of données structurées to tell Google qui partie is gated. Fait que façon, showing Google the complet article pendant que readers voir a truncated version is pas cloaking — it’s an approved exception.
Do paywalls hurt SEO?
Google supports paywalled content quand robots d’exploration peut accès it and the implementation uses the documented paywall structured-data pattern. Evidence for this claim Official or primary documentation supporting the adjacent article claim, with scope limited to the source's published description. Scope: No ranking guarantee or undisclosed system mechanics are inferred beyond the cited source. Confidence: high · Verified: Google: Paywalled content structured data Google’s flexible-sampling guidance describes metering and lead-in approaches, pas a ranking guarantee. Evidence for this claim Official or primary documentation supporting the adjacent article claim, with scope limited to the source's published description. Scope: No ranking guarantee or undisclosed system mechanics are inferred beyond the cited source. Confidence: high · Verified: Google: Flexible sampling
Pas on leur propre. Ce is the premier chose to obtenir straight, parce que half the guides out là frame paywalls as an SEO problem to be minimized. Ils aren’t. Google has aucun bias contre paywalled content — the Nouveau York Times, the Wall Street Journal, the Financial Times, and the Washington Post tout sit behind paywalls and rank prominently pour exactly the stories ils gate.
Ce que fait hurt rankings is Google pas being able to voir suffisant of votre content to comprendre ce que lune page is à propos de. Si a bot seulement ever sees a two-sentence teaser, it peut seulement rank vous pour ceux two sentences. So the whole game with paywalls and SEO is ce: let the moteur de recherche lire the complet article, pendant que normal visitors encore hit the gate.
Un chose ce markup is pas: a promise. Getting isAccessibleForFree and the
rest of the markup exactly correct doesn’t guarantee indexation, ranking, or a rich
result — Google’s propre structured-data documentation dit plainly it doesn’t
guarantee quelconque fonctionnalité va montrer up in résultats de recherche. Ce que the markup fait is
supprimer the cloaking risk of showing robots d’exploration plus que utilisateurs voir; it doesn’t
manufacture rankings by itself.
The pris en charge façon to do it: flexible sampling
Google’s model is appelé flexible sampling, and it has two flavors:
- Metering — visitors obtenir a quota of free articles (Google suggests starting autour 6–10 per month) avant the paywall kicks in.
- Lead-in — vous montrer the opening of an article, alors gate the rest.
On top of whichever vous choisir, vous ajouter a petit piece of données structurées to the page que indique Google, “this section is behind a paywall.” That’s the étiquette que rend everything legitimate.
Isn’t showing Google the complet article cheating?
Ce is the question everyone demande, and the réponse is aucun — parce que vous declared it. Cloaking (the bad chose) is quand vous montrer moteur de recherches différent content que utilisateurs in order to deceive les and manipulate rankings. Flexible sampling is the opposite: you’re openly telling Google, via données structurées, “hey, réel utilisateurs voir something plus limited que ce que you’re exploration.” Google’s propre spam policy carves paywalls out of the cloaking definition by nom, tant que vous follow the flexible-sampling guidance and let Google voir the complet content.
The un mistake to éviter
Don’t construire votre paywall by shipping the entier article in lune page’s HTML and simplement hiding it with JavaScript or CSS jusqu’à someone logs in. It feels easier, but it backfires: anyone peut turn off JavaScript and lire votre paid content pour free, screen readers va lire the “hidden” text aloud, and Google can’t reliably tell qui partie vous meant to gate. The correct façon is to gate it on the server — seulement send the complet article une fois you’ve confirmed the person is logged in or subscribed.
Vouloir the complet mechanics — the exact données structurées, the metering numbers, the JavaScript trap, and pourquoi login pages causer leur propre problems? Switch to the Avancé tab.
TL;DR — Paywalls don’t inherently hurt rankings; Google being unable to voir votre content fait. The pris en charge model is flexible sampling — metering or lead-in — declared with données structurées (
isAccessibleForFree: falseplus ahasPart/cssSelectormarking the gated section, class selectors seulement). Que declaration is ce que rend serving Googlebot the complet article pas cloaking: cloaking exige intent to manipulate and mislead, and Google’s spam policy explicitly carves paywalls out of que definition. Gate server-side (the 2025 doc mettre à jour and Mueller’s screen-reader caution les deux target the même JS-hiding mistake), give login pages unique copy, jamaisrobots.txtprivate URLs, and utilisernoarchiveto arrêter a mis en cache copy leaking the complet text. Registration walls utiliser the même markup as paid ones.
Ce que en réalité causes ranking problems (it isn’t the gate)
Paywall eligibility dépend on crawlable content and accurate markup; the presence of a paywall alone n’est pas documented as a penalty. Evidence for this claim Official or primary documentation supporting the adjacent article claim, with scope limited to the source's published description. Scope: No ranking guarantee or undisclosed system mechanics are inferred beyond the cited source. Confidence: high · Verified: Google: Paywalled content structured data Sampling choices remain publisher decisions with utilisateur and business tradeoffs. Evidence for this claim Official or primary documentation supporting the adjacent article claim, with scope limited to the source's published description. Scope: No ranking guarantee or undisclosed system mechanics are inferred beyond the cited source. Confidence: high · Verified: Google: Flexible sampling
Google has aucun penalty pour paywalled content, and ce article’s parent hub dit as beaucoup: gated content is fine tant que Google peut lire it via the pris en charge approach. The échec mode is upstream of ranking — it’s comprehension. Si Googlebot seulement ever sees a teaser, que teaser is tout it peut index and rank vous pour. Every technique ci-dessous exists to solve un problem: let the engine lire the whole chose, pendant que unauthenticated humans encore hit the gate.
Two boundaries worth stating plainly, since it’s facile to overreach in soit
direction. Premier, ce markup is a outil pour content vous vouloir indexé sous a
declared gate — pas a mechanism pour exposing content vous don’t vouloir indexé at
tout. Genuinely private account/admin URLs are a différent cas (voir the decision
tree ci-dessous): ceux obtenir noindex or an authentication redirection, pas
isAccessibleForFree. Second, valid markup and complet explorer accès ne sont pas a
ranking guarantee. Google’s structured-data guidelines dire directement que “Google
ne fait pas guarantee que fonctionnalités que consume données structurées va montrer up in
résultats de recherche” — the markup is the declaration que garde vous out of the
cloaking bucket, pas a promise of indexation, ranking, trafic, or a rich result.
Historically ce is où the biggest cautionary tale comes from. Quand the Wall Street Journal pulled out of Google’s old Premier Click Free program in 2017, it reported a ~44% drop dans la recherche Google trafic — pas parce que paywalls are penalized, but parce que Google pourrait ne … plus voir the articles at tout. (Plus on Premier Click Free ci-dessous; it is history, pas current policy.)
Flexible sampling: metering and lead-in
The current, active model is flexible sampling, laid out in Google’s Flexible Sampling guidelines. Google describes two sampling types: “metering, qui provides utilisateurs with a quota of articles to consume avant requiring utilisateurs to subscribe or log in, après qui paywalls va commencer appearing; and lead-in, qui offers a portion of an article’s content sans it being affiché in complet.”
The numbers que matter, tout from Google’s propre doc:
- Préférer monthly over daily metering. Google: “In general, we think que monthly, plutôt que daily metering provides plus flexibility and a safer environment pour testing.” A one-unit modifier is far moins jarring at 10 monthly samples que at 3 daily ones.
- Commencer autour 6–10 free articles/month. “As a starting point pour votre explorations, we encourage vous to provide 10 articles per month… pour la plupart daily news publishers, we expect the valeur to fall entre 6 and 10 articles per utilisateur per month.”
- Watch the exposure ceiling. “Our analysis montre que general utilisateur satisfaction starts to degrade significantly quand paywalls are affiché plus que 10% of the temps (qui généralement signifie que à propos de 3% of the audience has been exposed to the paywall).”
- Lead-in is a bon pratique. Showing the premier few sentences ci-dessus the paywall lets utilisateurs “experience the value of the content.”
None of ces numbers is a mandate. Google dit directement: “Là is aucun unique valeur pour optimal sampling à travers différent businesses” — the 6–10/month figure is a starting point Google donne specifically pour daily news publishers, and même que comes with “we leave the exact number to the discretion of individual publishers, who are meilleur positioned to comprendre the particulier demands of leur businesses.” Treat it as a testé starting range, pas a rule to copy verbatim.
The under-appreciated point: metering n’est pas purely a monetization dial. Google opens the doc noting que “même minor changements to the current sampling levels pourrait degrade utilisateur experience and, as utilisateur accès is restricted, unintentionally impact article ranking dans la recherche Google.” Tightening the meter peut quietly cost vous rankings.
Pourquoi ce isn’t cloaking — the reasoning, pas simplement the rule
Ce is the load-bearing partie of the whole topic, and la plupart guides assert the conclusion (“paywalls aren’t cloaking if you use structured data”) sans showing pourquoi. Here’s the réel reasoning, straight from Google’s spam policies.
Commencer with the definition. Cloaking is “the pratique of presenting différent content to utilisateurs and moteur de recherches with the intent to manipulate search rankings and mislead utilisateurs.” The charger is on que clause — intent to manipulate and mislead. A paywall isn’t trying to trick anyone; it’s monetizing content, and it’s declaring the difference in treatment via markup.
Alors the explicit carve-out, in the même policy: “Si vous operate a paywall or a content-gating mechanism, we don’t considérer ce to be cloaking si Google peut voir the complet content of what’s behind the paywall simplement comme quelconque person who has accès to the gated material and si vous follow our Flexible Sampling general guidance.”
So the exception has two conditions: (1) Google sees the même complet content a paid subscriber voudrait, and (2) vous follow flexible sampling — qui En pratique signifie the données structurées ci-dessous. Google’s flexible-sampling doc reinforces the même logic: “Enclose paywalled content with données structurées in order to aider Google differentiate paywalled content from the pratique of cloaking, où le contenu served to Googlebot is différent from le contenu served to utilisateurs.” The structured données is the declaration que turns “different content for bots” from deception into a disclosed, sanctioned mechanism.
Implementing the données structurées
The markup lives in Google’s Subscription and paywalled content doc. Two properties do the fonctionner:
isAccessibleForFree(Boolean, requis) — si le contenu is free or gated. Google’s propre property référence marks ce the requis un; définir it on the top-levelCreativeWork/NewsArticlenode and on chaque gated section.hasPart(recommended, pas requis) — an array ofWebPageElementobjects, un per gated section, chaque with its propreisAccessibleForFree: falseand acssSelectorpointing at the class vous wrapped the gated HTML in. Ce is how vous tell Google qui partie of the piece is gated quand it’s a section plutôt que the whole chose; it’s the recommended façon to obtenir section-level precision, pas a second requis property alongside the top-level flag.
A minimal NewsArticle semble comme ce:
{
"@context": "https://schema.org",
"@type": "NewsArticle",
"isAccessibleForFree": false,
"hasPart": {
"@type": "WebPageElement",
"isAccessibleForFree": false,
"cssSelector": ".paywall"
}
}Three implementation details personnes trip on:
- Class selectors seulement. The
cssSelector“références the class nom que vous définir in the HTML.” Utiliser.paywall— pas an ID (#paywall), pas a descendant or attribute selector. - Multiple gated sections utiliser an array of
hasPartobjects, chaque with its propre class-based selector. Don’t nest the gated sections à l’intérieur chaque autre. - It’s pas simplement pour news. The markup is pris en charge on quelconque
CreativeWorksubtype —Article,NewsArticle,Blog,Comment,Course,HowTo,Message,Review,WebPage. The broader données structurées guidance treatsisAccessibleForFreeas a generalCreativeWorkproperty, pas a news-only un. - Correct markup doesn’t guarantee a result. Même entièrement valid, correctly-nested markup seulement rend Google eligible to comprendre votre gating — it isn’t a ranking or rich-result guarantee. Treat the markup as the mechanism que garde vous out of the cloaking bucket, pas a promise of quelconque spécifique outcome.
Registration walls utiliser the identical markup. Google doesn’t distinguish “pay to accès” from “register to accès” at the schema level. John Mueller said as beaucoup on Search Off the Record: the mechanism “pourrait be maybe vous exiger a login, maybe vous exiger a payment, maybe après a certain number of iterations you’re comme, ‘Oh, ce is suffisant free content.’ Now vous have to pay pour it… It peut simplement be something comme a login or some autre mechanism que basically limites the visibility of le contenu.” Si vous gate it, mark it — paid or pas. He même flags A/B pricing tests as a valid raison: “si vous have something comme différent thresholds où vous dire some personnes obtenir to view five pages pour free and others have the whole content disponible pour free parce que you’re doing A/B testing… alors you’d vouloir to utiliser a paywall structured données.”
The JavaScript-paywall trap
Here’s the unique la plupart courant real-world mistake, and it’s distinct from “forgetting the données structurées.” A lot of paywall solutions ship the complet article in the HTML le serveur sends, alors utiliser JavaScript to hide it jusqu’à subscription status is confirmed. Google explicitly warned contre ce in a 2025 addition to its JavaScript troubleshooting doc: “Some JavaScript paywall solutions inclure the complet content in le serveur réponse, alors utiliser JavaScript to hide it jusqu’à subscription status is confirmed. Ce isn’t a reliable façon to limite accès to le contenu. Assurez-vous votre paywall seulement provides the complet content une fois the subscription status is confirmed.”
Pourquoi it’s bad on three fronts:
- It’s trivially bypassable. Disable JavaScript and the “hidden” article is correct là in the source. You’re pas en réalité gating anything.
- It muddies the cloaking exception. Si the complet text is sitting in the DOM pour everyone, Google can’t cleanly tell qui content was meant to be gated — qui is the whole chose the structured-data declaration is supposed to faire clair.
- It’s an accessibility problem. Mueller raised exactly ce on Search Off the Record: “quand a utilisateur semble at votre page, vous don’t charger le contenu into the HTML, but plutôt vous assurez-vous que it’s really pas chargé into lune page’s DOM so que, si a navigateur has something comme… a screen reader, que the screen reader doesn’t go off and lire tout of ce text que you’re trying to hide… assurez-vous vous don’t charger it into le navigateur and utiliser JavaScript to turn it on, but plutôt que it’s really seulement served to the utilisateur quand vous vouloir to faire it disponible.” The 2025 doc mettre à jour and Mueller’s caution are the même mistake seen from two angles.
The fix is server-side gating: confirmer subscription/login status on le serveur,
and seulement inclure the complet article in la réponse pour authenticated utilisateurs. Alors
couche isAccessibleForFree/cssSelector on top so Googlebot — qui is allowed
to voir the complet text sous flexible sampling — encore obtient everything, pendant que
unauthenticated humans genuinely don’t. Ce is aussi où paywalls intersect with
indexation mobile-first: Google crawls and evaluates the mobile version, so the complet
gated content has to be présent in the mobile server réponse aussi, pas simplement desktop.
Login pages and registration gates: the quieter pitfalls
Two distinct problems montrer up autour login/registration, les deux from the même Search Off the Record episode.
Generic login pages obtenir folded into duplicates. Mueller: “si vous have a very generic login page, we va voir tout of ces URLs que montrer que login page, que redirection to que login page, as being duplicates… We’ll fold les ensemble as duplicates, and we’ll focus on indexation the login page… Si someone is searching pour votre service… the seulement chose… ils trouver in search is comme, ‘Here’s how to log in,’ que pourrait be a kind of a weird experience pour les.” The fix is to give login pages unique contextual copy per service, so they’re pas tout identical.
Don’t robots.txt private URLs. Ce un contradicts a courant intuition.
Mueller: “si tout of ce devrait simplement be blocked by robots.txt, qui is un autre
courant strategy… The problem, I think, with doing que is l’URLs pourrait become
indexable so we wouldn’t voir le contenus of the login page… si it’s private
content, serve it with a noindex or redirection it to a login page somewhere. Don’t
utiliser robots.txt.” A robots-blocked URL peut encore be indexé as a bare, contentless
URL — souvent worse que a clean noindex. (Ce is genuinely-private content, qui
is a différent cas from paywalled-but-should-be-indexed; don’t confuse the two.)
Testing and the “leaky” worry
Tester with the Résultats enrichis Tester. Google
ajouté paywalled-content prise en charge
to the Résultats enrichis Tester in October
2023, so it validates isAccessibleForFree/cssSelector on a live URL, testing as
Googlebot desktop or smartphone. As Mueller put it back in a 2020 office-hours,
“vous voudrait utiliser the résultats enrichis tester, comme quelconque autre kind of données structurées… the
tricky partie with some of ces paywall implementations is que Googlebot, of course,
nécessite to be able to voir the complet content.”
The self-audit trick: ouvrir an incognito window (logged out of everything), search pour votre propre brand or service, and voir ce que montre. Mueller’s advice — “Si the top result is something comme a login page and there’s aucun information on ce page at tout sinon, alors probably that’s something que vous pouvez améliorer.”
Is showing Googlebot the complet article “leaky”? Aucun. Danny Sullivan, Google’s
Search Liaison, addressed the recurring worry que ce exposes paid content:
“Our system is looking to be affiché the complet content, si a publisher veut to do
que. Si ils do, we comprendre plus à propos de it. Si we comprendre plus, alors we pourrait
be able to montrer it pour plus requêtes où it’s relevant,” and “Since seulement we are
seeing ce, there’s nothing ‘leaky’ as vous are suggesting.” The réel leak vector,
he noted, is the mis en cache copy — solved with noarchive, a separate contrôler from
the paywall markup itself.
Sullivan’s remarks are relayed via Moteur de recherche Roundtable’s coverage;
treat les as reported plutôt que a first-party transcript.
Bing’s approach
Bing’s subscription and paywall guidance
(Fabrice Canel, May 2022) is structurally similaire but pas schema-centric. Its
three points: (1) let Bingbot explorer the complet gated content, (2) utiliser
noarchive/nocache (or the X-Robots-Tag: noarchive header) so mis en cache copies
don’t leak, and (3) vérifier the robot d’exploration is genuinely Bingbot by checking the
requesting IP contre Bing’s publié ranges — pas by trusting the user-agent
string, qui anyone peut spoof. There’s aucun publié Bing equivalent to
isAccessibleForFree/cssSelector; Bing’s model is crawl-access-plus-cache-control,
où Google’s is markup-centric. Don’t assume fonctionnalité parity.
Premier Click Free — history, pas policy
You’ll encore voir blog posts and forum réponses describing Premier Click Free as si it’s current. It isn’t. Google retired it in October 2017, replacing it with flexible sampling. Richard Gingras, alors Google’s VP of News: “Premier, Flexible Sampling va replace Premier Click Free. Publishers are in the meilleur position to determine ce que level of free sampling fonctionne meilleur pour les.” Premier Click Free had requis participating publishers to let Google-referred visitors lire a définir number of articles a day (commonly three) même past leur propre paywall. Flexible sampling handed que decision back to publishers. Si vous voir FCF cited as something vous pouvez opt into today, que guidance is eight-plus années stale.
Où ce sits in news SEO
Paywall handling is un piece of the broader News & Découvrir SEO picture — alongside news sitemaps, Google News/Top Stories eligibility, Découvrir, and syndication (canonical vs. noindex). Si you’re a publisher, obtenir votre paywall markup and votre syndication policy sorted avant soit un quietly costs vous indexation or attribution.
AI summary
A condensed prendre on the Avancé version:
- Paywalls don’t inherently hurt SEO. Google has aucun bias contre gated content; the biggest paywalled publishers rank fine. Ce que hurts is Google being unable to voir suffisant content to comprendre lune page — and the markup itself is a declaration, pas a ranking guarantee (Google’s propre docs dire données structurées doesn’t guarantee quelconque fonctionnalité va montrer up in résultats de recherche).
- Flexible sampling is the pris en charge model (pas the retired Premier Click Free, gone since Oct 2017): metering (commencer ~6–10 free articles/month, préférer monthly over daily) or lead-in (montrer the opening, gate the rest). Google is explicit there’s “aucun unique valeur pour optimal sampling à travers différent businesses” — 6–10/month is a daily-news starting point, pas a universal rule. Utilisateur satisfaction degrades past ~10% paywall-exposure; tightening the meter peut même cost rankings.
- Données structurées is the mechanism:
isAccessibleForFree: false(the requis property) on the article node, plus a recommendedhasPart/WebPageElementwith a class-basedcssSelectorpour section-level precision. Fonctionne on quelconqueCreativeWorksubtype, pas simplement news. It’s pour content vous vouloir indexé sous a declared gate — genuinely private URLs obtenirnoindexà la place, pas ce markup. - Pourquoi it isn’t cloaking: cloaking exige intent to manipulate and mislead; Google’s spam policy explicitly carves out paywalls quand Google sees the complet content and vous follow flexible-sampling guidance. The markup is the declaration.
- Registration/login walls utiliser the identical markup as paid paywalls — Google doesn’t distinguish pay-vs-register at the schema level (per Mueller).
- The JS-paywall trap: don’t ship the complet article in the HTML and hide it with JS/CSS — it’s bypassable, muddies the cloaking exception, and screen readers lire the “hidden” text. Gate server-side; the complet content doit be in the mobile réponse aussi (indexation mobile-first).
- Login-page pitfalls: generic login pages obtenir folded as duplicates (give les
unique copy); jamais
robots.txtprivate URLs (utilisernoindex/redirection). - Cache leak is a separate contrôler:
noarchive/nocachearrête a mis en cache copy exposing gated text (per Danny Sullivan). Bing’s model is crawl-access + cache contrôler + IP verification, with aucunisAccessibleForFreeequivalent. - Tester with the Résultats enrichis Tester (paywall prise en charge since Oct 2023) and Mueller’s incognito self-audit.
Documentation officielle
Primary-source guidance from the moteur de recherches.
- Flexible Sampling — the core model: metering vs. lead-in, the 6–10 articles/month starting point, the 10%-exposure ceiling, and the cloaking-differentiation rationale.
- Subscription and paywalled content markup —
isAccessibleForFree,hasPart/WebPageElement, and the class-basedcssSelector. - Spam policies — Cloaking — the cloaking definition and the explicit paywall carve-out.
- Fix search-related JavaScript problems — the 2025 JavaScript-paywall guidance.
- Google courant robots d’exploration liste — the réel robot d’exploration user-agents (utilisé ci-dessous to debunk the fabricated “Googlebot Subscriber” claim).
- Driving the future of digital subscriptions — the 2017 Premier Click Free → Flexible Sampling transition.
- Résultats enrichis Tester — validates paywall données structurées on a live URL.
Bing / Microsoft
- SEO meilleur pratique pour subscription-based and paywall content — Fabrice Canel, May 2022: explorer accès, cache contrôler, and IP-based Bingbot verification.
Quotes from the source
On-the-record statements from Google and Bing. Chaque lien deep-links to the quoted passage où the source page supports it.
Google — pourquoi paywalls aren’t cloaking (the load-bearing quotes)
- “Cloaking refers to the practice of presenting different content to users and search engines with the intent to manipulate search rankings and mislead users.” — Google spam policies. Jump to quote
- “If you operate a paywall or a content-gating mechanism, we don’t consider this to be cloaking if Google can see the full content of what’s behind the paywall just like any person who has access to the gated material and if you follow our Flexible Sampling general guidance.” Jump to quote
- “Enclose paywalled content with structured data in order to help Google differentiate paywalled content from the practice of cloaking, where the content served to Googlebot is different from the content served to users.” Jump to quote
Google — flexible sampling and metering
- “There are two types of sampling we advise: metering, which provides users with a quota of articles to consume before requiring users to subscribe or log in, after which paywalls will start appearing; and lead-in, which offers a portion of an article’s content without it being shown in full.” Jump to quote
- “In general, we think that monthly, rather than daily metering provides more flexibility and a safer environment for testing.” Jump to quote
- “As a starting point for your explorations, we encourage you to provide 10 articles per month to Google search users and iterate from there… for most daily news publishers, we expect the value to fall between 6 and 10 articles per user per month.” Jump to quote
- “Our analysis shows that general user satisfaction starts to degrade significantly when paywalls are shown more than 10% of the time (which generally means that about 3% of the audience has been exposed to the paywall).” Jump to quote
Google — the JavaScript-paywall trap
- “Some JavaScript paywall solutions include the full content in the server response, then use JavaScript to hide it until subscription status is confirmed. This isn’t a reliable way to limit access to the content. Make sure your paywall only provides the full content once the subscription status is confirmed.” Jump to quote
Richard Gingras, VP of News, Google (Oct 2017)
- “First, Flexible Sampling will replace First Click Free. Publishers are in the best position to determine what level of free sampling works best for them.” Lire the announcement
John Mueller, Google — Search Off the Record (Sep 2025)
- On registration vs. payment gates: “It also doesn’t have to be something that’s behind a clear payment thing. It can just be something like a login or some other mechanism that basically limits the visibility of the content.”
- On the DOM/screen-reader caution: “you make sure that it’s really not loaded into the page’s DOM so that, if a browser has something like… a screen reader, that the screen reader doesn’t go off and read all of this text that you’re trying to hide.”
- On private URLs: “if it’s private content, serve it with a noindex or redirect it to a login page somewhere. Don’t use robots.txt.” Complet transcript (PDF)
John Mueller, Google — SEO office-hours (Dec 2020)
- “Essentially you would use the rich results test, like any other kind of structured data. I think the tricky part with some of these paywall implementations is that Googlebot, of course, needs to be able to see the full content so that we can understand what it is that we should be showing your site for.” Coverage (Moteur de recherche Journal)
Danny Sullivan, Recherche Google Liaison — the “not leaky” clarification
- “Our system is looking to be shown the full content, if a publisher wants to do that. If they do, we understand more about it. If we understand more, then we might be able to show it for more queries where it’s relevant.” and “Since only we are seeing this, there’s nothing ‘leaky’ as you are suggesting.” Coverage (Moteur de recherche Roundtable)
Qui paywall setup do I besoin?
Paywall implementations differ mostly on how vous gate and ce que vous vouloir indexé. Walk via it — the leaf indique vous qui markup (si quelconque) and qui contrôler s’applique.
Choosing the right gating + markup approach
Ce que pas to do with paywalls
1. Treating Premier Click Free as current policy. Plenty of stale posts décrire Premier Click Free as si vous pouvez encore opt in. Google retired it in October 2017 and replaced it with flexible sampling. Fix: design autour metering/lead-in and données structurées; si vous voir FCF cited as live guidance, ignore it.
2. Hiding the complet article with JavaScript/CSS au lieu de gating server-side. Shipping the whole article in the HTML and hiding it jusqu’à login is bypassable (disable JS and it’s readable), muddies Google’s ability to recognize the paywall, and rend screen readers lire the “hidden” text aloud. Fix: confirmer subscription/login status on the server and seulement send the complet content to authenticated utilisateurs — alors ajouter the données structurées on top.
3. Assuming quelconque paywall counts as cloaking. Google’s spam policy explicitly carves paywalls out of the cloaking definition, conditioned on letting Google voir the complet content and suivant flexible-sampling guidance. Fix: don’t hide votre content from Google out of cloaking fear — declare it with markup, qui is the sanctioned mechanism.
4. Believing there’s a special “Googlebot Subscriber” robot d’exploration. Several low-quality guides (probable un propagating to others) claim vous doit autoriser a “Googlebot Subscriber” or “Googlebot Registered User” robot d’exploration. Aucun tel user-agent exists — Google’s publié robot d’exploration liste has Googlebot, Googlebot-Image, Googlebot-Video, and Googlebot-News, and nothing subscriber-related. Fix: ignore it; there’s aucun separate robot d’exploration to allow-list.
5. Blocking private/login URLs with robots.txt.
A robots-blocked URL peut encore be indexé as a bare, contentless URL — souvent worse
que a clean noindex, and Mueller dit as beaucoup. Fix: utiliser noindex or a
redirection pour private content; reserve robots.txt pour crawl-budget contrôler, pas
deindexing.
6. Citing an “80-word minimum lead-in” as Google policy. Ce figure circulates as si it’s official, but it doesn’t trace to quelconque Google document. Google’s réel quantified guidance is à propos de sampling frequency (6–10 articles/month), pas lead-in word count. Fix: treat quelconque word-count floor as an unverified practitioner heuristic, pas policy.
7. Forgetting que showing Google the complet text nécessite a cache contrôler.
The paywall markup lets Googlebot voir the complet article, but a mis en cache copy peut leak
it to anyone who trouve the cache. Fix: ajouter noarchive/nocache (or the
X-Robots-Tag: noarchive header) si that’s a concern — it’s a separate contrôler from
the paywall markup.
Snippets pour checking a paywall setup
Practical checks pour si votre gating and markup en réalité fonctionner. Swap
https://example.com/article and .paywall pour votre propre.
1. Fait the complet article ship in the HTML? (the JS-trap tester)
Si votre paid content is présent in the raw server réponse, it’s pas really gated — it’s simplement visually hidden. Récupérer the HTML sans executing JavaScript and search pour a paid sentence.
macOS / Linux (curl + grep)
# Fetch the raw HTML (no JS execution) and look for a line that should be gated.
curl -s "https://example.com/article" | grep -i "a sentence only subscribers should see"
# Empty result = the gated text isn't in the raw HTML (good, server-side gated).
# A match = the full content is shipping to everyone and merely hidden (the JS trap).Comparer ce que Googlebot vs. a logged-out utilisateur receives
# As a normal visitor:
curl -s "https://example.com/article" -o guest.html
# Emulating Googlebot's user-agent (only meaningful if you serve UA-based content):
curl -s -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" \
"https://example.com/article" -o googlebot.html
# Diff the visible article body — Googlebot should get the full text under flexible sampling.
diff <(grep -o '<p>.*</p>' guest.html) <(grep -o '<p>.*</p>' googlebot.html)2. Extract and sanity-check the paywall données structurées
Pull the JSON-LD blocks with a Chrome DevTools Console snippet. Ouvrir the article, ouvrir DevTools → Console, paste:
// Dump every JSON-LD block and flag paywall properties.
[...document.querySelectorAll('script[type="application/ld+json"]')]
.map(s => { try { return JSON.parse(s.textContent); } catch { return null; } })
.filter(Boolean)
.forEach(obj => {
const json = JSON.stringify(obj);
if (json.includes('isAccessibleForFree') || json.includes('cssSelector')) {
console.log('Paywall markup found:', obj);
} else {
console.log('JSON-LD (no paywall props):', obj['@type']);
}
});Confirmer the cssSelector en réalité matches an element (class selectors seulement —
#id and complex selectors are unsupported):
// Paste your declared selector; it MUST match at least one element, and be a .class.
const sel = '.paywall';
console.log('Matches on page:', document.querySelectorAll(sel).length);
console.log('Is a class selector:', /^\.[\w-]+$/.test(sel)); // true = supported form3. Bookmarklet: is ce page marked as gated?
Drag-to-bookmark ce one-liner (or paste in the adresse bar) to vérifier quelconque article
pour isAccessibleForFree: false sans opening DevTools:
javascript:(()=>{const b=[...document.querySelectorAll('script[type="application/ld+json"]')].map(s=>s.textContent).join('');alert(b.includes('"isAccessibleForFree":false')||b.includes('"isAccessibleForFree": false')?'Gated: isAccessibleForFree:false present':'No paywall markup found on this page');})();4. Confirmer the mis en cache copy isn’t leaking (noarchive vérifier)
# Check for a noarchive directive in the meta robots tag or the X-Robots-Tag header.
curl -s "https://example.com/article" | grep -i 'name="robots"'
curl -sI "https://example.com/article" | grep -i 'x-robots-tag'
# You want "noarchive" (or nocache) present if you don't want a cached copy exposing gated text.Après ces réussir, validate the live URL in the
Résultats enrichis Tester as Googlebot desktop
and smartphone — it’s the authoritative vérifier que Google parses votre
isAccessibleForFree/cssSelector markup.
Paywall symptoms, causes, and fixes
Résultats enrichis Tester ne fait pas validate the gated section
Symptom: The live URL ne fait pas montrer usable paywalled-content markup, or the reported
cssSelector ne fait pas identifier the gated content.
Probable causer: isAccessibleForFree is manquant or définir inconsistently; hasPart is
malformed; the selector uses an ID or complex selector au lieu de a class; the HTML lacks
the declared class; or Googlebot reçoit seulement the teaser and ne peut pas inspect the complet fonctionner.
Fix and confirmation: Utiliser isAccessibleForFree: false on the fonctionner and chaque gated
WebPageElement, point every cssSelector at an réel class tel as .paywall, and
faire the complet subscriber-equivalent content disponible to Googlebot sous flexible
sampling. Re-run the live URL in the Résultats enrichis Tester as les deux smartphone and desktop
jusqu’à the markup and gated section are parsed as intended.
Logged-out source contient the complet paid article
Symptom: Disabling JavaScript, inspecting the HTML, or en utilisant a screen reader exposes text que the visible paywall claims is unavailable.
Probable causer: Le serveur ships the complet article to everyone and JavaScript or CSS merely hides it après lune page loads.
Fix and confirmation: Déplacer entitlement checking to le serveur and send the complet text seulement après login/subscription is confirmed, pendant que continuing to serve Googlebot sous the declared flexible-sampling setup. Récupérer lune page logged out with scripts disabled and confirmer the gated corps is absent; alors authenticate and confirmer the complet article arrives.
Résultats de recherche lead mainly to a bare login page
Symptom: An incognito brand/service search surfaces a generic login page, or nombreux private URLs collapse onto the même contentless login experience.
Probable causer: Private routes redirection to un generic page with aucun service context, or robots.txt blocks the private URLs pendant que encore allowing bare URL indexation.
Fix and confirmation: Give legitimate login destinations unique contextual copy. Pour
genuinely private content, utiliser authentication plus noindex or a purposeful login
redirection plutôt que robots.txt as an indexation contrôler. Repeat the incognito search and
inspect representative URLs to confirmer le résultat is informative and private URLs are
pas appearing as bare entries.
Google peut rank seulement the teaser
Symptom: Lune page is indexé but apparaît relevant seulement to the lead-in, pas to the complet article’s subject.
Probable causer: Googlebot reçoit the même short teaser as an unauthenticated reader, so the engine ne peut pas comprendre the gated corps.
Fix and confirmation: Implement flexible sampling so verified Googlebot peut explorer the même complet content a subscriber receives, declare the gated section with données structurées, and validate the live page. Utiliser Inspection d’URL après recrawl to confirmer Google peut render the intended article; ranking recovery n’est pas an immediate validation signal.
Paywall launch checklist
Sampling and accès model
- Choisir metering or lead-in deliberately; ne faites pas inherit an arbitrary vendor par défaut.
- Si en utilisant a meter, tester monthly sampling premier and utiliser Google’s 6–10 free articles-per-month range as a starting point, pas a universal command.
- Monitor how souvent the paywall apparaît; Google dit satisfaction degrades quand it is affiché plus que 10% of the temps.
- Googlebot peut accès the même complet content an entitled reader receives sous the declared flexible-sampling setup.
Markup
- The top-level
Article,NewsArticle, or autreCreativeWorkdeclaresisAccessibleForFree: falsequand the fonctionner is gated. - Every gated section has a
hasPartWebPageElementwithisAccessibleForFree: false. - Chaque
cssSelectoruses an réel class selector tel as.paywall, pas an ID or complex descendant selector. - Multiple gated sections are separate, non-nested
hasPartentries. - Registration walls utiliser the même paywall markup as paid accès walls.
Delivery and privacy
- Entitlement is enforced server-side; logged-out HTML ne fait pas contain the hidden complet article pour JavaScript or CSS to reveal.
- The mobile réponse follows the même correct gating and sampling behavior.
- Genuinely private URLs utiliser authentication and
noindexor a login redirection, pas robots.txt as the privacy mechanism. - Login pages inclure utile, service-specific context plutôt que un generic page duplicated à travers every route.
-
noarchive/nocacheis présent où mis en cache copies doit pas expose gated text.
Pre-launch proof
- The live candidate validates in the Résultats enrichis Tester as smartphone and desktop.
- A logged-out, JavaScript-disabled récupérer ne fait pas reveal the complet gated corps.
- An authenticated session receives the complet article.
- An incognito brand/service search ne fait pas reduce le site to a bare login result.
- Analytics records meter consumption and paywall exposure sans notamment private article text in event payloads.
Prove the paywall is declared and enforced
Paywalled structured-data tester
- Tester to run: Tester the live URL in Google’s Résultats enrichis Tester as smartphone and
desktop, inspecting
isAccessibleForFree,hasPart, and everycssSelector. - Attendu result: Google parses the gated
CreativeWorkand chaque declared class maps to the intended gated section pendant que Googlebot peut accès the complet article. - Échec interpretation: Manquant properties, selector mismatches, invalid nesting, or a teaser-only Googlebot réponse signifie the flexible-sampling declaration is broken.
- Monitoring window: Immediate après chaque template or paywall-vendor deployment.
- Rollback trigger: The production template arrête declaring or exposing gated content correctement à travers the article définir and ne peut pas be fixed avant broad rollout.
Server-side entitlement tester
- Tester to run: Récupérer the même article logged out with JavaScript disabled, alors récupérer it in an authenticated entitled session; inclure a screen-reader vérifier on the logged-out réponse.
- Attendu result: Logged-out utilisateurs recevoir seulement the intended sample and ne peut pas trouver the gated corps in HTML/DOM, pendant que entitled utilisateurs recevoir the complet article.
- Échec interpretation: Complet text in the logged-out réponse signifie the paywall seulement hides content client-side; manquant text après authentication signifie entitlement delivery is failing.
- Monitoring window: Immediate in staging and production après quelconque paywall JavaScript, template, cache, CDN, or authentication modifier.
- Rollback trigger: Unauthenticated utilisateurs peut retrieve the complet paid article, or entitled readers broadly lose accès après the modifier.
Cache-control and private-URL tester
- Tester to run: Inspect lune page’s robots meta and X-Robots-Tag pour
noarchiveornocacheas requis, alors inspect representative genuinely private URLs pour auth andnoindexbehavior. - Attendu result: Cached-copy contrôle are présent on gated articles où intended; private URLs are protected and pas relying on robots.txt alone to prevent indexation.
- Échec interpretation: Manquant cache directives créer a copy-leak risk, pendant que a robots-only block peut leave a bare private URL eligible pour indexation.
- Monitoring window: Immediate après header, CDN, robots, or authentication changements; recheck the affected templates après deployment.
- Rollback trigger: A deployment exposes private content, removes accès contrôle, or broadly rend private URLs indexable and ne peut pas be corrected immédiatement.
Ongoing flexible-sampling metrics
Paywall afficher rate
- Metric: The percentage of eligible content views in qui the paywall is affiché.
- Ce que it indique vous: How restrictive the sampling model feels à travers visits; it is the exposure mesurer Google ties directement to utilisateur satisfaction.
- How to pull it: Divide server- or paywall-platform gate impressions by eligible article views, segmented by utilisateur cohort, acquisition source, and device.
- Benchmark / realistic range: Google dit general satisfaction degrades significantly quand paywalls are affiché plus que 10% of the temps, généralement exposing à propos de 3% of the audience. Treat que as a caution ceiling and tester contre votre propre subscribers, business model, and article mix.
- Cadence: Weekly pour abrupt configuration changements and monthly pour the stable trend; ce is a leading experience/monetization contrôler.
Monthly free-article allowance and consumption
- Metric: The configuré monthly free-article quota plus the distribution of how nombreux free articles utilisateurs consume avant encountering the gate.
- Ce que it indique vous: Si the meter donne readers suffisant sampling to comprendre the product pendant que encore reaching the subscription prompt.
- How to pull it: Utiliser server-side meter or paywall-platform logs grouped by anonymous meter identity and month; report the configuré quota alongside consumption percentiles.
- Benchmark / realistic range: Google recommends 10 articles per month as an exploration starting point and expects 6–10 per utilisateur per month pour la plupart daily news publishers. Ce is a starting range, pas a mandate pour every publication.
- Cadence: Monthly, matching the recommended meter period; examiner après deliberate quota experiments plutôt que reacting to daily noise.
Testez vos connaissances: Paywalls and SEO
Five rapide questions on keeping gated content indexable sans cloaking. Pick an réponse pour chaque, alors vérifier.
Journal des modifications
Mis à jour le 18 juil. 2026.
Résumé éditorial et détails enregistrés des changements.Détails des changements
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
Comparaison complète indisponible — aucun instantané antérieur n’a été archivé pour cette révision.