Search Central LiveDeep Dive Europe 2026

Knowledge base v2.13.0 · Community edition · data through 2 October 2026

Topic · Rendering and JavaScript

Lazy loading and content behind interactions

Day 2 confirms Day 1's point that Google's crawlers do not click and adds that they do not scroll either: content that loads only after a click or a scroll is not in the DOM when Google renders the page, so it cannot be indexed. What counts is presence in the DOM, not visibility: tab or accordion content hidden with CSS or the hidden attribute can be indexed, while tab content fetched from an API on click does not exist for Google. Instead of scrolling, Google renders in a tall viewport, about 10,000 pixels according to Google's speaker (a figure not in the documentation, which calls it viewport expansion and warns it can miss infinite content), so content loaded when an element enters the viewport, for example with an Intersection Observer, loads while scroll-event listeners never run. For infinite scroll, Google's lazy-loading guide asks for paginated loading, with a persistent URL for each chunk, sequential links between them and the History API updating the displayed URL, a concrete pattern to go with Day 1's caution that 'load more' pagination is risky.

Based on D1-C115, D2-C195, D2-C268, D2-C271, D2-C197, D2-C196, D2-C202, D2-C201, D2-C272, D2-C273, D2-C200, D2-C199, D2-C274, D2-C198, D2-C276, D1-C114

19 claims · raised in 2 sessions · said or shown on Day 2

Open in Reef mapOpen in Graph

Things in this topic 5

Counts are claims that name the thing. All things

What to do

  • Put tab and accordion content in the initial DOM and hide it with CSS instead of fetching it on click.
  • Trigger lazy loading with an Intersection Observer or native lazy loading, never with a scroll event listener.
  • Give infinite-scroll and 'load more' lists paginated URLs linked with <a href>.
  • Treat the 10,000-pixel viewport as a safety margin, not a target.

Day 2: Indexing 19

Shown on screen 7

SlideConfirmed by docsD2-C195

Content that loads only after a user action such as a click or a scroll is not in the DOM while Google renders the page, so Google cannot index it.

Speaker Rebecca YuIn Day 2, 10:40 · Lightning session D: Rendering and JavaScriptEvidence slide photo, transcript

Used byrequirement DEV-REN-02

  • Extends D1-C115 Day 1: Google's crawlers do not click buttons. Each page in a series needs its own URL and an <a href> link to the…
  • Repeated by D2-C268 Day 2: Content that loads only when a user clicks an element is not supported in the way Google renders pages for…
SlideConsistent with docsD2-C196

For rendering, what matters is whether content is present in the DOM, not whether it is visible on screen: hidden content can be indexed, absent content cannot.

“Not visible versus hidden. Present versus absent in the DOM.”

Wording checked against the slide or recording

Speaker Rebecca YuIn Day 2, 10:40 · Lightning session D: Rendering and JavaScriptEvidence slide photo

Things

Used byrequirement DEV-REN-02

SlideConsistent with docsD2-C197

Lazy loading triggered by a scroll event listener, such as window.addEventListener('scroll', loadMoreProducts), never runs for Googlebot because Googlebot does not scroll.

“Googlebot doesn't scroll. Never runs.”

Wording checked against the slide or recording

Speaker Rebecca YuIn Day 2, 10:40 · Lightning session D: Rendering and JavaScriptEvidence slide photo, transcript

Used byrequirement DEV-REN-03glossary term Lazy loading

  • Extends D1-C114 Day 1: A Google panelist called pagination one of the trickiest things in web development and said switching to…
  • Repeated by D2-C271 Day 2: Google does not scroll a page when it renders it for indexing, so content that infinite scroll loads on…
SlideConsistent with docsD2-C199

An Intersection Observer fires when the observed element enters the viewport, and the viewport Google renders with is tall, so content lazy-loaded this way can load during rendering.

“Fires on viewport entry. Viewport is tall.”

Wording checked against the slide or recording

Speaker Rebecca YuIn Day 2, 10:40 · Lightning session D: Rendering and JavaScriptEvidence slide photo

Used byrequirement DEV-REN-03

  • Extended by D2-C272 Day 2: Instead of scrolling, Google renders a page in a very tall viewport, around 10,000 pixels high.
  • Repeated by D2-C274 Day 2: Content loaded as elements enter the viewport, for example with an Intersection Observer, does load when…
SlideConfirmed by docsD2-C201

Tab or accordion content fetched from an API only when a user clicks the tab, as in tab.onclick = () => fetch('/api/specs'), does not exist for Google until someone clicks.

“Doesn't exist until someone clicks”

Wording checked against the slide or recording

Speaker Rebecca YuIn Day 2, 10:40 · Lightning session D: Rendering and JavaScriptEvidence slide photo

Used byrequirement DEV-REN-02

  • Extends D1-C115 Day 1: Google's crawlers do not click buttons. Each page in a series needs its own URL and an <a href> link to the…
SlideConsistent with docsD2-C202

Tab and accordion content should be in the DOM from the start and only hidden with CSS or the hidden attribute; Google indexes such hidden content.

“CSS-hidden is fine. Google indexes it.”

