What does Google say about SEO? /
Quick SEO Quiz

Test your SEO knowledge in 5 questions

Less than a minute. Find out how much you really know about Google search.

🕒 ~1 min 🎯 5 questions

Official statement

Having an incorrect canonical tag on the server side and then correcting it on the client side can, in rare cases, cause confusion for Google, which may choose the wrong canonical. It is preferable not to have a canonical tag than to have an incorrect one initially. Prioritize critical content over metadata.
7:27
🎥 Source video

Extracted from a Google Search Central video

⏱ 39:51 💬 EN 📅 17/06/2020 ✂ 51 statements
Watch on YouTube (7:27) →
Other statements from this video 50
  1. 0:33 Does Google really see the HTML you think is optimized?
  2. 0:33 Does the rendered HTML in Search Console really reflect what Googlebot indexes?
  3. 1:47 Does late JavaScript really hurt your Google indexing?
  4. 1:47 What are the chances that Googlebot is missing your critical JavaScript changes?
  5. 2:23 Does Google really rewrite your title tags and meta descriptions: should you still optimize them?
  6. 3:03 Is it true that Google rewrites your title tags and meta descriptions at will?
  7. 3:45 What’s the key difference between DOMContentLoaded and the load event that could reshape Google’s rendering approach?
  8. 3:45 What event does Googlebot really wait for to index your content: DOMContentLoaded or Load?
  9. 6:23 How can you prioritize hybrid server/client rendering without harming your SEO?
  10. 6:23 Should you really prioritize critical content server-side before metadata in SSR?
  11. 8:00 Should you remove the canonical tag instead of correcting an incorrect one using JavaScript?
  12. 9:06 How can you find out which canonical Google has actually retained for your pages?
  13. 9:38 Does URL Inspection really uncover canonical conflicts?
  14. 10:08 Should you really ignore noindex settings for your JS and CSS files?
  15. 10:08 Should you add a noindex to JavaScript and CSS files?
  16. 10:39 Can you really rely on Google's cache: to diagnose an SEO issue?
  17. 10:39 Is it true that Google's cache is a trap for testing your page's rendering?
  18. 11:10 Should you really worry about the screenshot in Search Console?
  19. 11:10 Do failed screenshots in Google Search Console really block indexing?
  20. 12:14 Is it true that native lazy loading is crawled by Googlebot?
  21. 12:14 Should you still be concerned about native lazy loading for SEO?
  22. 12:26 Is it really essential to split your JavaScript by page to optimize crawling?
  23. 12:26 Can JavaScript code splitting really enhance your crawl budget and improve your Core Web Vitals?
  24. 12:46 Why are your mobile Lighthouse scores consistently lower than on desktop?
  25. 12:46 Why are your Lighthouse mobile scores consistently lower than desktop?
  26. 13:50 Is your lazy loading preventing Google from detecting your images?
  27. 13:50 Can poorly implemented lazy loading really make your images invisible to Google?
  28. 16:36 Does client-side rendering really work with Googlebot?
  29. 16:58 Is it true that client-side JavaScript rendering really harms Google indexing?
  30. 17:23 Where can you find Google's official JavaScript SEO documentation?
  31. 18:37 Should you really align desktop, mobile, and AMP behaviors to avoid SEO pitfalls?
  32. 19:17 Should you really unify the mobile, desktop, and AMP experience to avoid penalties?
  33. 19:48 Should you really fix a JavaScript-heavy WordPress theme if Google indexes it correctly?
  34. 19:48 Should you really avoid JavaScript for SEO, or is it just a persistent myth?
  35. 21:22 Is it possible to have great Core Web Vitals while running a technically flawed site?
  36. 21:22 Can you really have a good FID while suffering from catastrophic TTI?
  37. 23:23 Does FOUC really ruin your Core Web Vitals performance?
  38. 23:23 Does FOUC really harm your organic SEO?
  39. 25:01 Does JavaScript really drain your crawl budget?
  40. 25:01 Does JavaScript really consume more crawl budget than classic HTML?
  41. 28:43 Should you restrict access for users without JavaScript to protect your SEO?
  42. 28:43 Is it true that blocking a site without JavaScript risks an SEO penalty?
  43. 30:10 Why do your Lighthouse scores never truly reflect your users' real experience?
  44. 30:16 Why don't your Lighthouse scores truly reflect your site's real performance?
  45. 34:02 Does Google's render tree make your SEO testing tools obsolete?
  46. 34:34 Does Google’s render tree really matter for your SEO strategy?
  47. 35:38 Should you really be worried about unloaded resources in Search Console?
  48. 36:08 Should you really worry about loading errors in Search Console?
  49. 37:23 Why doesn’t Google need to download your images to index them?
  50. 38:14 Does Googlebot really download images during the main crawl?
📅
Official statement from (6 years ago)
TL;DR

Google can misinterpret the canonical tag if the server-side tag is incorrect and then corrected on the client side. Martin Splitt confirms that in some rare cases, the engine chooses the wrong URL. It’s better to omit the canonical tag than to declare an incorrect one initially, and prioritize critical content over metadata in the rendering path.

What you need to understand

Why could Google choose the wrong canonical?

The problem lies in Google's two-step rendering process. When the bot crawls a page, it first reads the raw HTML returned by the server. If a canonical tag points to URL A at this stage, Google records that information.

