pushState et SEO
Beaucoup de gens ont été dire, utiliser pushState plutôt que hashbang.
Ce que je ne comprends pas, comment voulez-vous être moteur de recherche convivial, sans l'aide de hashbang?
Sans doute votre pushState contenu est généré par un code JavaScript côté client.
Le scénario est tellement:
Je suis sur example.com
. Mon utilisateur clique sur un lien: href="example.com/blog"
pushState capture de clic, les mises à jour de l'URL, saisit un fichier JSON à partir de quelque part, et crée la liste de messages de blog dans la zone de contenu.
Avec hashbangs, google sait aller à l'escaped_fragment URL pour obtenir leur contenu statique.
Avec pushState, Google ne voit rien car il ne peut pas utiliser le code JavaScript à charger le JSON et par la suite créer le modèle.
La seule façon que je peux voir, c'est pour rendre le modèle sur le côté serveur, mais qui nie complètement les avantages de pousser la couche d'application pour le client.
Donc suis-je obtenir ce droit, pushState n'est pas SEO friendly pour des applications côté client à tous?
- Note pour les futurs lecteurs: cette question est obsolète. Lire la officiel de Google de l'instruction bref, googlebot soutien JS maintenant.
Vous devez vous connecter pour publier un commentaire.
Que sur l'utilisation de la balise meta que Google suggère pour ceux qui ne veulent pas de hachage tape dans l'Url:
<meta name="fragment" content="!">
Voir ici pour plus d'info:
https://developers.google.com/webmasters/ajax-crawling/docs/getting-started
Malheureusement, je ne pense pas que Nicole avait clarifié la question que je pensais que l'OP avait. Le problème est simplement que nous ne savons pas qui nous servent de contenu si nous n'utilisons pas le mot-bang. Pushstate ne résout pas pour nous. Nous ne voulons pas que les moteurs de recherche de raconter des utilisateurs finaux pour naviguer vers une URL qui crache sans mise en forme de JSON. Au lieu de cela, nous avons créer des Url (qui déclenchent d'autres appels à davantage d'Url) de récupérer les données via AJAX et de les présenter à l'utilisateur dans la manière que nous préférons. Si l'utilisateur n'est pas un homme, comme alternative, nous pouvons servir un html-instantané, de sorte que les moteurs de recherche peut bien diriger l'utilisateur vers l'URL qu'ils s'attendent à trouver les données (et d'une façon présentable). Mais le défi ultime est de savoir comment déterminer le type d'utilisateur? Oui, on peut éventuellement utiliser .htaccess ou quelque chose à réécrire l'URL pour les robots des moteurs de recherche nous détecter, mais je ne suis pas sûr de savoir comment fullproof et futureproof c'est. Il peut également être possible que Google pourrait pénaliser les gens pour faire ce genre de chose, mais je n'ai pas étudié à fond. Si l' (pushstate google + la balise meta) combo semble être une probable solution.
Est
pushState
mauvais si vous avez besoin de moteurs de recherche pour lire votre contenu?Non, le parler
pushState
est axée autour du réaliser le même processus général de hashbangs, mais avec de meilleures-recherche des Url. Pensez à ce qui se passe réellement lorsque vous utilisez hashbangs...Vous dire:
Donc, en d'autres termes,
example.com/#!/blog
example.com/?_escaped_fragment_=/blog
Comme vous pouvez le voir, il s'appuie déjà sur le serveur. Si vous n'êtes pas servir un instantané du contenu à partir du serveur, votre site n'est pas indexé correctement.
Alors, comment Google va rien voir avec pushState?
En fait, Google va voir ce qu'il peut demander à
site.com/blog
. Une URL pointe toujours à une ressource sur le serveur et les clients encore obéir à ce contrat. Bien sûr, pour les clients modernes, Javascript a ouvert de nouvelles possibilités pour la récupération et l'interaction avec le contenu sans page d'actualisation, mais les contrats sont les mêmes.De sorte que le but de l'élégance de
pushState
est qu'il sert le même contenu à tous les utilisateurs, anciens et nouveaux, JS et pas, mais les nouveaux utilisateurs obtenir une meilleure expérience.Comment obtenez-vous Google pour voir votre contenu?
Le Facebook de l'approche — servir le même contenu à l'URL
site.com/blog
que votre client application serait de se transformer en lorsque vous appuyez/blog
sur l'état. (Facebook n'utilise paspushState
encore, que je sache, mais ils le font avec hashbangs)Le Twitter approche — rediriger toutes les Url de la hashbang équivalent. En d'autres termes, un lien vers "/blog" pousse
/blog
sur l'état. Mais si c'est demandé directement, le navigateur se termine#!/blog
. (Pour Googlebot, ce serait alors la route pour_escaped_fragment_
que vous le souhaitez. Pour les autres clients, vous pouvezpushState
retour à la jolie URL).Donc, ne vous perdez la
_escaped_fragment_
capacité avecpushState
?Dans un couple de différentes observations, vous avez dit
Les avantages que vous avez mentionnés ne sont pas isolés à
_escaped_fragment_
. Qu'il ne la réécriture pour vous et utilise une nommée spécialementGET
param est vraiment un détail d'implémentation. Il n'y a rien de vraiment spécial à propos de ça que tu ne pouvais pas faire avec la norme Url — en d'autres termes, la réécriture de/blog
à/?content=/blog
sur votre propre en utilisant mod_rewrite ou de votre serveur équivalent.Que si vous ne servez pas côté serveur de contenu à tous?
Si vous ne pouvez pas réécrire les Url et les servir un certain type de contenu à
/blog
(ou quel que soit l'état que vous avez poussé dans le navigateur), alors votre serveur n'est plus vraiment en respectant le HTTP contrat.Ceci est important car un rechargement de la page (pour quelque raison que ce soit) va extraire le contenu à cette adresse. (Voir https://wiki.mozilla.org/Firefox_3.6/PushState_Security_Review — "vue de la source et de recharger à la fois de récupérer le contenu à la nouvelle URI si l'on a été poussé.")
Ce n'est pas que le dessin des interfaces utilisateur une fois sur le côté client et le chargement de contenu via JS Api est un mauvais but, c'est juste qu'il n'est pas vraiment représenté avec HTTP et les Url et c'est fondamentalement pas de compatibilité descendante.
Pour le moment, c'est la chose exacte que hashbangs sont destinés à représenter distinctes page d'états qui sont navigué sur le client et non sur le serveur. Un rechargement, par exemple, pour charger le même ressource qui peut ensuite lire, analyser et traiter la valeur de hachage.
Elle est juste qu'ils ont également été utilisé (notamment par Facebook et Twitter) pour changer l'histoire à un serveur de localisation sans rafraichissement de la page. C'est dans ces cas d'utilisation que les gens sont de recommander l'abandon de hashbangs pour pushState.
Si vous rendre tout le contenu de client-côté, vous devriez penser à
pushState
dans le cadre d'une pratique de l'histoire de l'API, et non pas un moyen de sortir de l'aide hashbangs.site.com/blog
? Si non, alors il n'existe pas pour les Moteurs de Recherche. Le but depushState
n'est pas de travailler autour de cela. C'est pour des raisons de commodité. Hashbangs ne pas corriger ce soit, et_escaped_fragment_
est compliqué solution de contournement qui repose toujours sur le serveur d'avoir un instantané de la JS contenu généré (vu par les utilisateurs normaux, comme vous le dites).pushState
effectivement simplifie tout cela._escaped_fragment_
, et je ne sais pas ce que vous faites en particulier. Mais ce que Google dit, je suppose que vous doit être au service de certains types de contenu par le serveur quand vous voyez que la requête param. Dans votre cas, il aurait besoin d'un peu de ruse, mais vous pourriez vous servir de certains<noscript>
contenu ou autre chose de/blog
et ensuite JS créer la page que vous voulez. Ou, vous pouvez tenter de détecter les bots et intentionnellement servir de contenu tout à fait différent.<a href="product/productName" onclick="showProduct(product)">A product</a>
, et le onclick commence avec "preventDefault()
", puis AJAXly charge le nouveau contenu sur le produit dans la page, et j'ai assurez-vous que le lien ".../produit/productName" charger une version de la page où le produit spécifique de contenu seront inclus dans la réponse du serveur --- ainsi, le site continuera de fonctionner de manière dynamique, mais aura aussi toujours du contenu statique disponible en allant sur un lien du produit directement à droite? Pas besoin de pushState ou hashbang de cette manière, non???Tous intéressants de parler de pushState et
#!
, et je ne peux toujours pas voir comment pushState remplace #!'s but que l'original de l'affiche de la demande.Notre solution pour rendre notre 99% JavaScript Ajax site/application SEOable est à l'aide de
#!
de cours. Depuis le client, le rendu est fait via HTML, JavaScript et PHP, nous utilisons la logique suivante dans un chargeur contrôlé par notre page d'atterrissage. Les fichiers HTML sont totalement séparés du JavaScript et PHP, parce que nous voulons le même code HTML dans les deux (pour la plupart). Le JavaScript et le PHP dans la plupart des cas la même chose, mais le code PHP est moins compliqué que le JavaScript est un plus expérience utilisateur plus riche.Le JavaScript utilise jQuery pour injecter dans le HTML, le contenu qu'il veut. PHP utilise PHPQuery à injecter dans le HTML, le contenu qu'il veut - à l'aide de "presque" la même logique, mais beaucoup plus simple que la version de PHP ne sera utilisée que pour afficher une SEOable version avec SEOable liens et de ne pas être en interaction avec la version JavaScript.
Tous sont les trois éléments qui composent une page, page.htm, page.js et page.php existent pour tout ce qui utilise le fragment échappé à savoir si pour charger la version de PHP à la place de la version JavaScript. La version de PHP n'a pas besoin d'exister pour les non-SEOable de contenu (tels que les pages qui ne peuvent être vus après connexion de l'utilisateur). Tout est simple.
Je suis toujours perplexe comment certains développeurs front end s'éloigner le développement de sites (avec la richesse de Google Docs) sans l'aide de technologies côté serveur en conjonction avec le navigateur celles... Si JavaScript n'est pas encore activé, alors notre 99% JavaScript solution ne sera évidemment pas faire n'importe quoi sans le PHP en place.
Il est possible d'avoir une belle URL à la terre sur un PHP servi page et rediriger l'utilisateur vers une version JavaScript si JavaScript est activé, mais ce n'est pas bon d'un point de vue utilisateur puisque les utilisateurs sont le plus important de l'auditoire.
Sur une note de côté. Si vous faites juste un simple site web qui peut fonctionner sans JavaScript, alors je peux voir pushState être utile si vous voulez progressivement améliorer votre expérience d'utilisateur à partir d'un simple statiquement rendu de contenu dans quelque chose de mieux, mais si vous voulez donner à vos utilisateurs la meilleure expérience de la aller chercher... disons que votre dernier jeu écrit en JavaScript ou quelque chose comme Google Docs puis c'est l'utilisation de cette solution est un peu limité comme gracieusement retomber ne peux pas aller plus loin avant que l'expérience utilisateur est douloureuse par rapport à la vision du site.