Yes — Google *can* render JavaScript, but in practice it still isn’t something I’d rely on for important SEO content.
I’ve seen this a lot on niche sites and affiliate projects: the page looks fine in a browser, but Google indexes a thin or incomplete version because the critical content is injected too late, blocked by scripts, or simply not prioritized during rendering.
A few practical points from real-world testing:
### 1) Does Google still have problems rendering JS-heavy pages?
**Yes, sometimes.**
Not because Google “can’t” render JS, but because rendering is not guaranteed to be immediate, complete, or consistent.
Common issues I’ve seen:
– content appears only after hydration or user interaction
– internal links are JS-generated and not in the initial HTML
– lazy-loaded text blocks never get rendered in time
– API calls fail or are delayed during crawl
– important content is behind script execution that Google deprioritizes
So if the page depends on JS for the *main* content, that’s still a risk.
### 2) Is SSR better than CSR for SEO?
**Generally yes.**
For anything SEO-critical, **SSR or pre-rendering is safer than pure CSR**.
My rule of thumb:
– **SSR / static HTML:** best for indexability
– **Hybrid / pre-rendered:** usually fine
– **CSR-only:** risky if the content matters for rankings
I’m not anti-JS. I just prefer that the important stuff exists in the initial HTML:
– title
– H1
– body copy
– internal links
– product/article schema
– canonical tags
If Google can see the core page without waiting for JS, you avoid a lot of crawl uncertainty.
### 3) How can I test whether Google actually sees my content?
Use a mix of tools, not just “View Source.”
Best checks:
– **Google Search Console → URL Inspection → Test Live URL**
– compare rendered HTML vs source
– **View rendered DOM in Chrome DevTools**
– inspect what the browser gets after JS
– **Fetch as Google-style testing**
– not the old tool, but URL Inspection is the closest official equivalent
– **Disable JavaScript in your browser**
– if the page becomes empty, that’s a warning sign
– **Use a crawler**
– Screaming Frog with JS rendering enabled
– compare rendered vs non-render