Plugin SEO

Search Engine Optimisation Plugin

SEO est un plugin qui ajoute la possibilité d’insérer manuellement où vous le souhaitez ou de manière automatique dans la partie <head> de votre site web : meta tags, URL canonique, Google webmaster tools Meta Code et Google Analytics javascript.

Il est configurable dans la page de configuration de SPIP ainsi que dans chaque rubrique et article pour les meta tags.

Installation

Insertion manuelle

Les balises suivantes sont à votre disposition :

  • #SEO_META_TAGS : pour insérer les balises META configurées
  • #SEO_META_BRUTE{nom_de_la_meta} : pour insérer la valeur brute d’une META (keywords, copyright, etc.)
  • #SEO_GWT : pour insérer la META Google Webmaster Tools
  • #SEO_URL : pour insérer le des liens canoniques
  • #SEO_GA : pour insérer le JavaScript Google Analytics

Il est donc préférable d’insérer la balise #SEO_META_TAGS avant votre appel à INSERT_HEAD, suivie de la balise #SEO_GWT.

La balise #SEO_GA pourra être placée en pied de page.

La balise #SEO_META_BRUTE pourra quant à elle être placée n’importe où dans le flux HTML, ou utilisé pour générer une balise sur mesure dans le HEAD (cas d’un sitemap Google News et de sa balise <news:keywords> par exemple).

Insertion automatique

La balise #INSERT_HEAD doit être présente dans toutes vos pages du squelette (si possible avant le <INCLURE{fond=inc-head}> si présent dans vos squelettes).

ATTENTION : dans ce cas le plugin ne fonctionnera pas correctement si vous placez #INSERT_HEAD dans le fichier inc-head.html ou un autre fichier que vous incluez dans la partie <head> de vos squelettes. Par conséquence le plugin n’est pas compatible avec le « squelettes-dist » fournit de base.

Nota : Depuis la version 1.7.3, il est possible de forcer les metas pour tous squelettes, y compris ceux fournissant déjà par défaut ces balises. Pour activer ce mode, l’option s’active depuis la page de configuration. La constante _SEO_FORCER_SQUELETTE (apparue à partie de la version 1.7.0) est maintenant obsolète et n’est plus prise en charge.

Configuration

La configuration du plugin se fait dans « Configuration / Search Engine Optimisation » (voir la capture d’écran si-dessous).

Si « l’édition des meta tags dans les rubriques et les articles » est activé vous pourrez configurer les meta tags dans chaque rubrique ou article par le biais du formulaire qui est ajouté dans les pages d’éditions.

Page de Configuration

Fonctionnement

  • Insert Head (si activé) : Rajoute les configurations activées de manière automatique dans le HEAD grâce à la balise #INSERT_HEAD de SPIP.
  • Meta tags (si activé) : Les meta tags sont ajouté dans toutes les pages (sommaire, article ou rubrique) où #INSERT_HEAD est présent ou à l’aide de la balise #SEO_META_TAGS. Vous pouvez configurer le comportement par défaut dans la configuration du plugin mais si « l’édition des meta tags dans les rubriques et les articles » est activé ce sont ces meta tag qui sont prioritaire si ils sont renseigné.
  • Url Canonique (si activé) : Les URL canoniques sont ajoutées pour la page d’accueil du site et pour tous les articles et rubriques.
  • Google Webmaster Tools (si activé) : Le Meta Tag comprenant le code de vérification est ajouté uniquement sur la page d’accueil du site.
  • Google Analytics (si activé) : Le code javascript de Google Analytics est ajouté a touts les pages où #INSERT_HEAD est présent.

Discussion

