Search Central LiveDeep Dive Europe 2026

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

Day 2 · Thursday 1 October 2026 · 11:15

What is Google friendly JavaScript

Speaker Erin Sparling, Partner Technology Manager

TalkCoverageTranscriptSlidesVideo

Same speaker as the opener of Lightning session D.

Shown on screen 9

SlideConfirmed by docsD2-C262

Content that is not in the final DOM after rendering cannot be seen by Google, so it cannot be indexed.

“If it's not in the final DOM, Google can't see it.”

Wording checked against the slide or recording

Speaker Erin SparlingEvidence slide photo, transcript

Things

Used byrequirement DEV-REN-02

  • Repeats D2-C174 Day 2: Whatever is in the DOM at the moment Google's rendering finishes is what likely gets indexed.
SlideConfirmed by docsD2-C264

Google's slide defined a soft 404 in a JavaScript application as a page that serves a 'Not Found' message but returns a 200 HTTP status code.

“Your application serves a "Not Found" message but returns a 200 HTTP status code.”

Wording checked against the slide or recording

Speaker Erin SparlingEvidence slide photo, transcript

Used byrequirement DEV-ERR-02

  • Repeats D1-C073 Day 1: A soft 404 is a page that returns a success code while its content looks like an error or an empty page. It…
SlideConsistent with docsD2-C265

Blocked resources, one of Google's four common JavaScript indexing problems, means robots.txt disallowing the crawling of critical JavaScript files or API endpoints.

“robots.txt disallowing crawling of critical .js or API endpoints.”

Wording checked against the slide or recording

Speaker Erin SparlingEvidence slide photo, transcript

Used byrequirement DEV-REN-04

  • Repeats D2-C204 Day 2: Blocking JavaScript or API resources in robots.txt is a classic rendering mistake: if Google's renderer…
SlideConsistent with docsD2-C266

Google named three causes of content missing from the rendered HTML: JavaScript inaccessible to Googlebot, JavaScript DOM event triggers and disabled browser APIs.

Speaker Erin SparlingEvidence slide photo, video, transcript

SlideD2-C270

Google said there is no single fix for content missing from the rendered HTML: the solution varies by case, and the advice is to follow best practices.

“Solution: varies by case, but follow best practices.”

Wording checked against the slide or recording

Speaker Erin SparlingEvidence slide photo, transcript

SlideConfirmed by docsD2-C284