Later, during the JavaScript rendering, this tag may change to point to URL B. In rare cases, Google retains the first value — that from the server HTML — and ignores the client-side correction. The engine ends up with an incorrect canonical, which can lead to indexing or signal consolidation issues.

What does Martin Splitt mean by "prioritizing critical content"?

The idea is simple: visible and textual content should load before SEO metadata. If your JavaScript framework generates the canonical tag after several seconds, you create a window of opportunity where Googlebot may read an intermediate or absent value.

Splitt suggests not injecting a canonical on the server side if it risks being incorrect, even temporarily. It’s better to let Google determine the canonical itself than to provide erroneous information which will be corrected too late in the rendering cycle.

What scenarios trigger this confusion?

Observed cases mainly involve SPA (Single Page Applications) or headless CMSs that generate the DOM after hydration. For example: a React site that displays a default canonical in the static HTML, then dynamically replaces it based on the route or URL parameters.

Google does not specify how often these “rare” cases occur, making diagnosis difficult. The phenomenon is mostly observed on slow-rendering sites or with intermittent JavaScript errors that prevent the correction from executing properly.

  • Server HTML takes precedence over client rendering in some undocumented cases.
  • No canonical is better than an incorrect canonical on the server side.
  • Textual content must load before metadata to avoid inconsistencies.
  • SPA and headless sites are the most exposed to this risk of dual reading.
  • Google does not quantify “rare” — difficult to assess the actual scale of the issue.

SEO Expert opinion

Is this statement consistent with field observations?

Yes, but with nuances. It is indeed observed that Googlebot may favor the initial HTML in certain scenarios, especially on sites with high rates of JavaScript errors or with a high Time to Interactive (TTI). Server logs sometimes show that Google indexes a URL while the final canonical points elsewhere.

However, stating that “in rare cases” it poses a problem is [To be verified] — no official metric quantifies this rarity. On poorly optimized sites for client-side rendering, this phenomenon can be frequent. Prudence is warranted even if Google downplays the impact.

Should we really omit the canonical on the server side?

Splitt suggests not including it if it risks being incorrect. In practice, it's a defensive piece of advice: if your architecture does not guarantee the correct value from the raw HTML, it’s better to leave it empty and only inject it on the client side, once the data is available.

But beware: omitting the canonical on the server side can slow down signal consolidation if Google has to wait until rendering to discover it. On sites with a high volume of pages or complex URL parameters, this is a risk. The choice depends on the ratio between the risk of error and the cost of rendering delay.

What nuances are missing from this statement?

Google does not specify how it arbitrates between server HTML and client rendering when they differ. Is there a timeout? A prioritization based on site type or allotted crawl budget? These details are lacking, complicating implementation.

Another point: [To be verified] Splitt says “prioritize critical content over metadata”, but no metric defines what is “critical”. Does an h1 suffice? Is 200 visible words necessary? The lack of a quantified threshold leaves practitioners in the dark.

Attention: If your site generates canonicals dynamically, audit your Search Console logs to detect potential divergences between the indexed URL and the declared canonical. A recurring gap signals a rendering or timing problem.

Practical impact and recommendations

What should you do concretely to avoid this problem?

The first rule: never inject a default or placeholder canonical in the server HTML. If your CMS or framework generates a tag with a temporary value (e.g., the root URL or a generic route), remove it from the server side and only add it on the client side, once the data is reliable.

The second point: favor Server-Side Rendering (SSR) or static generation for SEO high-stakes pages. A Next.js or Nuxt.js site configured in SSR returns complete HTML with the correct canonical from the server response, eliminating the risk of divergence. If the SPA is unavoidable, use pre-rendering for main landing pages.

How to verify that Googlebot reads the correct canonical?

Use the URL Inspection tool in Search Console: compare the raw HTML (tab “More Info” > “HTML source”) and the rendered HTML (tab

❓ Frequently Asked Questions

Que se passe-t-il si je n'ai aucune balise canonical sur ma page ?
Google détermine lui-même l'URL canonique en analysant le contenu, les redirections et les signaux internes. C'est moins risqué qu'une canonical incorrecte, mais vous perdez le contrôle sur la consolidation des signaux.
Peut-on corriger une canonical incorrecte uniquement via JavaScript ?
Oui, mais Google peut avoir déjà enregistré la valeur serveur avant le rendu. Si la correction arrive trop tard, le moteur conserve la première version. Mieux vaut ne pas en mettre côté serveur si elle est fausse.
Les canonicals relatives posent-elles le même problème ?
Oui, surtout côté client sans base href défini. Googlebot peut mal interpréter le chemin. Privilégiez toujours les URLs absolues avec protocole et domaine complets.
Comment savoir si Google a lu la mauvaise canonical sur mon site ?
Comparez le HTML brut et le HTML rendu dans l'outil Inspection d'URL de Search Console. Si la canonical diffère, ou si Google indexe des URLs non souhaitées, vous avez probablement un problème de timing ou de rendu.
Le passage en SSR résout-il définitivement ce risque ?
Oui, si le SSR renvoie le HTML complet avec la bonne canonical dès la réponse serveur, il n'y a plus de divergence entre HTML brut et rendu. C'est la solution la plus sûre pour les sites à fort enjeu SEO.
🏷 Related Topics
Content Crawl & Indexing AI & SEO Links & Backlinks

🎥 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 →

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.