I was instructed to implement a "filter" in some pages on a corporate website, the filter hides the page content and ask for a valid email to continue reading. Sort of an opt-in but forced, if visitor does not enter an email (that will be validated in real time) there will be no further changes, the visitor must click on a link to exit. After researchig a little, I come to the conclusion that crawlers will not read/index these pages so all the good SEO will be lost. My question is: if the page is shown in full, for some seconds, before the opt-in form displays, the crawlers (Google) will see this page as a public, readable page?

I asked this same question to support @OptinMonster, the developers of the software, according to them, content that is hidden by CSS is readable by Google. Other sources claim the opposite, indeed this kind of content can be "penalized".

3 Answers 3


However you want handle it, whether via CSS or JS; When you view the source code of the page, as long as all your markup is there, Google will crawl the content.

We have a schema for this - So you'll want to add structured data for to denote subscription/paywalled content. We need to semantically bind the paywall with the content on page. To do this use schema.org's cssSelector property.

    <title>Article headline</title>
    <script type="application/ld+json">
      "@context": "https://schema.org",
      "@type": "NewsArticle",
      "mainEntityOfPage": {
        "@type": "WebPage",
        "@id": "https://example.org/article"
      "headline": "Article headline",
      "image": "https://example.org/thumbnail1.jpg",
      "datePublished": "2025-02-05T08:00:00+08:00",
      "dateModified": "2025-02-05T09:20:00+08:00",
      "author": {
        "@type": "Person",
        "name": "John Doe"
      "publisher": {
         "name": "The Exemplary Times",
         "@type": "Organization",
         "logo": {
            "@type": "ImageObject",
            "url": "https://example.org/logo.jpg"
      "description": "A most wonderful article",
      "isAccessibleForFree": "False",
        "@type": "WebPageElement",
        "isAccessibleForFree": "False",
        "cssSelector" : ".paywall"
    <div class="non-paywall">
      Non-Paywalled Content
    <div class="paywall">
      Paywalled Content

Few guidelines here from Google:

  • 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 the cssSelector property.

So then this is your markup which includes the div.paywall we set in our JSON-LD earlier.

<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>

Search engine Google will not punish for hiding content with JS, but put in a separate queue for indexing these pages and the ranking will be taken into account differently, rather worse(


This will hurt SEO. Googlebot itself runs JavaScript for several seconds after the page loads. If Googlebot can't see the content, it won't index any of it.

Even if there is a long enough delay before the hide for Googlebot to index the content, Google will notice that users are annoyed and click back to the search results more than for other similar sites. Usability matters a lot for SEO and requiring registration to view content is not user-friendly.

If Google discovers that you require users to register to view any content, your site will likely get banned from the search results altogether. Google allows content behind a paywall or registration wall to get indexed, but only if it complies with their flexible sampling program. To implement this correctly you would have to allow users to view a few pages per month without registering and only require registration after that. You would also need to use structured data for subscription content markup in your pages to tell Google that your content is behind a registration wall.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.