Wording checked against the slide or recording

Speaker Rebecca YuIn Day 2, 10:40 · Lightning session D: Rendering and JavaScriptEvidence slide photo, transcript

Used byrequirement DEV-REN-02

  • Extended by D2-C866 Day 2: Content inside tabs, for example separate tabs for a product description and a manufacturer description…

Said on stage 7

StageConsistent with docsD2-C141

When checking which links bots can see, keep in mind that the rendered HTML can change with user actions, a community speaker cautioned.

Speaker Sören BendigIn Day 2, 10:40 · Lightning session D: Rendering and JavaScriptEvidence transcript

StageConfirmed by docsD2-C268

Content that loads only when a user clicks an element is not supported in the way Google renders pages for indexing.

Speaker Erin SparlingIn Day 2, 11:15 · What is Google friendly JavaScriptEvidence transcript

Used byrequirement DEV-REN-02glossary term Lazy loading

  • Extends D1-C115 Day 1: Google's crawlers do not click buttons. Each page in a series needs its own URL and an <a href> link to the…
  • Repeats D2-C195 Day 2: Content that loads only after a user action such as a click or a scroll is not in the DOM while Google…
StageConfirmed by docsD2-C271

Google does not scroll a page when it renders it for indexing, so content that infinite scroll loads on scroll-depth triggers works for users but is never loaded for Google.

Speaker Erin SparlingIn Day 2, 11:15 · What is Google friendly JavaScriptEvidence slide photo, transcript

