Que dit Google sur le SEO ? /
Quiz SEO Express

Testez vos connaissances SEO en 5 questions

Moins d'une minute. Decouvrez ce que vous savez vraiment sur le referencement Google.

🕒 ~1 min 🎯 5 questions

Declaration officielle

Google recommande l'utilisation de la fonctionnalité pushState pour les URLs, car elle permet une indexation correcte des routes. Les URLs basées sur des hashes ne sont pas indexées par Google.
5:53
🎥 Vidéo source

Extrait d'une vidéo Google Search Central

⏱ 14:02 💬 EN 📅 27/06/2019 ✂ 5 déclarations
Voir sur YouTube (5:53) →
Autres déclarations de cette vidéo 4
  1. 2:37 Googlebot exécute-t-il vraiment JavaScript aussi bien qu'un navigateur moderne ?
  2. 4:28 Comment la Search Console aide-t-elle vraiment à déboguer les erreurs d'affichage mobile ?
  3. 8:16 Pourquoi chaque modal doit-il avoir sa propre URL pour être indexable ?
  4. 12:59 Le nombre de requêtes HTTP plombe-t-il vraiment votre crawl budget ?
📅
Declaration officielle du (il y a 7 ans)
TL;DR

Google affirme que les URLs basées sur des hashes (#) ne sont pas indexées, contrairement à celles utilisant pushState. Cette limitation technique impacte directement les single-page applications (SPA) qui reposent encore sur des fragments d'URL pour la navigation. Concrètement, si vos routes utilisent des hashes, Google ne voit qu'une seule page — votre contenu reste invisible pour l'indexation.

Ce qu'il faut comprendre

Quelle est la différence technique entre hash et pushState ?

Les URLs avec hash utilisent le symbole # pour définir des ancres ou des routes côté client (ex: example.com/#/produit). Historiquement, les navigateurs ne transmettent pas la partie après le # au serveur — c'est un mécanisme purement client-side. Google ignore cette portion lors du crawl, car il la considère comme un identifiant de fragment, pas comme une ressource distincte.

La méthode pushState, introduite avec l'API HTML5 History, permet de modifier l'URL affichée sans recharger la page (ex: example.com/produit). Le serveur reçoit cette URL complète lors d'un accès direct, et Google peut la crawler comme n'importe quelle page classique. C'est le standard pour les applications JavaScript modernes qui veulent rester crawlables.

Pourquoi cette distinction pose-t-elle problème aux SPA ?

Les single-page applications (React, Vue, Angular) ont longtemps utilisé les hashes pour gérer la navigation sans rafraîchir la page. C'était simple à implémenter et ne nécessitait aucune configuration serveur. Mais cette facilité a un prix : Google voit une seule URL, celle sans le hash.

Résultat ? Un site avec 50 pages produits différentes, toutes accessibles via example.com/#/produit-1, #/produit-2, etc., n'apparaît dans l'index que comme une unique page : example.com. Le contenu dynamique chargé via JavaScript après le hash reste invisible pour le moteur. C'est un problème critique pour les sites e-commerce ou médias qui dépendent du trafic organique.

Google a-t-il déjà tenté de crawler les hashes ?

Oui, et c'est là que ça devient historiquement intéressant. Google a introduit un schéma temporaire avec #! (hashbang) pour permettre l'indexation des contenus AJAX. Ce système exigeait que le serveur fournisse une version HTML statique de la page lors d'une requête spéciale (_escaped_fragment_). C'était bancal, lourd à maintenir, et Google l'a officiellement abandonné.

Depuis, la position est claire : pas d'indexation des hashes. Google pousse les développeurs vers pushState et le rendu côté serveur (SSR) ou l'hydratation. La déclaration de Splitt ne fait que confirmer une règle en vigueur depuis des années, mais que beaucoup de sites ignorent encore.

  • Les URLs avec hash (#) ne sont pas transmises au serveur et restent invisibles pour Google
  • pushState permet de créer des URLs crawlables sans rechargement de page
  • L'ancien système hashbang (#!) a été abandonné par Google
  • Les SPA doivent utiliser le routage côté client avec pushState ou implémenter du SSR
  • Sans pushState, un site avec 100 routes n'apparaît dans l'index que comme une seule page

Avis d'un expert SEO

Cette déclaration est-elle cohérente avec les pratiques observées sur le terrain ?

Absolument. Les audits SEO révèlent régulièrement des sites SPA avec zéro pages indexées malgré un contenu riche, uniquement parce qu'ils utilisent des hashes. Google Search Console affiche alors une seule URL dans l'index, et les développeurs sont perplexes devant l'absence de trafic organique. Ce n'est pas un bug, c'est le comportement documenté du crawler.

Cependant, il faut nuancer : certains sites hybrides utilisent des hashes pour des éléments de navigation secondaires (onglets, modales, filtres) sans impact SEO négatif. Le problème apparaît quand le hash définit le contenu principal. Si votre article de blog est accessible uniquement via example.com/#article-123, il n'existe pas aux yeux de Google.

Quelles sont les exceptions ou cas limites à surveiller ?

Google indexe les ancres classiques (liens vers #section-2 d'une même page) pour les featured snippets et la navigation interne, mais il ne les traite pas comme des pages distinctes. Si vous utilisez des hashes pour du scroll vers une section, pas de souci. Le problème concerne uniquement les routes applicatives.

Autre point rarement mentionné : certains frameworks JavaScript modernes (Next.js, Nuxt) gèrent automatiquement pushState et le SSR, rendant ce problème invisible pour le développeur. Mais si vous construisez une SPA custom ou utilisez une ancienne version de React Router en mode hash, vous êtes directement concerné. [A vérifier] : Google pourrait-il un jour crawler les hashes dans un contexte d'applications web progressives ? Rien ne l'indique aujourd'hui.

Faut-il migrer un site existant en hash vers pushState ?

Si votre site génère du trafic SEO significatif, oui, c'est une priorité technique. Mais attention : migrer vers pushState exige une configuration serveur correcte. Toutes les routes doivent renvoyer la même application JavaScript avec un code 200, sinon les accès directs (via un lien externe ou un bookmark) génèrent des 404.

Concrètement, si un utilisateur accède à example.com/produit/chaussures, le serveur doit servir l'application, puis JavaScript charge le contenu correspondant. Sans cette config (redirections Apache/Nginx vers index.html), la migration casse le site. C'est un chantier technique qui nécessite tests et coordination entre dev et SEO.

⚠️ Attention : passer de hash à pushState change toutes vos URLs. Prévoyez des redirections 301 si des pages en hash étaient linkées depuis l'externe (peu probable, mais à vérifier). Implémentez un monitoring de crawl avant/après pour détecter les erreurs 404.

Impact pratique et recommandations

Que faut-il faire concrètement pour migrer vers pushState ?

Première étape : auditer votre architecture. Si vous utilisez un framework moderne (Next.js, Nuxt, Angular en mode HTML5), pushState est probablement déjà actif. Vérifiez la configuration du routeur : cherchez des options comme mode: 'history' (Vue Router) ou useHash: false (Angular). Si vous trouvez mode: 'hash', c'est là qu'il faut agir.

Deuxième étape : configurer le serveur. Toutes les routes doivent pointer vers votre fichier HTML principal. Avec Apache, ajoutez une règle de réécriture dans .htaccess. Avec Nginx, utilisez try_files pour renvoyer index.html sur toute route inconnue. Sans ça, un accès direct à /produit/123 génère un 404 côté serveur, même si JavaScript sait gérer cette route.

Comment vérifier que Google crawle correctement après la migration ?

Utilisez l'outil d'inspection d'URL dans Search Console. Testez une route spécifique (ex: /categorie/seo) et vérifiez que Google voit le contenu attendu dans le rendu HTML. Si le rendu affiche une erreur 404 ou reste vide, votre config serveur est incorrecte. Le test d'URL en direct simule le crawl réel.

Surveillez aussi les rapports de couverture. Après migration, vous devriez voir apparaître progressivement les nouvelles URLs dans l'index. Si le nombre de pages indexées stagne ou chute, c'est un signal d'alerte. Google ne doit jamais rencontrer d'erreur 404 sur vos routes pushState. Un monitoring Log File Analysis permet de repérer les codes HTTP renvoyés au bot.

Quelles erreurs éviter lors de l'implémentation ?

L'erreur classique : oublier la balise base href ou mal gérer les chemins relatifs. Quand l'URL change côté client, les ressources CSS/JS peuvent se charger depuis un chemin incorrect. Testez chaque route en accès direct (F5 ou nouvel onglet) pour vérifier que tout charge correctement, pas seulement en navigation interne.

Autre piège : les liens internes en dur avec hash. Si votre ancien code contient des <a href="#/produit">, remplacez-les par des composants de routeur qui génèrent des URLs pushState. Sinon, vous mélangez les deux systèmes, créant des incohérences. Pensez aussi aux sitemaps : générez-les avec les nouvelles URLs sans hash.

  • Auditer la configuration actuelle du routeur JavaScript (hash ou history)
  • Configurer le serveur pour renvoyer index.html sur toutes les routes applicatives
  • Tester chaque route en accès direct pour détecter les 404 serveur
  • Valider le rendu HTML avec l'outil d'inspection Search Console
  • Mettre à jour les sitemaps et les liens internes
  • Monitorer les logs de crawl pour repérer les erreurs post-migration
La migration vers pushState est un chantier technique qui touche à la fois le code JavaScript et la configuration serveur. Pour les sites complexes avec des centaines de routes, cette transformation peut s'avérer délicate à orchestrer sans régression. Si vous manquez de ressources internes ou voulez sécuriser la migration sans perte de trafic, faire appel à une agence SEO spécialisée peut vous éviter des erreurs coûteuses et accélérer le retour sur investissement de cette refonte technique.

❓ Questions frequentes

Est-ce que Google indexe les URLs avec hash si j'utilise du rendu côté serveur ?
Non. Même avec SSR, la portion après le # reste côté client et n'est jamais transmise au serveur lors du crawl. Google ne voit que l'URL avant le hash.
Puis-je utiliser des hashes pour des filtres ou des onglets sans impact SEO ?
Oui, si le contenu principal reste accessible sans hash. Les hashes pour la navigation secondaire (onglets, modales) ne posent pas problème tant que chaque page indexable a une URL propre.
Quelle est la différence entre pushState et replaceState ?
pushState ajoute une entrée dans l'historique du navigateur, replaceState modifie l'entrée actuelle sans en créer de nouvelle. Pour le SEO, les deux permettent de changer l'URL visible, mais pushState est recommandé pour la navigation.
Mon site utilise Angular en mode hash, que se passe-t-il si je ne change rien ?
Google continuera à indexer uniquement l'URL racine. Toutes vos routes internes resteront invisibles dans les résultats de recherche, limitant drastiquement votre trafic organique.
Faut-il rediriger les anciennes URLs en hash après migration ?
Techniquement, les URLs en hash n'étaient pas indexées, donc il n'y a pas de redirection serveur à faire. En revanche, un script JavaScript peut détecter un hash dans l'URL et rediriger côté client vers la nouvelle route propre.
🏷 Sujets associes
Crawl & Indexation Nom de domaine

🎥 De la même vidéo 4

Autres enseignements SEO extraits de cette même vidéo Google Search Central · durée 14 min · publiée le 27/06/2019

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