SEO et web 2.0 : Quand les moteurs de recherche pourront-ils indexer correctement JavaScript ?
Tous les webmasters (ou presque) savent que les robots ont du mal avec les sites Ajax, ces derniers ne sachant pas interpréter JavaScript, il est difficile de « déduire » le contenu dynamique d’un site web en Ajax.
Mais cette « vérité » pourra-t-elle changer un jour ?
Le paradoxe de la SEO web 2.0
Les sites web surfent aujourd’hui sur la vague du 2.0, de l’Ajax, des contenus dynamiques, des effets visuels …etc, mais si comme moi vous avez eu à faire à de tels sites en SEO, vous êtes surement d’accord pour dire que :
- Cela engendre un double travail : tous le contenu dynamique doit avoir son équivalent en statique
- Il n y a pas de standard ou de « best-practice » générique puisque chaque cas ou presque est unique
Et quand on demande au support de notre cher ami google la réponse est sans appel :
Google peut-il indexer les contenus JavaScript dans ma page ?
La recherche google, n’est pas capable d’indexer les contenu dynamique JavaScript, la règle générale pour être sure que votre page web peut être indexée par google est de vous assurer que tout le text devant être indexé soit visible par un navigateur text, ou un navigateur dont javascript a été désactivé (traduit depuis : http://www.google.com/support/customsearch/bin/answer.py?answer=72366)
Mais techniquement, est-il possible d’indexer du contenu dynamique ?
Aujourd’hui, on a tous l’arsenal technique nécessaire pour indexer un site dynamique JavaScript.
Le projet node.js, est un serveur web interprétant JavaScript coté serveur il est basé sur le moteur V8 (utilisé dans google chrome).
Node.js permet de charger des librairies que vous utilisez coté client, comme jquery ou autre en plus des librairies spécifiques coté serveur (librairie de gestion des sockets par exemple) .
Node.js est la preuve donc qu’interpréter JavaScript coté serveur n’est pas une illusion.
Mais interpréter JavaScript coté serveur n’est pas suffisant, car le contenu dynamique réagit à des évènements internes ou externes.
Ce que j’appels événements internes sont les événements déclenchés par le moteur JavaScript (ou le navigateur d’un point de vue utilisateur), exemples : chargement de la page, fin de chargement du contenu HTML, fin du téléchargement des images …etc
Les événements externes sont ceux déclenchés par l’utilisateur : clique, survole de sourie …etc.
Un algorithme simpliste pour indexer les contenus dynamiques.
Voici une possibilité – certainement loin d’être parfaite – qui permettrait d’indexer des pages dynamiques.
Extraction du code HTML dans une variable.
Déclenchement des événements internes.
Collecte des événements externes.
Pour chaque événement
Déclencher un événement
Extraction du code HTML engendré suite à l’événement
Diff entre HTML original et HTML engendré
Traitement du diff comme une page enfant du site
Fin pour
Quelques problèmes liés à une indexation du JavaScript interprété coté serveur
- La hiérarchie des événements : un événement peut avoir une influence sur un autre, on peut très bien s’arranger pour qu’un clique sur un même élément déclenche à chaque fois une action différente. Mais ceci est un faux problème puisque la même chose peut être faite avec du code coté serveur, et ça n’empêche pas les pages d’être indexées.
- Ajax : les requêtes ajax feront appel à des serveurs externes, le résultat est donc non maitrisé, peut potentiellement ralentir le traitement d’une page, voir, engendrer une surcharge du serveur cible. Une solution possible serait de différer le traitement des requêtes ajax en les mettant dans un pool. L’indexation d’une page dynamique se fera alors en trois temps : collecte de tous les événements ajax dans un pool, traitement du pool, indexation de la page.
- Le blackhat SEO : Avec du code dynamique il devient encore plus facile de tromper les moteurs, des événements cachés peuvent très bien être enregistrés avec javascript, il ne seront jamais déclenchés par des utilisateurs, mais uniquement par le moteur pour produire du faux contenu.
- Il y en a d’autres … 🙂
Une autre approche pour indexer le contenu JS/dynamique, consisterait à utiliser les navigateurs pour renvoyer au moteur les différentes versions générées d’une page au fur et à mesure de la navigation (avec l’accord de l’utilisateur bien sûr 😉 ) .
Une nouvelle génération de moteurs de recherche ?
Il est plus que temps que l’un des moteurs de recherche se mettent à indexer ces contenus, d’autant plus que la tendance actuelle vas vers les sites web riches dont une bonne partie du contenu est JS/dynamique.
Je suis curieux de voir comment les moteurs s’y prendront pour résoudre ce problème, et quel sera l’approche la plus efficace et qui donnerait les résultats les plus pertinents.
Il y a là peut être un créneau à prendre pour le prochains moteur qui souhaite détrôner le géant Google, à moins que ce prochain moteur soit … google lui-même 😀