137 votes

Est-il possible d'utiliser JavaScript pour modifier les balises méta de la page?

Si je mets une div dans l'en-tête et que je la cache avec display:none, puis utilise JavaScript pour l'afficher, est-ce que ça marchera ?

Modifier :

J'ai du contenu chargé en AJAX. Et comme mon AJAX change la partie "principale" du site, je veux également changer les balises meta.

47 votes

C'est comme porter une chaussure comme un chapeau

0 votes

Pourquoi souhaitez-vous changer les balises meta ?

8 votes

Ou en utilisant un éditeur de texte comme un ide. Non, attendez, c'est considéré cool.

161voto

toscho Points 29302

Oui, vous pouvez le faire.

Il existe quelques cas d'utilisation intéressants: Certains navigateurs et plugins analysent les éléments meta et changent leur comportement pour différentes valeurs.

Exemples

Skype: Désactiver l'analyseur de numéros de téléphone

iPhone: Désactiver l'analyseur de numéros de téléphone

Google Chrome Frame

Définition du viewport pour les appareils mobiles

Celui-ci peut être modifié par JavaScript. Voir: Un correctif pour le bogue d'échelle du viewport de l'iPhone

Description meta

Certains agents utilisateurs (comme Opera par exemple) utilisent la description pour les favoris. Vous pouvez ajouter du contenu personnalisé ici. Exemple:

Test

Changer la description

$('button').on('click', function() {
    // Remplacer simplement la valeur de l'attribut 'content' ne fonctionnera pas.
    $('meta[name=description]').remove();
    $('head').append( '<meta name="description" content="this is new">' );
});

Par conséquent, ce n'est pas seulement pour les moteurs de recherche.

9 votes

Je soupçonne que la plupart des meta comme celle-ci ont des effets qui ne sont pas modifiables après le chargement de la page. Mais oui, meta est bien plus que simplement keywords et description.

0 votes

Vous pouvez également utiliser des balises meta pour les navigateurs mobiles comme ios vous voudrez peut-être modifier les valeurs pour le mode paysage.

2 votes

@bobince: En fait, le SKYPE_TOOLBAR prend toujours effet si vous l'insérez avec js (ce qui est utile car le validateur html5 n'aime pas cette balise meta).

70voto

MiffTheFox Points 10537

Vous utiliseriez quelque chose comme (avec jQuery) :

$('meta[name=author]').attr('content', 'Nouveau nom d'auteur');

Mais cela serait principalement inutile car les balises meta sont généralement seulement extraites lorsque le document est chargé, habituellement sans exécuter de JavaScript.

7 votes

Il fonctionne même avec des sélecteurs tels que $('meta[property=og:somestuff]'), ce que je soupçonnais qu'il entrerait en conflit avec la syntaxe de sélection jQuery en raison des deux-points.

8 votes

Au cas où quelqu'un d'autre recherche cette solution exacte, vous devez mettre des guillemets autour de og:somestuff - j'avais besoin du contenu de la balise image, voici mon code : var imgurl = $("meta[property='og:image']").attr("content");

2 votes

Confirmé que cela fonctionne pour le réglage de la meta viewport (nécessaire pour activer / désactiver le zoom pour certaines sous-pages sur jQuery Mobile). Merci!

33voto

eyedmax Points 215

Vous pouvez modifier les meta avec, par exemple, des appels jQuery, comme ceux-ci :

$('meta[name=keywords]').attr('content', new_keywords);
$('meta[name=description]').attr('content', new_description);

Je pense que cela compte pour le moment, car Google a déclaré qu'ils indexeront le contenu ajax via les appels #!hashes et _escaped_fragment_. Et maintenant ils peuvent le vérifier (même automatiquement, avec des navigateurs headless, voir le lien 'Créer des instantanés HTML' sur la page mentionnée ci-dessus), donc je pense que c'est la manière de faire pour les professionnels du SEO hardcore.

3 votes

Merci pour cela. Je viens de résoudre mon problème. Comme Facebook a une open graph, le site que je développe a un plugin jQuery History et des balises hash. Ainsi, l'URL et la description de l'open graph de Facebook doivent être modifiées chaque fois qu'un changement de hachage est présent. +1 pour une excellente réponse et pour ne pas être négatif envers une question légitime.

5 votes

En réalité, maintenant, Google est capable d'exécuter le javascript, aussi sans avoir besoin de créer des instantanés de page, donc maintenant les metatags dynamiques ont une grande importance!

13voto

futtta Points 3763

Les meta-tags font partie du DOM et peuvent être consultés et - je suppose - modifiés, mais les moteurs de recherche (les principaux consommateurs des meta-tags) ne verront pas le changement car le JavaScript ne sera pas exécuté. Donc, à moins que vous ne modifiiez un meta-tag (le rafraîchissement me vient à l'esprit) ayant des implications dans le navigateur, cela pourrait ne pas être très utile?

3 votes

+1 - Je suis tombé sur cette question car je me posais spécifiquement des questions sur la balise meta refresh. Je suis en train de créer une application qui utilise un ajax polling pour rafraîchir les données à l'écran et je veux fournir une solution de secours simple pour les navigateurs qui n'ont pas activé javascript. Je pense que je pourrais y parvenir en créant une balise meta refresh par défaut et si javascript est activé, simplement supprimer la balise meta. - Maintenant, voyons si ça fonctionne réellement...

0 votes

@futtta, la balise de méta-description est utilisée pour les descriptions de signets dans Opera, il y a donc effectivement un avantage pour l'utilisateur à ce que votre méta-description puisse être modifiée.

11voto

Mikael Svenson Points 18243

Il devrait être possible de le faire comme ceci (ou d'utiliser jQuery comme $('meta[name=author]').attr("content");):

Meta Data

<!--
if (document.getElementsByName) {
  var metaArray = document.getElementsByName('Author');
  for (var i=0; i<metaArray.length; i++) {
    document.write(metaArray[i].content + '<br>');
  }

  var metaArray = document.getElementsByName('Description');
  for (var i=0; i<metaArray.length; i++) {
    document.write(metaArray[i].content + '<br>');
  }

  var metaArray = document.getElementsByName('Keywords');
  for (var i=0; i<metaArray.length; i++) {
    document.write(metaArray[i].content + '<br>');
  }
}
//-->

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X