Official statement
Other statements from this video 50 ▾
- 0:33 Does Google really see the HTML you think is optimized?
- 0:33 Does the rendered HTML in Search Console really reflect what Googlebot indexes?
- 1:47 Does late JavaScript really hurt your Google indexing?
- 1:47 What are the chances that Googlebot is missing your critical JavaScript changes?
- 2:23 Does Google really rewrite your title tags and meta descriptions: should you still optimize them?
- 3:03 Is it true that Google rewrites your title tags and meta descriptions at will?
- 3:45 What’s the key difference between DOMContentLoaded and the load event that could reshape Google’s rendering approach?
- 3:45 What event does Googlebot really wait for to index your content: DOMContentLoaded or Load?
- 6:23 How can you prioritize hybrid server/client rendering without harming your SEO?
- 7:27 Should you avoid using the canonical tag on the server side if it’s incorrect at the first render?
- 8:00 Should you remove the canonical tag instead of correcting an incorrect one using JavaScript?
- 9:06 How can you find out which canonical Google has actually retained for your pages?
- 9:38 Does URL Inspection really uncover canonical conflicts?
- 10:08 Should you really ignore noindex settings for your JS and CSS files?
- 10:08 Should you add a noindex to JavaScript and CSS files?
- 10:39 Can you really rely on Google's cache: to diagnose an SEO issue?
- 10:39 Is it true that Google's cache is a trap for testing your page's rendering?
- 11:10 Should you really worry about the screenshot in Search Console?
- 11:10 Do failed screenshots in Google Search Console really block indexing?
- 12:14 Is it true that native lazy loading is crawled by Googlebot?
- 12:14 Should you still be concerned about native lazy loading for SEO?
- 12:26 Is it really essential to split your JavaScript by page to optimize crawling?
- 12:26 Can JavaScript code splitting really enhance your crawl budget and improve your Core Web Vitals?
- 12:46 Why are your mobile Lighthouse scores consistently lower than on desktop?
- 12:46 Why are your Lighthouse mobile scores consistently lower than desktop?
- 13:50 Is your lazy loading preventing Google from detecting your images?
- 13:50 Can poorly implemented lazy loading really make your images invisible to Google?
- 16:36 Does client-side rendering really work with Googlebot?
- 16:58 Is it true that client-side JavaScript rendering really harms Google indexing?
- 17:23 Where can you find Google's official JavaScript SEO documentation?
- 18:37 Should you really align desktop, mobile, and AMP behaviors to avoid SEO pitfalls?
- 19:17 Should you really unify the mobile, desktop, and AMP experience to avoid penalties?
- 19:48 Should you really fix a JavaScript-heavy WordPress theme if Google indexes it correctly?
- 19:48 Should you really avoid JavaScript for SEO, or is it just a persistent myth?
- 21:22 Is it possible to have great Core Web Vitals while running a technically flawed site?
- 21:22 Can you really have a good FID while suffering from catastrophic TTI?
- 23:23 Does FOUC really ruin your Core Web Vitals performance?
- 23:23 Does FOUC really harm your organic SEO?
- 25:01 Does JavaScript really drain your crawl budget?
- 25:01 Does JavaScript really consume more crawl budget than classic HTML?
- 28:43 Should you restrict access for users without JavaScript to protect your SEO?
- 28:43 Is it true that blocking a site without JavaScript risks an SEO penalty?
- 30:10 Why do your Lighthouse scores never truly reflect your users' real experience?
- 30:16 Why don't your Lighthouse scores truly reflect your site's real performance?
- 34:02 Does Google's render tree make your SEO testing tools obsolete?
- 34:34 Does Google’s render tree really matter for your SEO strategy?
- 35:38 Should you really be worried about unloaded resources in Search Console?
- 36:08 Should you really worry about loading errors in Search Console?
- 37:23 Why doesn’t Google need to download your images to index them?
- 38:14 Does Googlebot really download images during the main crawl?
Google claims that critical content should be rendered server-side before metadata in a hybrid architecture. This recommendation flips the traditional logic where title, meta description, and canonical are prioritized. The goal: to reduce time to first render and prevent the bot from indexing an empty page if JavaScript fails.
What you need to understand
What causes Google to reverse the classic SSR/CSR priority?
Splitt's statement breaks a deeply rooted habit among developers: we no longer start with the head, we dive straight into the body. The explanation lies in a brutal observation — if your main content is stuck client-side while metadata happily displays server-side, you end up with a catastrophic Signal/Noise ratio for Googlebot.
The bot crawls, loads the initial HTML, sees a neat title, a well-crafted meta description… and an empty body waiting for JavaScript. If JS takes 4 seconds to execute or fails for some reason, Google indexes nothing. And that’s precisely what Splitt wants to avoid: maximizing the chances that critical content is visible even if client hydration fails.
What counts as “critical content” according to this logic?
Splitt explicitly mentions title, meta description, canonical, and main content. The main content includes everything that carries the semantics of your page: intro paragraphs, H1-H2 headings, first blocks of text, hero images with descriptive alt text. “Secondary” elements — complex navigation, sidebars, widgets, product recommendations — can remain in CSR without impacting indexing.
This hierarchy raises a conceptual issue: in practice, metadata is part of critical content. Splitt mentions them as well. What he means is that we shouldn’t just SSR these tags hoping that the body will follow. We need to ensure that the initial HTML stream already contains indexable text, not just meta signals.
How does this affect Google’s perceived performance?
The Time to First Byte (TTFB) remains critical, but the Largest Contentful Paint (LCP) becomes crucial for indexing. If your LCP relies on a client fetch to load the main content, you’re taking a double risk: network latency + JS execution time. By SSR’ing the main content, you ensure that the LCP corresponds to an element already present in the initial HTML.
Googlebot does not wait indefinitely. Real-world tests show that it allocates about 5 seconds of JS execution per page on average — sometimes less on sites with tight crawl budgets. If your main content arrives after this delay because it relies on a third-party API or a too-heavy React bundle, it will never be indexed.
- Main content in SSR: visible in the source HTML, immediately indexable even if JS fails
- Metadata without content: Google indexes an empty shell with nice SERP snippets… that lead to nothing
- Progressive hydration: SSR content remains functional while JS enhances interactivity without blocking indexing
- Resilience to JS timeout: if Googlebot cuts execution, critical content is already captured
- Consistency between mobile/desktop rendering: fewer discrepancies if the initial HTML already contains essential content
SEO Expert opinion
Does this recommendation contradict best practices observed in the field?
Not really. The top-performing sites in SEO using modern JS stacks already perform complete SSR of main content — Next.js, Nuxt, SvelteKit, all offer server rendering of the entire page by default, not just metadata. What’s new is that Splitt explicitly states this as an absolute priority.
The problem arises primarily with DIY hybrid architectures where developers have SSR’d only the head to “please SEO” without touching the body of the page. These semi-SSR implementations are a pitfall: they create the illusion of crawlable content while Googlebot sees an almost empty document. Splitt is specifically targeting this pattern.
What are the grey areas of this statement?
Splitt does not clarify where to draw the line between “critical” and “secondary”. Is a product carousel on an e-commerce homepage critical or secondary? Is a collapsed FAQ block indexable in CSR, or should it be SSR? These questions remain unanswered officially. [To be verified] with your own tests using the Mobile-Friendly Test and the URL Inspection Tool.
Another ambiguity: the phrasing “maximize performance” is vague. Performance for whom? If you SSR 100% of the content, you increase TTFB and server load, which can degrade Core Web Vitals. Splitt implies that a balance must be struck, but provides no quantified metrics. In practice, you need to monitor the compromise between SSR generation time and client rendering time.
In what cases does this rule not apply?
Pure SaaS applications behind login have no need for SSR for Google — no page is intended to be indexed. Purely transactional pages (checkout, cart) can remain in full CSR without SEO impact as long as they are noindexed.
Static generated sites (Gatsby, Hugo, Jekyll) already render everything at build time, so the SSR/CSR question doesn’t arise. And traditional full SSR sites (WordPress, Drupal, Rails) have never encountered this issue. This recommendation exclusively targets modern JS stacks in hybrid mode — React, Vue, Angular with mixed rendering.
Practical impact and recommendations
What should you concretely modify in a Next.js or Nuxt stack?
If you’re using getServerSideProps (Next) or asyncData (Nuxt), ensure you’re fetching main content data server-side, not just metadata. A common pattern that causes issues: SSR’ing the title/description via props, but allowing the body to load with a client useEffect. That’s exactly what Splitt condemns.
In Next 13+ with App Router, favor Server Components by default for all critical text content. Mark 'use client' explicitly only for interactive components (forms, carousels, accordions). Do not switch a component to client just because it contains a useState — extract the interactive logic and leave the text rendering server-side.
How can you verify that Google is correctly crawling the SSR content and not empty?
Use the URL Inspection Tool in Search Console, “Crawled page” tab. Compare the raw HTML with the final rendering. If the source HTML already contains your H1, first paragraphs, and hero images, you’re good. If these elements only appear in the final rendering, they depend on JS — thus risking partial indexing.
Also test with curl or wget with JavaScript disabled: curl -A "Googlebot" https://yoursite.com. The main content should be visible in the raw HTML output. If you see empty <div id="root"></div> tags, your SSR is insufficient. Complete this with a Mobile-Friendly Test using the URL Inspection API to see exactly what Googlebot renders.
What errors should you avoid during the SSR/CSR migration?
Don’t fall into the trap of “SSR everything at 100%” out of dogma. SSR’ing a megamenu of 500 categories or a sidebar of complex product filters will inflate your TTFB without any tangible SEO gain — these elements do not carry primary semantics. Keep them in CSR or lazy load.
Another classic mistake: SSR’ing content but forgetting alt attributes, aria-labels, and structured data. These signals must also be present in the initial HTML, not injected later via JavaScript. Ensure that your JSON-LD is present in the source HTML, not dynamically added via a client script.
- Audit the source HTML (curl/wget) to identify missing content server-side
- Progressive migration: SSR first H1, intro, first screen of content
- Measure TTFB before/after to avoid degrading Core Web Vitals
- Test Mobile-Friendly Tool and URL Inspection on a representative sample of pages
- Monitor JS errors in production: if CSR fails, SSR should hold up
- Document SSR/CSR choices for each component type (menu, sidebar, CTA, main content)
❓ Frequently Asked Questions
Dois-je SSR ma navigation et mon footer pour Google ?
Un site full CSR peut-il encore ranker correctement en 2025 ?
Les métadonnées (title, meta description) doivent-elles aussi être en SSR ?
Comment savoir si mon crawl budget permet à Google d'attendre le JS ?
Le SSR dégrade-t-il forcément les Core Web Vitals ?
🎥 From the same video 50
Other SEO insights extracted from this same Google Search Central video · duration 39 min · published on 17/06/2020
🎥 Watch the full video on YouTube →
💬 Comments (0)
Be the first to comment.