
Remarque : je ne suis pas un développeur AJAX, merci donc de me signaler toute erreur ou approximation que vous pourriez relever dans cet article.
Conseils SEO pour un site en AJAX
L'info a été fournie par Kazushi Nagayama sur le blog officiel de Google pour les webmasters le 14 octobre 2015 :
Le support des sites en AJAX continue mais Google ne recommande plus la technique Escaped FragmentClick to TweetA la place du fameux _escaped_fragment_
, du headless browser et des snapshots HTML (détails), Google conseille d'utiliser des méthodes modernes comme l'amélioration progressive (progressive enhancement). Par exemple, vous pouvez utiliser la fonction pushState() introduite par HTML5 (détails).
Concrètement, Google assure que :
A condition de ne pas bloquer le crawl de Googlebot (JS, CSS), Google peut indexer les contenus AJAXClick to TweetCas particuliers d'indexation AJAX
Si votre site est actuellement basé sur les recommandations de 2009 de Google (_escaped_fragment_
), votre site continuera d'être indexé par Google. Par contre, Google vous conseille de changer de technologie au cours de votre prochaine refonte et d'utiliser les bonnes pratiques en vigueur actuellement. Concrètement, au lieu de crawler les URL en _escaped_fragment_
, Google crawle, génère l'affichage et indexe les pages avec #!
dans l'URL.
Si vous migrez des URL en _escaped_fragment_
aux URL avec #!
, il ne semble pas nécessaire de mettre en place des redirections. Ce point sera précisé dans mon article dès que j'aurai pu obtenir toutes les clarifications nécessaires de la part de Google.
Si vous utilisez un framework Javascript et que votre serveur web fournit un pré-rendu des pages, faites attention de ne pas faire de traitement spécifique pour Google. Google recommande de ne pas fournir de pré-rendu des pages seulement pour Google, mais de le faire pour que les internautes bénéficient de meilleures performances. D'ailleurs, Google conseille de suivre les consignes de l'amélioration progressive. Si vous fournissez un pré-rendu des pages, assurez-vous que le contenu fourni à Googlebot correspond bien à la même expérience utilisateur que celle de l'internaute (aussi bien sur le rendu visuel que sur l'interaction possible). A l'inverse, si le contenu fourni à Googlebot diffère de celui fourni à un utilisateur standard, c'est considéré comme du cloaking qui enfreint les consignes de Google aux webmasters...
En résumé
Google ne recommande plus la technique d'indexation AJAX qu'il avait proposée en 2009.
Google annonce savoir crawler, rendre et indexer les pages en AJAX aussi bien qu'un navigateur moderne.
Néanmoins, j'ai cru comprendre que seules les URL avec #!
pourront être indexées.
Pour ma part, je continue de recommander de faire un site en HTML5 quand c'est possible, ça sera plus simple et efficace.
Pour l'instant nous ne disposons pas d'autres informations de la part de Google. Si un point n'est pas clair, relisez la source officielle ou postez vos questions dans les commentaires.
Source de l'image : Shutterstock (sous licence)
Prerender propose de rendre le contenu indexable pour les agents de recherche, c'est gratuit jusqu'à 250 pages. Sinon voici l'article auquel Julien fait surement référence https://prerender.io/js-seo/angularjs-seo-get-your-site-indexed-and-to-the-top-of-the-search-results/
@Kekoblo : je ne m'y connais pas assez, mais ça ressemble vraiment à une "rustine", c'est-à-dire une mauvaise solution "faute de mieux". Ca ressemble à un système de cache ?
L'objectif pour référencer des pages en ajax est certainement d'avoir des urls distinctes (système d'ancre), sinon je ne vois pas trop comment c'est possible.
Le tout est de savoir quelle nomenclature est préférable : #! ou #/ (vue sur certains sites), ...
Alors attention, il y a quelques informations qui selon moi sont manquantes...
Si on demande à charger du contenu en AJAX dans la zone d'une page, donc imaginons on chope via une API des informations d'un flux RSS et qu'on affiche en Javascript son contenu dans une sidebar.
Dans ce cas là, on se fiche d'avoir du #!, Google fera un rendu correct de la page...
Par contre, si par exemple, on a une sorte de système qui affiche des informations différentes sur la page selon l'url, alors oui il faudra utiliser ce système pour avoir toutes les pages référencées...
Imaginons on a un annuaire d'utilisateur, il faudra par exemple avoir "#!hector" pour qu'Hector soit référençable avec le bon contenu.
D'ailleurs Google préconise ce "nouveau" système depuis les débuts d'AngularJS, je ne connais pas la date de départ de son développement mais on parle en années.
Merci Julien pour ces précisions intéressantes
"Néanmoins, j'ai cru comprendre que seules les URL avec #! pourront être indexées."
Ca c'était avant. Les ancres pour distinguer les pages chargées en AJAX, c'est du passé ou presque : http://caniuse.com/#search=pushstate.
oh tiens, une URL qui se fiche des (anciennes) recommendations de Google, qui n'utilise pas pushState et qui est pourtant bien référencée ! ;-)
@joey : merci pour l'exemple, même si dans ce cas particulier Google n'indexe pas cette URL à 100% correctement, mais c'est sans doute dû au fait que cette URL n'a peut-être pas de lien interne (c'est un résultat de recherche). Je dis ça car avec la commande
info:http://caniuse.com/#search=pushstate
Google m'indique avoir indexé l'URL, pourtant l'URL indiquée en résultat est une autre. Par ailleurs, j'ai du mal à accéder à la version en cache des pages indexées de ce genre.Hello,
Donc pour résumer, plus besoin de pages alternatives avec ?query&_escaped_fragment_=...
Google indexe les pages chargées avec ajax directement si elle utilise la solution du #! dans l'url.
C'est bien ça ?
@JM : je ne suis pas certain qu'il soit réellement obligatoire d'avoir
#!
dans l'URL.