Used byrequirements DEV-REN-03, DEV-URL-07

  • Extends D1-C114 Day 1: A Google panelist called pagination one of the trickiest things in web development and said switching to…
  • Repeats D2-C197 Day 2: Lazy loading triggered by a scroll event listener, such as window.addEventListener('scroll'…
  • Extends D1-C491 Day 1: If paginated pages are replaced by a load-more button or infinite scroll without crawlable links to them…
StageNot in docsD2-C272

Instead of scrolling, Google renders a page in a very tall viewport, around 10,000 pixels high.

“it renders it in a very tall viewport. Specifically, around 10,000 pixels is what the viewport gets rendered as.”

Speaker Erin SparlingIn Day 2, 11:15 · What is Google friendly JavaScriptEvidence slide photo, transcript

Used byrequirements DEV-REN-03, DEV-URL-07glossary term Viewport expansion

  • Extends D2-C199 Day 2: An Intersection Observer fires when the observed element enters the viewport, and the viewport Google renders…
StageConfirmed by docsD2-C274

Content loaded as elements enter the viewport, for example with an Intersection Observer, does load when Google renders a page, because Google's rendering viewport is very tall.

Speaker Erin SparlingIn Day 2, 11:15 · What is Google friendly JavaScriptEvidence transcript

Things

Used byrequirement DEV-REN-03

  • Repeats D2-C199 Day 2: An Intersection Observer fires when the observed element enters the viewport, and the viewport Google renders…

What Google's documentation says 3

DocsSourceD2-C200

In Google's March 2023 SEO office hours, John Mueller said Google handles infinite scroll with viewport expansion, rendering a page like a very long phone, which is not very efficient and can miss content, so pagination links are strongly recommended.

“this is done through a technique called "viewport expansion", where we render a page like a very long phone.”

Publisher Google Search Central (SEO office hours transcript, March 2023)Annotates Day 2, 10:40 · Lightning session D: Rendering and JavaScript

Things
DocsSourceD2-C273

Google's March 2023 SEO office hours say Google sees infinite-scroll content through viewport expansion, rendering a page like a very long phone, which is not particularly efficient and can miss infinite content.

“a technique called "viewport expansion", where we render a page like a very long phone”

Publisher Google Search Central (SEO office hours transcript, March 2023)Annotates Day 2, 11:15 · What is Google friendly JavaScript

Things

Used byrequirement DEV-URL-07glossary term Viewport expansion

DocsSourceD2-C276

To make infinite scroll indexable, Google's lazy-loading guide says to support paginated loading: give each chunk its own persistent, unique URL, link sequentially to those URLs, and update the displayed URL with the History API when a new chunk becomes the main visible element.

Publisher Google Search CentralAnnotates Day 2, 11:15 · What is Google friendly JavaScript

Used byrequirement DEV-URL-07

  • Extends D1-C115 Day 1: Google's crawlers do not click buttons. Each page in a series needs its own URL and an <a href> link to the…

Analysis by the author 2

AnalysisD2-C275

Treat the 10,000-pixel viewport as a safety margin, not a target: load lazy content when it enters the viewport (Intersection Observer or native lazy loading, never scroll listeners), and give infinite-scroll content paginated URLs linked with <a href> so anything below the first rendered screen stays reachable.

Author Ibrahim AnjroAnnotates Day 2, 11:15 · What is Google friendly JavaScript

Across days and sessions 12

  1. Slide D2-C195 Day 2 · Lightning session D: Rendering and JavaScript

    Content that loads only after a user action such as a click or a scroll is not in the DOM while Google renders the page, so Google cannot index it.

    extends
    Docs D1-C115 Day 1 · session not recorded

    Google's crawlers do not click buttons. Each page in a series needs its own URL and an <a href> link to the next page, should not use page 1 as its canonical, and rel=next and rel=prev are no longer used.

  2. Slide D2-C197 Day 2 · Lightning session D: Rendering and JavaScript

    Lazy loading triggered by a scroll event listener, such as window.addEventListener('scroll', loadMoreProducts), never runs for Googlebot because Googlebot does not scroll.

    extends
    Stage D1-C114 Day 1 · Q&A

    A Google panelist called pagination one of the trickiest things in web development and said switching to infinite scroll or a load-more button is risky, depending on what you want to achieve, because Googlebot does not click buttons.

  3. Slide D2-C201 Day 2 · Lightning session D: Rendering and JavaScript

    Tab or accordion content fetched from an API only when a user clicks the tab, as in tab.onclick = () => fetch('/api/specs'), does not exist for Google until someone clicks.

    extends
    Docs D1-C115 Day 1 · session not recorded

    Google's crawlers do not click buttons. Each page in a series needs its own URL and an <a href> link to the next page, should not use page 1 as its canonical, and rel=next and rel=prev are no longer used.

  4. Stage D2-C268 Day 2 · What is Google friendly JavaScript

    Content that loads only when a user clicks an element is not supported in the way Google renders pages for indexing.

    extends
    Docs D1-C115 Day 1 · session not recorded

    Google's crawlers do not click buttons. Each page in a series needs its own URL and an <a href> link to the next page, should not use page 1 as its canonical, and rel=next and rel=prev are no longer used.

  5. Stage D2-C271 Day 2 · What is Google friendly JavaScript

    Google does not scroll a page when it renders it for indexing, so content that infinite scroll loads on scroll-depth triggers works for users but is never loaded for Google.

    extends
    Stage D1-C114 Day 1 · Q&A

    A Google panelist called pagination one of the trickiest things in web development and said switching to infinite scroll or a load-more button is risky, depending on what you want to achieve, because Googlebot does not click buttons.

  6. Stage D2-C271 Day 2 · What is Google friendly JavaScript

    Google does not scroll a page when it renders it for indexing, so content that infinite scroll loads on scroll-depth triggers works for users but is never loaded for Google.

    extends
    Stage D1-C491 Day 1 · Q&A

    If paginated pages are replaced by a load-more button or infinite scroll without crawlable links to them, Google will not see the further pages at all.

  7. Stage D2-C272 Day 2 · What is Google friendly JavaScript

    Instead of scrolling, Google renders a page in a very tall viewport, around 10,000 pixels high.

    extends
    Slide D2-C199 Day 2 · Lightning session D: Rendering and JavaScript

    An Intersection Observer fires when the observed element enters the viewport, and the viewport Google renders with is tall, so content lazy-loaded this way can load during rendering.

  8. Docs D2-C276 Day 2 · What is Google friendly JavaScript

    To make infinite scroll indexable, Google's lazy-loading guide says to support paginated loading: give each chunk its own persistent, unique URL, link sequentially to those URLs, and update the displayed URL with the History API when a new chunk becomes the main visible element.

    extends
    Docs D1-C115 Day 1 · session not recorded

    Google's crawlers do not click buttons. Each page in a series needs its own URL and an <a href> link to the next page, should not use page 1 as its canonical, and rel=next and rel=prev are no longer used.

  9. Stage D2-C866 Day 2 · Understanding what's on a page

    Content inside tabs, for example separate tabs for a product description and a manufacturer description, might be part of a page's main content.

    extends
    Slide D2-C202 Day 2 · Lightning session D: Rendering and JavaScript

    Tab and accordion content should be in the DOM from the start and only hidden with CSS or the hidden attribute; Google indexes such hidden content.

  10. Stage D2-C268 Day 2 · What is Google friendly JavaScript

    Content that loads only when a user clicks an element is not supported in the way Google renders pages for indexing.

    repeats
    Slide D2-C195 Day 2 · Lightning session D: Rendering and JavaScript

    Content that loads only after a user action such as a click or a scroll is not in the DOM while Google renders the page, so Google cannot index it.

  11. Stage D2-C271 Day 2 · What is Google friendly JavaScript

    Google does not scroll a page when it renders it for indexing, so content that infinite scroll loads on scroll-depth triggers works for users but is never loaded for Google.

    repeats
    Slide D2-C197 Day 2 · Lightning session D: Rendering and JavaScript

    Lazy loading triggered by a scroll event listener, such as window.addEventListener('scroll', loadMoreProducts), never runs for Googlebot because Googlebot does not scroll.

  12. Stage D2-C274 Day 2 · What is Google friendly JavaScript

    Content loaded as elements enter the viewport, for example with an Intersection Observer, does load when Google renders a page, because Google's rendering viewport is very tall.

    repeats
    Slide D2-C199 Day 2 · Lightning session D: Rendering and JavaScript

    An Intersection Observer fires when the observed element enters the viewport, and the viewport Google renders with is tall, so content lazy-loaded this way can load during rendering.

Built on these claims 3

Developer requirements 3

Sources 5