Est pushState
mauvais si vous avez besoin que les moteurs de recherche lisent votre contenu ?
Non, la discussion sur pushState
a pour but d'accomplir le même processus général que les hashbangs, mais avec des URLs de meilleure qualité. Réfléchissez à ce qui se passe réellement lorsque vous utilisez des hashbangs...
Vous dites :
Avec les hashbangs, Google sait qu'il doit se rendre à l'URL du fragment échappé pour obtenir son contenu statique.
En d'autres termes,
- Google voit un lien vers
example.com/#!/blog
- Demandes de Google
example.com/?_escaped_fragment_=/blog
- Vous retourner un instantané du contenu que l'utilisateur devrait voir
Comme vous pouvez le constater, il s'appuie déjà sur le serveur. Si vous ne fournissez pas un instantané du contenu du serveur, votre site ne sera pas indexé correctement.
Alors comment Google va-t-il voir quelque chose avec pushState ?
Avec pushState, google ne voit rien car il ne peut pas utiliser le javascript pour charger le json et créer ensuite le modèle.
En fait, Google va voir tout ce qu'il peut demander à site.com/blog
. Une URL pointe toujours vers une ressource sur le serveur, et les clients obéissent toujours à ce contrat. Bien sûr, pour les clients modernes, Javascript a ouvert de nouvelles possibilités de récupération et d'interaction avec le contenu sans une URL. page rafraîchir, mais les contrats sont les mêmes.
Donc l'élégance voulue de pushState
c'est qu'il sert le même contenu à tous les utilisateurs, anciens et nouveaux, compatibles JS ou non, mais les nouveaux utilisateurs bénéficiez d'une expérience améliorée .
Comment faire pour que Google voie votre contenu ?
-
L'approche Facebook - servir le même contenu à l'URL site.com/blog
dans laquelle votre application client se transformerait lorsque vous pousseriez /blog
sur l'État. (Facebook n'utilise pas pushState
pas encore à ma connaissance, mais ils le font avec les hashbangs)
-
L'approche Twitter - rediriger toutes les URL entrantes vers l'équivalent hashbang. En d'autres termes, un lien vers "/blog" pousse /blog
sur l'État. Mais s'il est demandé directement, le navigateur arrive à #!/blog
. (Pour Googlebot, cela conduirait alors à _escaped_fragment_
comme vous le souhaitez. Pour les autres clients, vous pouvez pushState
de retour à la jolie URL).
Alors, est-ce que vous perdez le _escaped_fragment_
capacité avec pushState
?
Dans deux commentaires différents, vous avez dit
Le fragment échappé est complètement différent. Vous pouvez servir du contenu non thématique pur, du contenu en cache, et ne pas être soumis à la même charge que les pages normales.
La solution idéale serait que Google s'occupe des sites JavaScript ou mette en place un moyen de savoir qu'il y a un fragment d'URL échappé même pour les sites pushstate (robots.txt ?).
Les avantages que vous mentionnez ne sont pas limités à _escaped_fragment_
. Il se charge de la réécriture pour vous et utilise un fichier spécialement appelé GET
Le paramètre est vraiment un détail d'implémentation. Il n'y a rien de vraiment spécial à son sujet que vous ne pourriez pas faire avec des URLs standards - en d'autres termes, réécrire /blog
a /?content=/blog
par vous-même en utilisant mod_rewrite ou l'équivalent de votre serveur.
Et si vous ne serviez pas du tout de contenu côté serveur ?
Si vous ne pouvez pas réécrire les URLs et servir un certain type de contenu à l'adresse /blog
(ou tout autre état que vous avez poussé dans le navigateur), alors votre serveur ne respecte plus vraiment le contrat HTTP.
C'est important car le rechargement d'une page (pour quelque raison que ce soit) entraînera l'extraction du contenu de cette URL. _(Voir https://wiki.mozilla.org/Firefox_3.6/PushState_Security_Review - "view-source et reload vont tous deux récupérer le contenu de la nouvelle URI si celle-ci a été poussée.")_
Ce n'est pas que dessiner les interfaces utilisateur une fois sur le côté client et charger le contenu via des API JS soit un mauvais objectif, c'est juste que cela n'est pas vraiment pris en compte avec HTTP et les URL et que ce n'est pas rétro-compatible.
En ce moment, C'est exactement ce à quoi sont destinés les hashbangs - pour représenter des états de page distincts qui sont navigués sur le client et non sur le serveur. Un rechargement, par exemple, chargera l'élément même qui peut ensuite lire, analyser et traiter la valeur hachée.
Il se trouve juste qu'ils ont a également été utilisé (notamment par Facebook et Twitter) pour changer l'historique vers un emplacement côté serveur sans rafraîchissement de la page. C'est dans ces cas d'utilisation que les gens recommandent d'abandonner les hashbangs pour le pushState.
Si vous rendez tout le contenu côté client, vous devez penser à pushState
comme faisant partie d'une API d'historique plus pratique, et non comme un moyen d'éviter d'utiliser les hashbangs.
0 votes
Note aux futurs lecteurs : cette question est obsolète . Lisez la déclaration officielle de Google - en bref, le support de googlebot JS maintenant.