Après avoir lu la politique de Google sur la rendu explorable des contenus générés par Ajax, ainsi que de nombreux blog posts de développeurs et discussions sur Stackoverflow sur le sujet, je suis arrivé à la conclusion qu'il n'y a pas de moyen de rendre explorable un site généré uniquement en JavaScript/Ajax. Un site sur lequel je travaille actuellement n'indexe pas une bonne partie de son contenu. Toute la couche de présentation de notre contenu non indexé est construite en JavaScript en générant du HTML à partir de JSON retourné par des appels de services web basés sur Ajax, et nous pensons que Google n'indexe pas le contenu à cause de cela. Est-ce correct ?
La seule solution semble être d'avoir aussi une version "de secours" du site pour les moteurs de recherche (en particulier Google) où tout le HTML et le contenu seraient générés comme cela a été fait traditionnellement, du côté serveur. Pour les clients avec JavaScript activé, il semble que nous pourrions utiliser essentiellement la même approche que nous faisons maintenant : utiliser JavaScript pour générer du HTML à partir de JSON chargé de manière asynchrone.
D'après ce que j'ai pu lire, la meilleure pratique actuelle pour appliquer le principe DRY dans la création de sites Ajax générés explorables comme décrit ci-dessus est d'utiliser un moteur de templating qui peut utiliser les mêmes modèles côté client et côté serveur. Pour les clients avec JavaScript activé, le moteur de templating côté client, par exemple mustache.js, transformerait les données JSON envoyées par le serveur en HTML tel que défini par sa copie d'un fichier de modèle. Et pour les moteurs de recherche et les clients sans JavaScript, l'implémentation côté serveur du même moteur de templating, par exemple mustache.java, opérerait de manière similaire sur sa copie du même fichier de modèle exact pour produire du HTML.
Si cette solution est correcte, en quoi est-elle différente des approches utilisées il y a 4 ou 5 ans par les sites avec une forte présence frontale, où les sites devaient essentiellement maintenir deux copies du code de templating, une pour les utilisateurs avec JavaScript activé (pratiquement tout le monde) et une autre copie (par exemple dans FreeMarker ou Velocity) pour les moteurs de recherche et les navigateurs sans JavaScript activé (pratiquement personne) ? Il semble qu'il devrait y avoir une meilleure façon de faire les choses.
Cela implique-t-il que deux couches de modèles de templating doivent être maintenues, une côté client et une côté serveur ? Dans quelle mesure est-il conseillé de combiner ces modèles côté client avec un framework front-end MVC (MV/MVVC) comme Backbone.js, Ember.js, ou YUI App Library ? Comment ces solutions affectent-elles les coûts de maintenance ? Serait-il préférable d'essayer de le faire sans introduire de nouveaux frameworks - un nouveau moteur de templating et un framework front-end MVC - dans la pile technologique d'une équipe de développement ? Y a-t-il un moyen de le faire de manière moins redondante ?
Si cette solution n'est pas correcte, alors y a-t-il quelque chose que nous ne comprenons pas et que nous pourrions faire mieux avec notre JavaScript pour maintenir notre structure actuelle de génération asynchrone de HTML à partir de JSON et l'indexer, afin de ne pas avoir à introduire quelque chose de nouveau dans la pile d'architecture ? Nous aimerions vraiment éviter de devoir mettre à jour deux versions de la couche de présentation lorsque les besoins métier changent.