web-dev-qa-db-fra.com

Explorer une page ajax avec un fragment de hachage et une balise meta

Selon documentation de Google sur l'exploration de pages Web basées sur ajax , si une URL contient un fragment de hachage ou quelque chose à la fin d'une URL ressemblant à #helloworld, et s'il existe un ! après le #, comme dans #!helloworld, Google demandera ensuite l'URL url?_escaped_fragment_=helloworld.

J'ai actuellement une page Web basée sur ajax que je souhaite que Google puisse analyser. Parfois, la page utilise des fragments de hachage et, dans ces situations, j'ai configuré le serveur pour qu'il renvoie un instantané html pour cette page à l'aide de _escaped_fragment_.

Cependant, cette page Web ne charge souvent pas un fragment de hachage et, lorsque cela se produit, la page Web charge toujours le contenu en utilisant ajax.

Je ne pouvais pas trouver une bonne solution pour activer l'exploration ajax pour les pages contenant parfois un fragment de hachage et parfois non. Comment puis-je dire à Google d'utiliser _escaped_fragment_ quand il y a un fragment de hachage et d'utiliser autre chose pour obtenir un instantané HTML d'une page lorsqu'il n'y a pas de fragment de hachage?

3
user6901

La section 3 de la documentation de Google sur l'analyse du contenu Ajax indique que vous utilisez une balise META sur ces pages sans fragment de hachage:

Afin de rendre les pages sans fragments de hachage exploitables, vous devez inclure une balise méta spéciale dans l'en-tête du code HTML de votre page.

Donc, si les pages en ont parfois et parfois non, il semblerait que vous souhaitiez déterminer ce côté serveur et servir la balise META appropriée lorsque les fragments de hachage ne sont pas exposés.

4
Gabriel Harper

Lorsque Google a décidé du protocole, vous ne pouvez pas vraiment lui dire d’utiliser quelque chose de différent. Si votre page ne contient pas #! alors google va essayer de l'explorer comme une page normale. Vous pouvez ajouter une métabalise spéciale (généralement destinée uniquement à la page d'accueil) pour indiquer à Google d'analyser une page sans #! alors, Google effectuera le même remplacement avec le fragment échappé et s'attend à ce que votre serveur renvoie un résultat.

Donc, si vous ajoutez cette métabalise à index.php:

<meta name="fragment" content="!">

bien que cet index.php ne comporte pas de fragment de hachage, Google essaiera néanmoins d'obtenir une page de votre serveur appelée index.php? _escaped_fragment _ = et vous pourrez demander à votre serveur de diffuser l'instantané de la même manière. comme il le fait avec d'autres pages.

En dehors de cela, je ne vois pas vraiment pourquoi vous ne pouvez pas toujours utiliser techniquement des fragments de hachage.

En fonction du projet, j’ai trouvé plus utile et pragmatique de dépendre des techniques de Progressive Enhancement, c’est-à-dire s’assurer que mes pages servent du contenu sans javascript afin que Google - et les autres moteurs de recherche - puissent les explorer puis ajouter mon javascript. Cette technique a parfaitement fonctionné sur un projet basé sur des knock -outs hautement ajaxifié sur lequel j'ai travaillé récemment. Nous avons simplement ignoré le protocole Google et sommes revenus à la base (en particulier le fait que nous étions également intéressés par d'autres moteurs de recherche explorant notre site).

2
kabaros

@Christofian, vous devriez être capable de déterminer si une balise de hachage est utilisée, car elles apparaissent après un événement tel qu'un clic sur un lien. Cela déclenche généralement une méthode javascript location.hash ou jQuery pour ajouter le hachage au côté client de l'URL. Si Google a une balise de hachage, utilisez ! si vous n'avez pas de balise de hachage dans l'URL et que votre page utilise AJAX, utilisez la balise Meta. L'un ou l'autre aucun ne remplace l'autre. Vous devriez rechercher la fonction qui ajoute la balise de hachage avant de la lancer, vérifiez si un hachage est ajouté, sinon ajoutez la balise Meta.

Échantillon

var projectSlug = location.hash.replace("\#","");   
if(projectSlug != "index"){
    processProject(projectSlug);
}
0
Anagio