Google sees JavaScript-loaded content usually, but not always, and the line falls in one place: content that renders on its own gets seen, while content gated behind a user interaction or a failed render gets missed. Google can execute JavaScript and index what it produces, so the old fear that “Google can’t read JS” is outdated. But the opposite reassurance, that Google sees everything your scripts do, is just as wrong. The pivot is whether the content appears during rendering without anyone clicking or scrolling.
Here is why that pivot governs the outcome. When Google processes a page, it renders the JavaScript much like a browser would, and whatever content the scripts inject into the page during that render becomes eligible for indexing. The catch is that rendering is deferred and not guaranteed on every page every time, and Google’s renderer does not behave like an engaged human visitor. It does not click “load more” buttons, expand accordions, hover to reveal menus, or scroll through an infinite feed to trigger lazy-loaded sections. So any content that only appears after one of those interactions stays invisible to it. The same goes for content that depends on a script which errors out, times out, or relies on resources that fail to load: if the render fails, the content never materializes for indexing.
So the working answer is rendered-yes, interaction-gated-no. Content your JavaScript places on the page automatically, on initial render, is generally indexable. Content that waits for a click, a scroll, or a tab switch, or that quietly fails to render, is the content at risk of being missed. Because rendering details shift over time, treat the specifics as worth confirming, but design to the conditional rather than to either myth.
To stay on the safe side, make sure every piece of content you need indexed is present in the rendered page without requiring a user action. Test your important pages by viewing the rendered output, not just the raw source, and check that your critical text, links, and structured data are there. If anything important only appears after a click or scroll, surface it on initial render instead.