91 discussions

  • 4

    Bonjour ,
    j’utilise ce plugin fort intéressant principalement pour dire par page si celle page est « noindex » ;
    Seulement, le sitemap généré par défaut dans Spip ne tient nullement compte de cette indication et dit à Google et les autres : indexe cette page : ce qui fait deux infos contradictoires et .. une erreur que Google te place en plein centre...

    Comment fait-on alors SVP pour que le sitemap de Spip, standard je crois, ne prennent plus les pages « nonidex » , boucle ???
    merci d’avance.

    • Je me perds un peu dans les filtres sur Balises , et si ne veux pas mettre les rubriques en noindex, donc celle qui ont soit pas de balise #SEO_META_TAGS, soit une mais pas avec NOINDEX dedans .

      si je mets dans mon sitemap.xml.html la ligne :

      <BOUCLE_r(RUBRIQUES){!par date}{0,1000}{[(#SEO_META_TAGS{content}|match{NOINDEX}) non ]}>[
      <url><loc>(#URL_RUBRIQUE|url_absolue)</loc></url>]</BOUCLE_r>

      je n’ai plus aucune rubrique qui s’affiche dans le sitemap.xml : quelqu’un peut-il m’aider ?
      merci d’avance.

    • Tu ne dois pas mettre de crochet dans les critères.
      Ca devrait plutôt être :

      <BOUCLE_r(RUBRIQUES){!par date}{0,1000}{#SEO_META_TAGS{content}|match{NOINDEX}|non}>

    • merci de ton aide.
      c’est en fait une jointure entre tables : la table des rubriques et la table spip_seo
      et

      <BOUCLE_r(RUBRIQUES spip_seo){!par date}{0,1000}
                          {spip_seo.objet=rubrique}>

      me sort les rubriques visibles et présentes dans la table seo, avec INDEX ou NOINDEX.

      par contre :

      <BOUCLE_r(RUBRIQUES spip_seo){!par date}{0,1000}
                          {spip_seo.objet=rubrique}
                          {spip_seo.meta_content=NOINDEX, NOFOLLOW}>

      ne sort rien, pourtant il y en a bien une qui fait la jointure.

      C’est une approche, sachant que je voudrais les rubriques qui n’ont PAS « NOINDEX »

    • bonjour,
      je me réponds à moi-même : voici la solution pas si facile, afin d’apporter ma goutte d’eau à ce merveilleux projet SPIP : il faut mettre la boucle suivante qui dépend des préfixes de tables (attention) :
      Boucle qui exclut seulement les rubriques publiées qui sont en noindex dans la table seo : assez pratique car il n’est pas nécessaire de passer en revue toutes les rubriques.

      <BOUCLE_rwhereseo(RUBRIQUES){!par date}{0,1000}
                          {where id_rubrique NOT IN (SELECT id_objet FROM spip_seo WHERE spip_seo.id_objet=id_rubrique AND spip_seo.objet='rubrique'
       AND spip_seo.meta_content LIKE 'NOINDEX%')}>
          	[
      <url><loc>(#URL_RUBRIQUE|url_absolue)</loc></url>]
          </BOUCLE_rwhereseo>

      bien entendu à adapter aux articles, brèves, mots.
      bon usage !

    Répondre à ce message

  • JeromeD

    Bonjour,
    Sur deux sites en spip 3.2.4, j’ai des erreurs d’installation du plugin de ce type
    Erreur SQL 1146
    Table ’xxxxxxxxxx.spip_seo’ doesn’t exist
    SELECT * FROM spip_seo WHERE id_objet=47 AND objet=’article’

    J’ai désinstallé le plugin et réinstallé mais rien ne fait.
    J’ai vidé le ficher tmp/cache mais sans succès.
    Auriez-vous une idée ?
    Merci d’avance

    Répondre à ce message

  • 1

    Bonjour,

    j’ai activé SEO sur un site avec squelettes Z, noiZetier et Aveline.
    j’ai activé l’insertion automatique, et Valeur des balises metas par défaut (pour les objets éditoriaux) avec choix « valeur du titre de la page »

    ça marche pour les articles, la balise Title reprend bien le texte du titre de l’article.

    Mais pour les événements, c’est le titre de l’article associé à l’événement qui est affiché dans la balise title, et pas le titre de l’événement.
    J’ai ensuite « Activer l’édition des meta tags dans les objets éditoriaux », pour les événements, et remplis un méta Title, ça ne change rien.

    pourtant, je vois le code du modèle Z qui est :

    <BOUCLE_evenement_head(EVENEMENTS) {id_evenement}>
    <title>[(#TITRE|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]</title>
    [<meta name="description" content="(#INTRODUCTION{150}|attribut_html)" />]
    [<link rel="canonical" href="(#URL_EVENEMENT|url_absolue)" />]
    </BOUCLE_evenement_head>

    Du coup, je vois pas comment faire pour que la balise meta Title des événements prenne le titre des événements.

    peut-être est-ce du plutôt au fonctionnement des boucles EVENEMENTS ?

    Merci pour pistes utiles

    • En fait, je comprend que SEO est prioritaire sur tous les autres squelettes.
      Il faudrait alors une modif qui dise à SEO de ne pas toucher au Title des pages évènements.
      mais je sais pas comment faire.
      j’ai vu le code de seo-head.html, mais aucune idée de comment le modifier en ce sens, ou si c’est même possible...

      [(#ENV**{head}|seo_insere_remplace_metas{#ENV*{contexte}}|replace{'\s+<(meta|script|link|style)','
      <$1'})]

      Faudrait sans doute modifier le code php de seo_fonctions.php sinon.

      Si quelqu’un.e a des idées, merci d’avance

    Répondre à ce message

  • Bonjour à tous !

    Est que les balises #SEO_META_TAGS et #SEO_URL sont sensés marcher sur les pages uniques ?

    Je les ai implémenté comme sur mes squelette rubriques et articles qui marchent, mais ça ne semble pas marcher sur les pages uniques....

    Merci d’avance de vos réponses.

    Répondre à ce message

  • 1

    Bonjour à tous !

    Le plus SEO est-il compatible avec SPIP 3.2.1 [23954] ? Lorsque je vais sur http://localhost/mon-spip/ecrire/?exec=configurer_seo, j’ai une erreur sous chrome :

    « Ce site est inaccessible
    La connexion a été réinitialisée. »

    Toute aide sera grandement appréciée !

    • Bon, en local, ça marche pas malgrés quelques actions sur mon wamp... Par contre, ça marche sur un « vrai » serveur.

    Répondre à ce message

  • Bonjour,
    le formulaire permettant de renseigner les metas n’apparaît plus dans ma nouvelle version du site... alors que la configuration est correcte

    Avez-vous une idée à ce sujet

    Cordialement

    Répondre à ce message

  • Bonjour
    J’aimerai savoir si, lorsque l’on coche les documents dans « Activer les balises metas éditoriales », les metas sont renseignées dans le head de documents.html (mis dans content) ou dans les metadonnées de l’image ou s’il ne se passe rien ? merci

    Répondre à ce message

  • 12

    Bonjour,
    question bête sans doute : est-ce que #INSERT_HEAD et équivalent à INCLUREfond=inclure/head />

    ayant ajouté #INSERT_HEAD alors que j’avais déjà INCLUREfond=inclure/head />, aucun problème excepté que j’ai deux lignes de socialtags ... je m’étais bien sûr posée la question avant d’ajouter la balise sans trouver de réponse

    par ailleurs, peut-on considérer que le plugin SEO impose ses règles (conformes au RGPD) au compte google analytics, en d’autres termes : peut-on s’exonérer de modifier les paramètres du compte sur le site de google analytics (introuvables au demeurant) ?

    • Bonjour

      Ce n’est pas pareil #INSERT_HEAD inclut les fonction css et js de SPIP (par exemple jquery) et des plugins (via pipeline)
      Selon les cas de figure certains de ces fichiers peuvent aussi être inclus viainclure/head.

      Le plugin insert les fonctionnalités de collecte fourni par google analytics, il n’y a donc aucune notion de RGPD à ce niveau.
      Les règles de gestion RGPD sont configurées directement dans l’outil de collecte c’est à dire google analytics ou piwik ou autre outil.

      Utiliser un plugin de tracking ne nous affranchi pas de « correctement » configurer le service de collecte.

    • bonjour et merci pour la réponse qui ne me satisfait pas totalement cependant. En effet, il semble en parcourant le labyrinthe des explications google analytics à ce sujet que deux opérations sont nécessaires : l’anonymisation (rendre les IP anonymes et appliquer une durée de conservation)
      je suis sur l’anonymisation : elle requiert une modification du scipt donc de celui qui est appelé dans le plugin SEO
      https://developers.google.com/analytics/devguides/collection/gajs/methods/

      par contre pour la durée, il faut ajouter une propriété ...
      https://support.google.com/analytics/answer/7667196?hl=fr

      qu’en pensez-vous ?

    • Bonjour

      Vous faîtes référence au code « legacy » du google analytics. Par défaut c’est le mode universal qui est recommandé. Dans ce cas à ma connaissance tout se gère ensuite depuis le site de google analytics.

      Si vous tenez à utiliser le mode legacy, je pense que c’est une surcharge locale du squelettes qui serait à faire.

      Sur les alertes reçues de la part de Google concernant l’évolution RGPD je n’ai rien lu concernant une modification à appliquer pour le javascript.
      Enfin c’est un sujet qui doit mûrir :)

    • Bonjour et merci, j’avais oublié de dire qu’il s’agissait d’un SPIP 3.2.1 et que j’ai récupéré le plugin sur la page de téléchargement.

      voici l’alerte sur la page Google Analytics > Tracking > ga.js (Legacy)

      « ga.js is a legacy library. If you are starting a new implementation, we recommend you use the latest version of this library, analytics.js. For existing implementations, learn how to migrate from ga.js to analytics.js. »

      voici ce que le plugin SEO génère comme script :
      script type=« text/javascript »
      (function(i,s,o,g,r,a,m)i[’GoogleAnalyticsObject’]=r ;i[r]=i[r]||function()
      (i[r].q=i[r].q||[]).push(arguments)
      ,i[r].l=1*new Date() ;a=s.createElement(o),
      m=s.getElementsByTagName(o)[0] ;a.async=1 ;a.src=g ;m.parentNode.insertBefore(a,m)
      )(window,document,’script’,’//www.google-analytics.com/analytics.js’,’ga’) ;
      ga(’create’, ’UA-xxxxxxxx-1’, ’auto’) ;
      ga(’send’, ’pageview’) ;
      /script

      qu’en penser ?

      Pour la durée de conservation, en effet là il faut se rendre sur le compte google analytics, trouver les propriétés dans l’administration et modifier la propriété de durée de conservation

    • Bonjour

      Je ne comprends toujours pas quel est le problème.
      Vous indiquez une page de google concernant le script ga.js indiquant qu’il est préférable d’utiliser analytics.js
      C’est exactement ce que fait le plugin SEO. On le voit bien dans l’extrait de code que vous donnez.

      Si vous tenez à utiliser ga.js vous ne pouvez pas utiliser le plugin SEO.

      Autrement il faut s’appuyer sur la documentation relative à analytics.js . À ma connaissance concernant le paramétrage RGPD cela se passe uniquement via l’interface de google analytics.
      En tout cas la documentation citée ne semble pas applicable dans le cas présent. Le plugin n’utilise pas la version legacy ga.js.

    • désolée d’être un peu dure de la feuille ... donc on est dans les clous ou presque car figurez-vous qu’on se trouve dans une situation pas très enviable : impossible de retrouver le prestataire qui a effectué le référencement du site - qui n’était d’ailleurs pas un SPIP à l’origine - donc nous n’avons pas les identifiants admin de google analytics.
      N’ayant pas les identifiants admin de google analytics, nous n’avons même pas la possibilité de fermer ce compte pour en réouvrir un autre !
      mais je vais tenter je crois mais je n’y crois pas.
      La solution est donc de supprimer le script donc de désactiver le plugin SEO, ce qui risque d’être dramatique pour le référencement

      et puis zut !

    • Bonjour

      Là on sort complément du plugin :)

      1/ Vous pouvez associer un nouveau propriétaire à un site. Analytics propose une procédure pour ceci.

      2/ La désactivation du plugin aura pour impact d’arrêter la collecte statistique et le retrait des balises #SEO_* donc l’impact sur le référencement depend principalement des options que vous utilisez.

    • bonjour et merci ! l’opération me semble périlleuse et ne résolavant pas tous les problèmes puisque un compte administrateur google search est déjà associé à ce site web.

      Pourquoi je pensais pouvoir m’en tirer avec simplement le script : j’espérais que le paramétrage apparaîtrait et qu’il serait possible de le modifier.

      Sur le compte dont je dispose, qui est un compte google search, je n’ai la main sur aucune propriété.
      J’ai trouvé un endroit où laisser un commentaire, j’y ai laissé un message faisant part de mes impossibilités. J’attends. Je vous tiendrai au courant.

    • Bonjour,

      Je reviens vers vous à propos de cette histoire de Javascript.
      Sur Analytics, on vous donne un code à intégrer au site :

      <!-- Global site tag (gtag.js) - Google Analytics -->
      <script async src="https://www.googletagmanager.com/gtag/js?id=UA-XXXXXXXXX-1"></script>
      <script>
        window.dataLayer = window.dataLayer || [];
        function gtag(){dataLayer.push(arguments);}
        gtag('js', new Date());
      
        gtag('config', 'UA-XXXXXXXXX-1');
      </script>

      Je verrais donc plus un gtag.js et non pas un ga.js ou analytics.js. Cela dit, je n’y comprends pas grand-chose, aussi je m’en reporte à vous.

      Merci

    • Bonjour

      Vous donnez le code de google tag manager (GTM) qui n’est pas google analytics (GA).
      Ce sont 2 services différents qui peuvent être aussi utilisés ensemble.

      Le présent plugin ne s’occupe que de GA.

    • Bonjour cam.lafit,

      Pourtant je confirme que c’est bien le code actuel donné par Google Analytics lorsqu’on le lui demande ID-Tracker Code : je viens de refaire la manip, avec un nouveau compte Gmail et un nouveau site :

      <!-- Global site tag (gtag.js) - Google Analytics -->
      <script async src="https://www.googletagmanager.com/gtag/js?id=UA-XXXXXXXXX-1"></script>
      <script>
        window.dataLayer = window.dataLayer || [];
        function gtag(){dataLayer.push(arguments);}
        gtag('js', new Date());
      
        gtag('config', 'UA-XXXXXXXXX-1');
      </script>
    • Bonjour

      En effet on trouve l’exemple donné via la documentation suivante : https://support.google.com/analytics/answer/1008080?hl=en

      La documentation suivante n’est toujours pas marquée obsolète :
      https://developers.google.com/analytics/devguides/collection/analyticsjs/

      Si vous le souhaitez vous pouvez proposer un correctif au code pour respecter cette nouvelle écriture qui semble tout aussi valable que l’actuelle.

    Répondre à ce message

  • JulienSEO

    Plugin très utile ! Merci !

    Répondre à ce message

  • Natacha Courcelles

    Bonjour
    dans les logs mysql.log de Spip j’ai une erreur lors de l’édition d’un objet qui a déjà des données saisies en seo

    ERREUR: Erreur 1062 de mysql: Duplicate entry '185-annonce-description' for key 'PRIMARY'
    in /home/users/html/www/plugins/seo-dev/action/editer_seo.php L46 [sql_insertq(),action_editer_seo_dist(),seo_formulaire_traiter(),minipipe(),
    execute_pipeline_formulaire_traiter(),pipeline(),traiter_formulaires_dynamiques()]
    INSERT INTO spip_seo (id_objet,objet,meta_name,meta_content) VALUES (185,'annonce','description','texte')

    il semblerai que le module fasse un insert au lieu d’un update
    une idée ??
    bon été à tous

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom