What does Google say about SEO? /

Official statement

Inconsistencies between initial HTML and rendered HTML (canonical, noindex, title) create undefined behavior. Google can unpredictably choose one version or the other. This situation must be avoided.
12:33
🎥 Source video

Extracted from a Google Search Central video

⏱ 30:57 💬 EN 📅 11/11/2020 ✂ 26 statements
Watch on YouTube (12:33) →
Other statements from this video 25
  1. 1:36 How can you effectively test JavaScript rendering before taking your site live?
  2. 1:36 Why has testing JavaScript rendering before launch become essential for Google indexing?
  3. 1:38 Why does a website redesign cause rank drops even without content changes?
  4. 1:38 Does migrating to JavaScript really affect SEO rankings?
  5. 3:40 Hreflang: Why does Google still stress this tag for multilingual content?
  6. 3:40 Does Googlebot really see every localized version of your pages?
  7. 3:40 Does hreflang really group your multilingual content in Google's eyes?
  8. 4:11 How can you make your hyper-local content URLs discoverable without sacrificing traffic?
  9. 4:11 How can you structure your URLs to enhance the discoverability of hyper-local content?
  10. 5:14 Can user personalization trigger a penalty for cloaking?
  11. 5:14 Could personalizing content for your users lead to a cloaking penalty?
  12. 6:15 Are Core Web Vitals really measured on users or bots?
  13. 6:15 Are Core Web Vitals really measured from Google bots or from your actual users?
  14. 7:18 Why isn’t schema markup enough to ensure rich snippets appear?
  15. 7:18 Why don't rich snippets show up even with valid Schema.org markup?
  16. 9:14 Is dynamic rendering really dead for SEO?
  17. 9:29 Should we ditch dynamic rendering for SSR with hydration?
  18. 11:40 How does the JavaScript main thread block interactivity on your pages according to Google?
  19. 11:40 How does the JavaScript main thread affect the indexing of your pages?
  20. 13:12 What happens when your initial HTML differs from the HTML rendered by JavaScript?
  21. 15:50 Is it true that Googlebot doesn't click on buttons on your site?
  22. 15:50 Should you really be concerned if Googlebot doesn't click on your buttons?
  23. 26:58 Should you prioritize JavaScript performance for your real users over optimization for Googlebot?
  24. 28:20 Are web workers truly compatible with Google's JavaScript rendering?
  25. 28:20 Should you really be wary of Web Workers for SEO?
📅
Official statement from (5 years ago)
TL;DR

Google is not obligated to respect canonical, noindex, or title tags if they differ between initial HTML and JavaScript-rendered HTML. When an inconsistency exists, the engine arbitrarily chooses one version or the other — without guarantee or predictability. In practical terms, you risk having a page indexed that you thought was blocked, or having your carefully optimized title replaced by a client-side generated version.

What you need to understand

What does 'initial HTML' vs 'rendered HTML' really mean?

Initial HTML refers to the source code that the server sends to the browser — the one you see when you 'View Page Source'. It is the document's first state, before any JavaScript execution.

Rendered HTML is the final state of the DOM after all your scripts have modified the page. If React, Vue, or any framework injects canonical, noindex, or title tags on the client-side, it's this 'rendered' state that Googlebot analyzes secondarily, after the initial crawl.

Why does this distinction create indexing issues?

Googlebot first crawls the initial HTML, extracts critical tags, and then executes JavaScript to get the final render. If both versions contain conflicting instructions, the engine has no documented rule to decide.

Google may favor initial HTML one day, rendered the next — or even treat two identical pages differently depending on server load, crawl budget, or other opaque parameters. This non-determinacy is at the heart of the problem: you lose control.

Which tags are affected by this inconsistency?

Martin Splitt explicitly cites three tags: canonical, noindex, and title. However, the issue potentially extends to any indexing directives modified client-side.

A canonical pointing to URL A in the initial HTML and then to URL B after JavaScript execution creates an indeterminate situation. The same goes for a noindex tag that is absent at first and then injected by React, or vice versa. The engine is not obligated to respect either version — and in practice, it chooses unpredictably.

  • Google crawls the initial HTML first, before any JavaScript execution
  • The JavaScript render can modify canonical, noindex, title, and create inconsistencies
  • In case of divergence, Google chooses arbitrarily — no documented rule
  • Critical tags must be identical in both states to ensure expected behavior
  • This rule applies to all sites using client-side JavaScript to manipulate the DOM

SEO Expert opinion

Is this statement consistent with real-world observations?

Yes. For years, it's been observed that Google erratically treats sites that inject critical tags via JavaScript. Pages marked noindex on the client-side end up indexed, rendered canonicals are ignored in favor of the initial version, and React titles disappear from SERPs.

What has changed is that Google now openly acknowledges the lack of guarantees. Previously, one could hope for convergence towards the final render — Martin Splitt explicitly tells us that this is not the case. The engine reserves the right to choose. [To be verified]: Google has never published stats on the frequency of each behavior or the decision criteria.

What nuances should be added to this rule?

The statement does not specify whether certain tags are more 'stable' than others. Empirically, we know that client-side titles are often ignored, but what about hreflang, meta descriptions, structured data? Google remains vague.

