Que dit Google sur le SEO ? /

Declaration officielle

Googlebot peut suivre les liens produits par JavaScript, à condition qu'ils soient générés avec des balises d'ancrage appropriées. Les éléments non standard, comme les span avec des onclick, ne seront pas suivis.
18:47
🎥 Vidéo source

Extrait d'une vidéo Google Search Central

⏱ 57:45 💬 EN 📅 29/04/2020 ✂ 20 déclarations
Voir sur YouTube (18:47) →
Autres déclarations de cette vidéo 19
  1. 2:38 Faut-il vraiment multiplier les sitemaps quand on a beaucoup d'URL ?
  2. 2:38 Faut-il vraiment découper son sitemap en plusieurs fichiers pour indexer un gros site ?
  3. 5:15 Pourquoi remplacer du HTML par du canvas JavaScript nuit-il au référencement ?
  4. 5:18 Faut-il abandonner le canvas HTML5 pour garantir l'indexation de vos contenus ?
  5. 10:56 Faut-il abandonner l'attribut noscript pour le SEO ?
  6. 12:26 Faut-il vraiment abandonner noscript pour le rendu de vos contenus ?
  7. 15:13 Que se passe-t-il quand vos métadonnées HTML contredisent celles en JavaScript ?
  8. 16:19 Les menus JavaScript complexes bloquent-ils vraiment l'indexation de votre navigation ?
  9. 19:28 Les images héros en pleine page nuisent-elles vraiment à l'indexation Google ?
  10. 19:35 Les images hero plein écran bloquent-elles vraiment l'indexation de vos pages ?
  11. 20:04 Pourquoi Google continue-t-il de crawler vos anciennes URL après une refonte ?
  12. 22:25 La balise canonical est-elle vraiment respectée par Google ?
  13. 25:48 Pourquoi la charge initiale d'une SPA peut-elle ruiner votre SEO ?
  14. 26:20 Le temps de chargement initial des SPA condamne-t-il votre trafic organique ?
  15. 28:13 Les Service Workers facilitent-ils vraiment le crawl et l'indexation de votre site ?
  16. 36:00 Le SSR va-t-il devenir obligatoire pour le référencement des applications JavaScript ?
  17. 36:17 Faut-il tout miser sur le rendu côté serveur pour performer en JavaScript ?
  18. 41:29 Le JavaScript représente-t-il vraiment l'avenir du développement web pour le SEO ?
  19. 52:01 Les scripts tiers tuent-ils vraiment vos Core Web Vitals ?
📅
Declaration officielle du (il y a 6 ans)
TL;DR

Google affirme que Googlebot peut suivre les liens générés par JavaScript, mais seulement s'ils utilisent des balises <a> standards. Les éléments non-sémantiques comme les span avec des onclick ne seront tout simplement pas explorés. Concrètement, un mauvais choix technique côté dev peut rendre une partie de votre site invisible pour le moteur, même si tout fonctionne parfaitement pour l'utilisateur.

Ce qu'il faut comprendre

Pourquoi cette distinction entre balises d'ancrage et éléments onclick ?

Googlebot analyse le DOM après exécution du JavaScript — ça, c'est acquis depuis des années. Mais l'interprétation des signaux de navigation reste strictement liée à la sémantique HTML. Une balise <a href="..."> est un signal de lien universel, reconnu nativement par tous les robots et navigateurs.

Un <span onclick="navigateTo('/page')">, même s'il déclenche une navigation pour l'utilisateur, n'existe pas en tant que lien dans le DOM. Googlebot ne simule pas les clics utilisateur — il extrait les URLs des éléments structurellement identifiés comme des liens. Pas de balise d'ancrage, pas de crawl.

Les frameworks JavaScript modernes sont-ils concernés ?

La plupart des frameworks modernes (React, Vue, Angular, Svelte) génèrent des balises <a> correctes quand vous utilisez leurs composants de navigation standards (<Link>, <router-link>, etc.). Le problème survient quand les développeurs créent des composants custom avec des gestionnaires d'événements sur des divs ou des spans.

Cas typique : un menu burger en mobile qui utilise des <div> cliquables au lieu de vrais liens. Pour l'utilisateur, ça marche. Pour Googlebot, ces sections du site n'existent tout simplement pas. Et c'est là que ça coince sur des sites entiers parfois.

Qu'en est-il des attributs href vides ou des liens JavaScript : void(0) ?

Un lien avec href="javascript:void(0)" ou href="#" reste une balise d'ancrage, mais l'URL de destination est inexploitable. Si le routing se fait entièrement en JavaScript sans mettre à jour le href, Googlebot n'a aucune URL à crawler.