URL fragments (#) are often ignored by crawlers: a fragment exists only in the browser, so Google cannot request it.

“Fragment identifiers (#) are often ignored by crawlers.”

Wording checked against the slide or recording

Speaker Erin SparlingEvidence slide photo, transcript

Used byrequirement DEV-URL-03

  • Repeats D1-C101 Day 1: Google's faceted navigation guide prefers prevention: disallow filter URLs in robots.txt and keep crawlable…
SlideConfirmed by docsD2-C285

Google recommends the History API to give single-page apps clean URLs instead of fragment-based routes.

“Use the History API for clean URLs in SPAs.”

Wording checked against the slide or recording

Speaker Erin SparlingEvidence slide photo, transcript

Used byrequirement DEV-URL-03glossary term History API

  • Repeats D2-C185 Day 2: The crawlable pattern for single-page app navigation is a real URL in the href, such as <a href=/products>…

Said on stage 30

StageConfirmed by docsD2-C256

Google renders nearly all of the web by replicating what a browser does, using a real browser's rendering engine.

“Google renders nearly all of the internet by replicating browser actions”

Speaker Erin SparlingEvidence transcript

Things
  • Extended by D3-C628 Day 3: Gary Illyes said Google keeps saying it renders every URL on the internet and that he would say this is not…
StageConsistent with docsD2-C259

Erin Sparling named server-side or hybrid rendering, fallbacks and not leaving placeholders in the DOM, among other measures, as ways to guard against failed JavaScript rendering.

Speaker Erin SparlingEvidence transcript

Used byrequirement DEV-REN-06

  • Extends D2-C149 Day 2: A search engine's renderer does not wait forever before taking its snapshot, so content from slow internal…
StageNot in docsD2-C263

Content is missing from the rendered HTML either because the server does not serve it or because the content has still not appeared after some period of time.

Speaker Erin SparlingEvidence transcript

Used byrequirement DEV-REN-06

  • Extends D2-C149 Day 2: A search engine's renderer does not wait forever before taking its snapshot, so content from slow internal…
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 SparlingEvidence 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 SparlingEvidence 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 SparlingEvidence 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 SparlingEvidence 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…
StageConfirmed by docsD2-C287

A link that is an <a> element but does not point to a real URL gives Google something to look at, but Google will not know where the link goes.

Speaker Erin SparlingEvidence transcript

Used byrequirement DEV-URL-01

  • Extends D1-C040 Day 1: URL discovery works through links: a homepage links to section pages, which link to further pages.
  • Extends D2-C040 Day 2: Google cannot extract a link from an a element that only has an onclick handler, because Googlebot does not…
StageConfirmed by docsD2-C288

With the History API, a single-page app can use real links and attach event listeners that intercept the click, rewrite the URL with pushState and load the new content, so Google can follow the links while users avoid full page reloads.

Speaker Erin SparlingEvidence transcript

Used byrequirement DEV-URL-03glossary terms History API, Single-page app (SPA)

  • Extends D2-C185 Day 2: The crawlable pattern for single-page app navigation is a real URL in the href, such as <a href=/products>…
StageNot in docsD2-C289

Real URLs also work as deep links: Android, iOS and desktop operating systems accept full URLs as keys to specific content in an app, so clean URLs simplify the cross-platform user experience, not only indexing.

Speaker Erin SparlingEvidence transcript

Used byrequirement DEV-URL-03

StageConfirmed by docsD2-C291

In JavaScript single-page apps, soft 404s typically arise because the server returns the app with a 200 status for every URL, so when the app shows a 'not found' message for a URL that does not exist, no error is reported.

Speaker Erin SparlingEvidence transcript

Used byrequirement DEV-ERR-02

  • Extends D1-C073 Day 1: A soft 404 is a page that returns a success code while its content looks like an error or an empty page. It…
  • Repeats D2-C190 Day 2: In single-page apps, a missing page often shows a custom 404 page while the server returns HTTP 200, because…
StageConsistent with docsD2-C292

The fix for a client-side soft 404 is to serve a real 404 error page where appropriate; how to detect URLs that do not exist depends on how the app works and where it is hosted.

Speaker Erin SparlingEvidence transcript

  • Extends D2-C191 Day 2: The fix for a client-side soft 404 is to make a missing page end with a real HTTP 404 status code instead of…
StageConfirmed by docsD2-C296

If robots.txt blocks JavaScript that client-side code needs to render, Google cannot render the content that the JavaScript would produce.

Speaker Erin SparlingEvidence transcript

Used byrequirement DEV-REN-04

  • Extends D1-C064 Day 1: The crawler has multiple tasks: fetch from the internet, ensure it doesn't break the internet, and enforce…
  • Repeats D2-C204 Day 2: Blocking JavaScript or API resources in robots.txt is a classic rendering mistake: if Google's renderer…
StageNot in docsD2-C299

A headless content management system serves its content as an API; even WordPress, often seen as one monolithic application, can be used headless, with only its editor or only its renderer.

Speaker Erin SparlingEvidence transcript

StageD2-C300

Erin Sparling's practice with a headless CMS is to give an AI agent the content's JSON Schema and have it build a throwaway prototype front end, to see the content before deciding how to render it; the prototype is not meant for launch.

Speaker Erin SparlingEvidence transcript

StageD2-C302

When one content schema feeds several front ends (the example was a news UI, then a recipe UI), Erin Sparling had an AI agent add automated browser UI tests and agent controls so the interfaces could be managed and tested.

Speaker Erin SparlingEvidence transcript

StageConsistent with docsD2-C306

To use Search Console to debug what Google can see on a site and why, Erin Sparling said the first step is to get access to the site by verifying ownership (the speaker's words were authorized domains).

Speaker Erin SparlingEvidence transcript

Used byrequirement DEV-MON-01

What Google's documentation says 10

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)

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 Central

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…
DocsSourceD2-C280

Google's JavaScript SEO basics recommends differential serving and polyfills when feature detection finds a missing browser API, and warns that some browser features cannot be polyfilled.

“We recommend using differential serving and polyfills if you feature-detect a missing browser API that you need.”

Publisher Google Search Central

Used byrequirement DEV-REN-08

DocsSourceD2-C294

For client-side rendered single-page apps, where meaningful status codes can be impossible or impractical, Google's documentation gives two ways to avoid soft 404s: a JavaScript redirect to a URL that returns a 404 status, or a noindex robots meta tag added with JavaScript.

Publisher Google Search Central

Used byrequirement DEV-ERR-02

DocsSourceD2-C829

Google's guide to fixing Search-related JavaScript problems says the Web Rendering Service may ignore caching headers and so use outdated JavaScript or CSS, and recommends content fingerprinting, which puts a hash of the content in the file name, as in main.2bb85551.js.

Publisher Google Search Central

Used byrequirement DEV-REN-06

Analysis by the author 6

AnalysisD2-C295

After moving to real paths, set the server or hosting rewrite rules so a direct request to every valid path returns 200 with the content (ideally server-rendered) and an unknown path returns a 404 status, which removes client-side soft 404s at the source.

Author Ibrahim Anjro

Used byrequirement DEV-ERR-02

  1. Stage D2-C259 Day 2 · What is Google friendly JavaScript

    Erin Sparling named server-side or hybrid rendering, fallbacks and not leaving placeholders in the DOM, among other measures, as ways to guard against failed JavaScript rendering.

    extends
    Stage D2-C149 Day 2 · Lightning session D: Rendering and JavaScript

    A search engine's renderer does not wait forever before taking its snapshot, so content from slow internal systems or APIs can be missing and unresolved placeholders can end up in the final snapshot, a community speaker said.

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

    Content is missing from the rendered HTML either because the server does not serve it or because the content has still not appeared after some period of time.

    extends
    Stage D2-C149 Day 2 · Lightning session D: Rendering and JavaScript

    A search engine's renderer does not wait forever before taking its snapshot, so content from slow internal systems or APIs can be missing and unresolved placeholders can end up in the final snapshot, a community speaker said.

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

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

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

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

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

  8. Stage D2-C281 Day 2 · What is Google friendly JavaScript

    Polyfills work in two directions: they patch backwards where a browser lacks support, or patch forward to build now for a feature expected in the future, as Web Fragments does.

    extends
    Stage D2-C254 Day 2 · Lightning session D: Rendering and JavaScript

    Natalia Venditto said the ShadowRealm proposal would do much of what Web Fragments does today with patches: containerizing and isolating execution.

  9. Stage D2-C287 Day 2 · What is Google friendly JavaScript

    A link that is an <a> element but does not point to a real URL gives Google something to look at, but Google will not know where the link goes.

    extends
    Slide D1-C040 Day 1 · How Search works and where's AI?

    URL discovery works through links: a homepage links to section pages, which link to further pages.

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

    A link that is an <a> element but does not point to a real URL gives Google something to look at, but Google will not know where the link goes.

    extends
    Slide D2-C040 Day 2 · How is HTML interpreted

    Google cannot extract a link from an a element that only has an onclick handler, because Googlebot does not click, so the JavaScript is never triggered.

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

    With the History API, a single-page app can use real links and attach event listeners that intercept the click, rewrite the URL with pushState and load the new content, so Google can follow the links while users avoid full page reloads.

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

    The crawlable pattern for single-page app navigation is a real URL in the href, such as <a href=/products>, combined with History API routing (window.history.pushState) instead of hash routes.

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

    In JavaScript single-page apps, soft 404s typically arise because the server returns the app with a 200 status for every URL, so when the app shows a 'not found' message for a URL that does not exist, no error is reported.

    extends
    Docs D1-C073 Day 1 · How crawling errors affect Search

    A soft 404 is a page that returns a success code while its content looks like an error or an empty page. It is kept out of the index but continues to be crawled, wasting crawl budget.

  13. Stage D2-C292 Day 2 · What is Google friendly JavaScript

    The fix for a client-side soft 404 is to serve a real 404 error page where appropriate; how to detect URLs that do not exist depends on how the app works and where it is hosted.

    extends
    Stage D2-C191 Day 2 · Lightning session D: Rendering and JavaScript

    The fix for a client-side soft 404 is to make a missing page end with a real HTTP 404 status code instead of 200.

  14. Stage D2-C296 Day 2 · What is Google friendly JavaScript

    If robots.txt blocks JavaScript that client-side code needs to render, Google cannot render the content that the JavaScript would produce.

    extends
    Slide D1-C064 Day 1 · How crawling works

    The crawler has multiple tasks: fetch from the internet, ensure it doesn't break the internet, and enforce robots.txt policies. Fetched data is sent for indexing.

  15. Stage D2-C303 Day 2 · What is Google friendly JavaScript

    Combining schema-based interfaces with web standards such as WebMCP lets a site expose tools to AI agents, which can then operate the interfaces, for example to test them.

    extends
    Stage D1-C281 Day 1 · Lightning session A: Automation and AI

    A community speaker presented WebMCP (Web Model Context Protocol) as a way for a site to declare the actions it offers to AI agents, for example booking an appointment in a calendar, so an agent does not have to scrape the interface; the speaker called it faster, easier and cheaper.

  16. Stage D3-C628 Day 3 · How long does it take to..?

    Gary Illyes said Google keeps saying it renders every URL on the internet and that he would say this is not true, though it is what he was told; he went on to say that Google's logs show the rendering queue cleared within weeks.

    extends
    Stage D2-C256 Day 2 · What is Google friendly JavaScript

    Google renders nearly all of the web by replicating what a browser does, using a real browser's rendering engine.

  17. Slide D2-C262 Day 2 · What is Google friendly JavaScript

    Content that is not in the final DOM after rendering cannot be seen by Google, so it cannot be indexed.

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

    Whatever is in the DOM at the moment Google's rendering finishes is what likely gets indexed.

  18. Slide D2-C264 Day 2 · What is Google friendly JavaScript

    Google's slide defined a soft 404 in a JavaScript application as a page that serves a 'Not Found' message but returns a 200 HTTP status code.

    repeats
    Docs D1-C073 Day 1 · How crawling errors affect Search

    A soft 404 is a page that returns a success code while its content looks like an error or an empty page. It is kept out of the index but continues to be crawled, wasting crawl budget.

  19. Slide D2-C265 Day 2 · What is Google friendly JavaScript

    Blocked resources, one of Google's four common JavaScript indexing problems, means robots.txt disallowing the crawling of critical JavaScript files or API endpoints.

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

    Blocking JavaScript or API resources in robots.txt is a classic rendering mistake: if Google's renderer cannot fetch a resource, it cannot run it.

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

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

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

  23. Slide D2-C284 Day 2 · What is Google friendly JavaScript

    URL fragments (#) are often ignored by crawlers: a fragment exists only in the browser, so Google cannot request it.

    repeats
    Docs D1-C101 Day 1 · How Google thinks about crawl budget

    Google's faceted navigation guide prefers prevention: disallow filter URLs in robots.txt and keep crawlable only item pages plus one unfiltered listing page, or use URL fragments, which Google generally does not crawl. rel=canonical and nofollow are weaker, slower options.

  24. Slide D2-C285 Day 2 · What is Google friendly JavaScript

    Google recommends the History API to give single-page apps clean URLs instead of fragment-based routes.

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

    The crawlable pattern for single-page app navigation is a real URL in the href, such as <a href=/products>, combined with History API routing (window.history.pushState) instead of hash routes.

  25. Stage D2-C291 Day 2 · What is Google friendly JavaScript

    In JavaScript single-page apps, soft 404s typically arise because the server returns the app with a 200 status for every URL, so when the app shows a 'not found' message for a URL that does not exist, no error is reported.

    repeats
    Stage D2-C190 Day 2 · Lightning session D: Rendering and JavaScript

    In single-page apps, a missing page often shows a custom 404 page while the server returns HTTP 200, because the front-end router, not the server, handles the 404.

  26. Stage D2-C296 Day 2 · What is Google friendly JavaScript

    If robots.txt blocks JavaScript that client-side code needs to render, Google cannot render the content that the JavaScript would produce.

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

    Blocking JavaScript or API resources in robots.txt is a classic rendering mistake: if Google's renderer cannot fetch a resource, it cannot run it.