Additionally, this rule does not apply equally depending on the architecture: a site using SSR (Server-Side Rendering) or SSG (Static Site Generation) sends an already complete initial HTML, eliminating the issue at the source. The real danger lies in pure CSR (Client-Side Rendering) architectures where the initial HTML is almost empty.

Warning: If your site dynamically modifies critical tags based on user behavior (client-side A/B testing, personalization), you are in a total gray area. Google may see any version — and you have no way of knowing which one it has retained.

In what cases can this inconsistency seem acceptable?

Some practitioners try to 'force' Google to index one version over another by manipulating render timing. For instance, blocking indexing in the initial HTML and then injecting a canonical via JavaScript after detecting the user-agent. This technically creates an inconsistency — but in this specific case, one seeks to deceive the engine.

Google guarantees nothing, but if your goal is to achieve unpredictable behavior for tactical reasons (cloaking edge cases, tests), this 'loophole' may seem useful. Obviously, this is playing with fire — and Splitt explicitly tells us that the behavior is 'undefined', thus unstable.

Practical impact and recommendations

What should be done concretely to avoid these inconsistencies?

The rule is simple: all critical tags must be present and identical in the initial HTML. If you are using React, Next.js, Nuxt, or any other framework, configure server-side rendering so that canonical, noindex, and title are already in the source code before any JavaScript execution.

If you modify these tags client-side, ensure that the modification is strictly identical to the initial state — which means: do not modify them. Any divergence creates a risk of unpredictable indexing.

How can I check that my site follows this rule?

Compare the raw source HTML (right-click > 'View Page Source') with the inspected DOM after full loading. The canonical, noindex, and title tags must be rigorously identical.

Use the URL testing tool in Google Search Console to see what Googlebot crawls and renders. If the two versions differ in the screenshot or reported source code, you have a problem. An automated audit with Screaming Frog or Sitebulb can also detect these divergences — but beware, these tools sometimes render differently from Googlebot.

Which mistakes should be absolutely avoided?

Never let a JavaScript framework inject a canonical or noindex that does not exist in the initial HTML. This is the most frequent source of inconsistency: the developer adds the tag client-side 'for simplicity', without realizing that Google may ignore it.

Do not rely on JavaScript rendering to 'fix' a misconfigured server-side tag. If the initial HTML contains an erroneous canonical, do not attempt to replace it in JS — fix it at the source. Lastly, avoid client-side A/B tests that modify these tags: Google will see a random version, and you will have no guarantee.

  • Generate all critical tags server-side (SSR, SSG, or classic server templates)
  • Consistently compare source HTML and rendered DOM using DevTools
  • Use Google Search Console to verify what Googlebot actually crawls
  • Never modify canonical, noindex, or title via JavaScript after the initial render
  • Regularly audit with Screaming Frog in 'JavaScript rendering' mode vs 'raw HTML'
  • Document any changes to these tags to trace potential inconsistencies
Inconsistencies between initial/rendered HTML create totally unpredictable behavior for Google. The only reliable strategy: ensure that canonical, noindex, and title are identical in the source code and after JavaScript execution — ideally by generating them only on the server side. If your architecture heavily relies on client rendering and these optimizations seem complex to implement on your own, it may be wise to consult a specialized JavaScript SEO agency for tailored technical support and to avoid any risk of random indexing.

❓ Frequently Asked Questions

Puis-je modifier le title avec JavaScript après le chargement initial sans risque ?
Non. Google peut choisir arbitrairement le title du HTML initial ou celui du rendu. Si vous modifiez le title côté client, le moteur n'est pas tenu de respecter la version rendue — et dans la pratique, il l'ignore souvent.
Un site en React ou Next.js est-il automatiquement concerné par ce problème ?
Pas nécessairement. Si vous utilisez le SSR (Server-Side Rendering) ou le SSG (Static Site Generation), le HTML initial contient déjà toutes les balises. Le problème ne concerne que le CSR (Client-Side Rendering) pur où les balises sont injectées après coup.
Google privilégie-t-il systématiquement l'HTML initial ou le rendu ?
Aucune règle documentée. Google peut choisir l'un ou l'autre de manière imprévisible, sans garantie de cohérence entre pages ou dans le temps.
Comment détecter ces incohérences sur un site existant ?
Comparez le code source brut (« Afficher le code source ») et le DOM inspecté après chargement. Utilisez Google Search Console (test des URLs) et des crawlers comme Screaming Frog en mode rendu JavaScript pour identifier les divergences.
Cette règle s'applique-t-elle aussi aux structured data et hreflang ?
Google ne le précise pas explicitement, mais le principe reste le même : toute directive d'indexation modifiée côté client crée un risque d'interprétation aléatoire. Mieux vaut générer ces éléments côté serveur pour garantir la cohérence.
🏷 Related Topics
Content Crawl & Indexing AI & SEO

🎥 From the same video 25

Other SEO insights extracted from this same Google Search Central video · duration 30 min · published on 11/11/2020

🎥 Watch the full video on YouTube →

Related statements

💬 Comments (0)

Be the first to comment.

2000 characters remaining
🔔

Get real-time analysis of the latest Google SEO declarations

Be the first to know every time a new official Google statement drops — with full expert analysis.

No spam. Unsubscribe in one click.