Declaration officielle
Autres déclarations de cette vidéo 9 ▾
- 13:50 Faut-il vraiment abandonner les balises hreflang dans les liens d'ancrage ?
- 18:29 Faut-il vraiment corriger toutes les erreurs 404 remontées dans la Search Console ?
- 23:48 Les avis clients et étoiles ont-ils vraiment un impact sur le classement SEO organique ?
- 27:56 Pourquoi vos rankings chutent-ils sans que vous ayez touché à vos pages ?
- 29:49 Faut-il vraiment désavouer les backlinks toxiques ou Google s'en occupe-t-il seul ?
- 37:15 Les impressions Search Console comptent-elles vraiment ce que vous croyez ?
- 42:12 La traduction de contenu est-elle considérée comme du duplicate content par Google ?
- 53:06 Les paramètres de langue dans l'URL peuvent-ils vraiment être indexés correctement par Google ?
- 54:05 Faut-il vraiment maintenir les redirections 301 pendant un an après une migration de site ?
Google ignore généralement les fragments de hachage (#) pour l'indexation, ce qui pose problème pour les applications JavaScript utilisant ce système de navigation. La solution technique recommandée passe par l'adoption de l'API History HTML5, qui permet à Google de crawler et indexer chaque état de l'application comme une URL distincte. Un chantier technique non négligeable pour les sites reposant massivement sur le routing côté client.
Ce qu'il faut comprendre
Que sont exactement les fragments de hachage et pourquoi Google les ignore-t-il ?
Les fragments de hachage (aussi appelés hash fragments ou anchors) sont la partie d'une URL qui suit le symbole #. Historiquement, ils servaient à pointer vers une section spécifique d'une page HTML grâce aux ancres. Leur particularité technique : ils ne sont jamais envoyés au serveur lors d'une requête HTTP.
Cette caractéristique explique pourquoi Google ne les considère pas pour l'indexation. Lorsque Googlebot demande exemple.com/page#section, le serveur ne reçoit que exemple.com/page. Le fragment reste côté client, traité uniquement par le navigateur. Pour Google, exemple.com/page#section1 et exemple.com/page#section2 représentent la même URL : exemple.com/page.
Pourquoi les applications JavaScript ont-elles massivement adopté cette approche ?
Les frameworks JavaScript comme Angular, React ou Vue ont longtemps utilisé le hash routing par défaut. Cette méthode permet de changer l'état visible de l'application sans recharger la page ni interroger le serveur. C'est simple à implémenter et ne nécessite aucune configuration serveur particulière.
Le problème surgit quand ces applications génèrent du contenu distinct pour chaque fragment. Une boutique en ligne avec shop.com/#/product/123 et shop.com/#/product/456 affiche deux produits différents, mais Google n'indexera qu'une seule URL : shop.com/. Le contenu unique de chaque produit reste invisible pour les moteurs de recherche.
Quelle différence avec l'API History HTML5 recommandée par Google ?
L'API History HTML5 (méthodes pushState et replaceState) modifie l'URL affichée dans la barre d'adresse sans recharger la page, mais cette fois sans utiliser de fragment de hachage. L'application peut transformer shop.com/#/product/123 en shop.com/product/123, une vraie URL que le serveur peut recevoir et traiter.
Cette approche nécessite une configuration serveur adaptée. Toutes les routes de l'application doivent rediriger vers le point d'entrée JavaScript (généralement index.html) pour que l'application prenne le relais côté client. C'est plus complexe techniquement, mais c'est la seule façon de rendre le contenu crawlable et indexable correctement.
- Les fragments (#) ne sont jamais transmis au serveur, donc invisibles pour les crawlers traditionnels
- Une URL avec fragment = une seule page aux yeux de Google, quel que soit le contenu affiché côté client
- L'API History HTML5 génère de vraies URL distinctes que Google peut crawler et indexer séparément
- Le passage à History nécessite une configuration serveur pour gérer le fallback vers l'application
- Les applications modernes privilégient massivement History, le hash routing devient obsolète
Avis d'un expert SEO
Cette déclaration reflète-t-elle vraiment le comportement observé de Google ?
La position de Mueller est cohérente avec quinze ans d'observations terrain. Google a toujours traité les fragments comme des marqueurs côté client, pas comme des segments d'URL distincts. Les tests empiriques le confirment : créer du contenu unique derrière des hashes sans système de prérendu conduit systématiquement à une non-indexation de ce contenu.
Nuance importante : Mueller dit "généralement". Dans certains cas très spécifiques, Google peut exécuter le JavaScript et constater que le contenu change selon le fragment. Mais cette capacité reste limitée et imprévisible. Compter dessus relève du pari, pas d'une stratégie SEO sérieuse.
Quelles applications risquent vraiment de perdre leur visibilité ?
Les Single Page Applications (SPA) anciennes utilisant le hash routing sont les premières concernées. Les sites construits avec Angular 1.x ou les premières versions de Backbone.js ont massivement adopté cette approche. Si ces sites n'ont pas migré vers History ou implémenté un système de prérendu, ils perdent potentiellement 90 % de leur contenu indexable.
Les blogs utilisant des systèmes de filtrage côté client avec hashes (blog.com/#category/seo) rencontrent le même problème. Google indexe la page d'accueil, ignore les catégories. [À vérifier] : certains rapportent que Google commence à mieux gérer ces cas dans Search Console, mais aucune confirmation officielle ni données quantitatives disponibles.
L'API History résout-elle vraiment tous les problèmes d'indexation ?
History améliore considérablement la situation mais ne garantit pas automatiquement une indexation parfaite. Google doit toujours exécuter le JavaScript pour voir le contenu final, ce qui introduit de la latence et consomme du crawl budget. Les sites avec des milliers de pages dynamiques peuvent encore rencontrer des difficultés.
La solution la plus robuste reste le Server-Side Rendering (SSR) ou le prérendu statique. Next.js, Nuxt.js et les solutions de prérendu comme Prerender.io envoient du HTML complet à Googlebot, éliminant toute dépendance à l'exécution JavaScript. C'est techniquement plus lourd, mais infiniment plus fiable pour garantir l'indexation.
Un autre point rarement mentionné : même avec History, les applications mal architecturées peuvent générer des problèmes de duplication de contenu si le serveur ne renvoie pas les bons codes de statut HTTP. Une page inexistante doit retourner un 404, pas un 200 avec un message d'erreur côté client.
Impact pratique et recommandations
Comment diagnostiquer si mon site souffre de ce problème de fragments ?
Premier réflexe : ouvrir votre site et naviguer. Si l'URL dans la barre d'adresse contient des symboles # suivis de chemins (/#/products, /#page/about), vous êtes concerné. Pas de panique si vous voyez des ancres simples (#contact) pour le scroll interne, ce n'est pas le sujet ici.
Deuxième étape : interroger Google avec site:votredomaine.com dans la recherche. Comparez le nombre de pages indexées avec le nombre réel de pages de contenu unique que votre site génère. Un écart significatif (indexation de 50 pages alors que vous en avez 500) suggère un problème structural d'indexation, potentiellement lié aux fragments ou à l'exécution JavaScript.
Quelle solution technique adopter concrètement ?
La migration vers l'API History nécessite deux chantiers parallèles. Côté JavaScript, remplacez le hash routing par History routing dans votre framework. Angular propose PathLocationStrategy, React Router utilise BrowserRouter au lieu de HashRouter, Vue Router accepte le mode history.
Côté serveur, configurez un fallback universel. Toutes les URLs de l'application doivent renvoyer le fichier HTML principal pour que le JavaScript prenne le relais. Avec Apache, utilisez un .htaccess avec RewriteRule. Nginx nécessite une directive try_files dans la configuration. Attention : cette configuration peut masquer de vrais 404 si elle est mal implémentée.
Faut-il envisager des solutions plus robustes que History seul ?
Si votre site dépend massivement du trafic organique, History seul reste un compromis fragile. Le prérendu dynamique détecte les user-agents de crawlers et leur sert du HTML statique pendant que les vrais utilisateurs reçoivent l'application JavaScript. Cloudflare Workers, Prerender.io ou Rendertron offrent cette fonctionnalité.
Le SSR (Server-Side Rendering) représente la solution la plus pérenne. Next.js pour React, Nuxt.js pour Vue, ou Angular Universal transforment votre SPA en application hybride générant du HTML côté serveur. C'est un investissement technique lourd mais qui élimine 90 % des problèmes d'indexation liés au JavaScript.
- Auditer toutes les URLs de votre site pour identifier l'usage de fragments de hachage pour la navigation
- Vérifier dans Google Search Console l'écart entre URLs découvertes et URLs indexées
- Tester l'outil "Inspection d'URL" sur vos pages avec fragments pour voir ce que Google rend réellement
- Migrer le routing vers History API si vous utilisez encore le hash routing
- Configurer le serveur pour rediriger toutes les routes vers le point d'entrée de l'application
- Implémenter un système de prérendu ou de SSR si le crawl budget est critique pour votre business
❓ Questions frequentes
Google peut-il quand même indexer du contenu derrière un fragment de hachage ?
Les ancres de navigation interne (#contact, #section2) posent-elles problème pour le SEO ?
Faut-il rediriger les anciennes URLs avec # vers les nouvelles sans fragment ?
L'API History fonctionne-t-elle sur tous les navigateurs ?
Combien de temps prend une migration de hash routing vers History ?
🎥 De la même vidéo 9
Autres enseignements SEO extraits de cette même vidéo Google Search Central · durée 56 min · publiée le 12/06/2018
🎥 Voir la vidéo complète sur YouTube →
💬 Commentaires (0)
Soyez le premier à commenter.