La bonne pratique : utiliser des hrefs réels qui pointent vers les URLs canoniques, puis intercepter le clic en JavaScript pour la navigation côté client (progressive enhancement). Ainsi, même si JS échoue ou que le bot ne simule pas l'événement, le lien reste crawlable.

  • Googlebot extrait les liens du DOM post-JavaScript, mais uniquement depuis des balises <a> valides
  • Les événements onclick sur des éléments non-sémantiques (span, div) ne génèrent aucune découverte d'URL
  • Les frameworks modernes produisent généralement du code conforme, sauf implémentations custom hasardeuses
  • Un href vide ou en javascript:void(0) rend le lien techniquement présent mais inutilisable pour le crawl
  • Progressive enhancement : toujours partir d'un lien HTML fonctionnel, enrichir ensuite avec JavaScript

Avis d'un expert SEO

Cette déclaration est-elle cohérente avec les observations terrain ?

Oui, et c'est même documenté depuis des années. Les tests de crawl sur des sites JavaScript montrent systématiquement que Googlebot ne déclenche pas les gestionnaires d'événements onclick, onmouseover ou autre. Il parse le DOM, extrait les attributs href des balises <a>, et c'est tout.

Là où ça devient intéressant : certains sites e-commerce ont perdu 30-40% de leurs pages indexées après une migration vers un framework JS mal configuré. Diagnostic récurrent ? Des liens produits générés en span cliquables, parfaitement fonctionnels en navigation utilisateur, totalement invisibles pour le bot. L'équipe dev n'avait rien vu venir — tout marchait en staging.

Quelles nuances faut-il apporter à cette règle ?

Google dit "balises d'ancrage appropriées" — qu'est-ce que ça signifie exactement ? Un lien avec href="#" est-il "approprié" ? [A vérifier] dans des tests, mais en pratique, un href vide ou en ancre interne ne donne aucune URL à crawler. Donc techniquement conforme, mais fonctionnellement inutile.

Autre nuance : certains sites utilisent des data-attributes pour stocker les URLs (<a data-url="/page">) et les injectent dynamiquement dans le href via JS. Si le script s'exécute avant que Googlebot ne parse le DOM, ça peut passer. Mais c'est jouer avec le feu — aucune garantie de timing d'exécution. Autant mettre le href direct dès le départ.

Dans quels cas cette règle ne suffit-elle pas ?

Avoir des balises <a> correctes ne garantit pas le crawl. Il faut aussi que ces liens soient présents dans le HTML initial ou dans le DOM après le premier rendu JS. Si vos liens ne s'affichent qu'après un scroll infini, un lazy-loading agressif ou une interaction utilisateur (clic sur "Voir plus"), Googlebot peut ne jamais les voir.

Exemple classique : les filtres de facettes e-commerce qui rechargent les listings en AJAX sans mettre à jour les URLs ni créer de vrais liens. Pages filtrées = pages inexistantes pour Google, même si elles génèrent du trafic organique via la recherche interne du site. C'est un trou noir SEO fréquent.

Attention : Un site peut être techniquement conforme (balises <a> partout) et pourtant sous-crawler massivement si les liens ne sont pas découvrables dans le contexte de rendu initial ou si le maillage interne est défaillant. La déclaration de Splitt traite du "comment", pas du "quand" ni du "où".

Impact pratique et recommandations

Que faut-il auditer en priorité sur un site JavaScript ?

Première étape : vérifier la structure HTML post-rendu. Utilisez l'outil d'inspection d'URL de la Search Console, section "Page rendue", et examinez le code source. Tous vos liens de navigation critiques doivent apparaître comme <a href="URL_REELLE">. Si vous voyez des divs ou spans avec des classes qui suggèrent une navigation, vous avez un problème.

Deuxième vérification : testez le crawl avec un outil comme Screaming Frog en mode JavaScript activé. Comparez le nombre de pages découvertes avec JS activé vs désactivé. Un écart massif indique que votre maillage repose sur du JS, mais si même avec JS activé certaines sections ne sont pas crawlées, c'est un signal que vos liens ne sont pas standards.

Comment corriger les erreurs de navigation JavaScript ?

Cas n°1 : vous utilisez des composants custom qui génèrent des éléments non-sémantiques. Refactorisez en utilisant les composants natifs du framework (<Link> en React, <router-link> en Vue). Ils produisent des balises <a> par défaut et gèrent le routing côté client proprement.

Cas n°2 : votre site legacy utilise des onclick sur des spans pour des raisons historiques. Solution pragmatique : remplacez par des balises <a> avec hrefs réels, puis interceptez le clic en JavaScript pour la navigation SPA. Le lien fonctionne sans JS (progressive enhancement), et Google peut le crawler. C'est du travail, mais c'est le seul moyen de corriger structurellement.

Quelles erreurs éviter lors d'une migration JavaScript ?

Erreur classique n°1 : migrer vers un framework JS sans faire d'audit de crawlabilité préalable. Vous découvrez le problème 3 mois après, quand les positions ont chuté. Testez le rendu et le crawl en staging, systématiquement.

Erreur n°2 : supposer que "si ça marche en navigateur, ça marche pour Google". Googlebot ne simule pas les interactions utilisateur — il parse le DOM. Un menu déroulant qui s'ouvre au survol de la souris ? Les liens à l'intérieur peuvent être invisibles si le CSS les masque par défaut et que JS/hover est requis pour les afficher.

  • Inspecter le DOM rendu via Search Console (outil d'inspection d'URL) pour vérifier la présence de balises <a> valides
  • Crawler le site avec Screaming Frog en mode JavaScript activé et comparer avec un crawl sans JS
  • Auditer les composants de navigation custom : remplacer divs/spans cliquables par des vraies balises d'ancrage
  • Vérifier que tous les hrefs contiennent des URLs réelles, pas des #, javascript:void(0) ou des data-attributes
  • Tester le lazy-loading et le scroll infini : s'assurer que les liens critiques sont présents dès le premier rendu
  • Mettre en place un monitoring continu du nombre de pages crawlées/indexées après toute modification JS majeure
La navigation en JavaScript n'est pas un problème en soi — c'est l'implémentation technique qui fait la différence. Des balises <a> avec des hrefs réels, c'est la base. Mais entre la théorie et la pratique, il y a souvent des dizaines de micro-décisions techniques (composants custom, gestion du routing, lazy-loading) qui peuvent saboter le crawl sans que personne ne s'en aperçoive immédiatement. Ces optimisations nécessitent une coordination fine entre équipes dev et SEO, et peuvent vite devenir complexes à piloter en interne — faire appel à une agence SEO spécialisée permet d'obtenir un audit technique complet et un accompagnement sur mesure pour éviter les pièges de migration JavaScript.

❓ Questions frequentes

Un lien avec href="#" est-il considéré comme une balise d'ancrage appropriée par Googlebot ?
Techniquement oui, c'est une balise <a>, mais le href="#" ne contient aucune URL exploitable pour le crawl. Googlebot ne peut pas découvrir de nouvelle page via ce lien, donc il est inutile pour la navigation SEO.
Les Single Page Applications (SPA) peuvent-elles être correctement crawlées par Google ?
Oui, à condition que les liens internes utilisent des balises <a> avec des hrefs réels et que le routing soit géré proprement (History API, URLs uniques par vue). Le rendu JavaScript doit produire un DOM exploitable par Googlebot.
Faut-il absolument désactiver le JavaScript pour tester la crawlabilité de son site ?
Non, mais comparer un crawl avec et sans JS permet d'identifier les dépendances critiques. L'idéal est de tester avec un bot qui simule Googlebot (JS activé, mais pas d'interactions utilisateur simulées).
Est-ce que l'attribut rel="nofollow" empêche Googlebot de suivre un lien JavaScript ?
Le nofollow indique à Google de ne pas transmettre de PageRank, mais ne bloque pas le crawl de l'URL si elle est découverte via ce lien. Googlebot peut toujours explorer la page cible, selon son budget de crawl et d'autres signaux.
Les liens générés dynamiquement après un scroll infini sont-ils crawlés par Google ?
Seulement si ces liens sont présents dans le DOM après le premier rendu JavaScript. Googlebot ne scrolle pas la page — il parse le HTML tel qu'il est après exécution JS initiale. Les liens chargés au scroll peuvent être invisibles.
🏷 Sujets associes
Anciennete & Historique Crawl & Indexation E-commerce JavaScript & Technique Liens & Backlinks Pagination & Structure

🎥 De la même vidéo 19

Autres enseignements SEO extraits de cette même vidéo Google Search Central · durée 57 min · publiée le 29/04/2020

🎥 Voir la vidéo complète sur YouTube →

Declarations similaires

💬 Commentaires (0)

Soyez le premier à commenter.

2000 caractères restants
🔔

Recevez une analyse complète en temps réel des dernières déclarations de Google

Soyez alerté à chaque nouvelle déclaration officielle Google SEO — avec l'analyse complète incluse.

Aucun spam. Désinscription en 1 clic.