Nous allons voir dans ce tutoriel comment créer un système de sommaire sur vos articles de blog sur shopify. Et ce de manière automatique et administrable.

comment créer un système de sommaire sur shopify

Vous pouvez voir le résultat sur le site de démonstration.

Pourquoi créer un sommaire sur vos articles Shopify ?

En SEO il est important de faire plaisir aux moteurs de recherche et notamment Google. Cela passe également et avant tout par lui faciliter la vie. En présentant un sommaire à Google il va aimer et rapidement trouver ce qu’il cherche et donc optimiser votre SEO sur shopify.

Comment ce système va t-il fonctionner ?

Et bien c’est très simple j’ai tout prévu pour vous en codant cette petite fonction qui va automatiquement détecter les titres de vos articles. De plus il va créer le sommaire à l’endroit voulu avec les options suivantes que vous allez pouvoir modifier.

  • Le titre du sommaire,
  • La balise titre qui sera prise en compte pour les liens du sommaire,
  • Le nombre à partir duquel le sommaire doit s’afficher,
  • Son emplacement.

Petit exemple des options:

code création sommaire shopify

Comment mettre tout cela en place ?

Nous allons procéder en 3 étapes. Dans un premier temps la partie html qui affichera le résultat. Dans un second temps la partie CSS qui donnera l’aspect de visuel du sommaire et pour terminer la partie Javascript qui créera le système automatique.

Nous verrons également comment personnaliser ce système afin qu’il corresponde au design de votre boutique Shopify.

Partie HTML

Pour une fois vous n’aurez pas spécialement besoin de mettre un code HTML particulier. Notez juste que vous pouvez ajouter une classe à un de vos paragraphes afin de pouvoir placer le système à l’emplacement de votre choix. Ceci étant dit je pense que vous n’en aurez pas besoin. En effet généralement c’est sous le h1  ! Pour plus d’explication voir la vidéo qui arrivera bientôt ;).

Paragraphe d’exemple à mettre si vous souhaitez reprendre la main sur le placement. Ensuite dans la 4ème option mettre « before » ou « after » pour que le sommaire d’affiche avant ou après ce paragraphe !

<p class="chapo">Le Chapo de l'article est le premier paragraphe avant les balises de titres</p>

Partie CSS

Rendez-vous dans « Boutique en ligne – Actions – Modifier le code » et trouvez  le dossier « Assets ». A ce stade trouvez un fichier de type: « style.scss.liquid, theme.scss.liquid, timber.scss.liquid » ou un « xxxx.scss.liquid ». Pour finir ouvrez le et mettez vous tout en bas du fichier et collez le code suivant:

#summary {
    background: linear-gradient(180deg, #FEFEFE, #F0F0F0);;
    border:1px solid #888;
    padding:10px 15px;
    margin-bottom:15px;
    border-radius:4px;
    width:auto;
    text-align:left;
} 
#summary strong {
    display:block;
    font-size:110%;
    margin-bottom:7px;
}
#summary-list, #summary-list li {
    list-style:none;
    margin:0;
    padding:0;
}  
#summary-list a {
    text-decoration: none;
    padding:7px 0;
    font-size:90%;
    display:block;
    border:none;
}    
#summary-list a:hover {
    text-decoration: underline;
}

Partie Javascript

Restez dans le dossier « Templates » et trouvez un fichier « article.liquid ». Il ne vous reste plus qu’à vous rendre tout en bas du fichier et coller le code ci-dessous:

<script>
  // va permettre créer un sommaire sur les h2
  const createSummary = function(t,h,nb,pos){            
    // on va chercher tous les H2
    const titles = document.querySelectorAll(h);  
    let statut = false;
    if (titles.length >= nb ) {
      statut = true;           
    }  
    if (statut) {
      let arrayTitlesText = [];  
      let i;
      // on boucle pour ajouter des ids différents et récupérer le texte des titres              
      for(i=0; i < titles.length; i++){
        const title = titles[i];
        title.id = `ancre-${i}`;
        arrayTitlesText.push(title.textContent);         
      }              
      // on crée le sommaire    
      const summaryWrapper = document.createElement('div');
      summaryWrapper.id = "summary";          
      const summaryTitle = document.createElement('strong');
      summaryTitle.textContent = t;
      summaryWrapper.appendChild(summaryTitle);
      const ul = document.createElement('ul');
      ul.id = "summary-list";
      summaryWrapper.appendChild(ul);
      // on récupère le texte des titres et on crée la liste à puce
      for(i=0; i < arrayTitlesText.length; i++){            
        const linkTitle = arrayTitlesText[i];                 
        const addLi = document.createElement('li');
        const findList = document.getElementById('summary-list');            
        const insertLi = ul.appendChild(addLi);
        const createLink = document.createElement('a');
        createLink.href = `#ancre-${i}`;            
        const insertLink = insertLi.appendChild(createLink);
        insertLink.innerHTML = `${i +1}. ${linkTitle}`; 
      }
      // on trouve le chapo pour définir le placements        
      const chapo = document.querySelector('.chapo');
      // options 
      if (pos == "before") {
        chapo.before(summaryWrapper); 
      }  
      else if (pos == "after") {
        chapo.after(summaryWrapper); 
      }
      else {
        const postTitle = document.querySelector('h1');
        postTitle.after(summaryWrapper); 
      }    
    }   
  }
  /* options modifiables :
Option 1: titre du sommaire 
Option 2: balise à prendre en compte pour les ancres 
Option 3: Nombres de titres pour que le sommaire s'affiche
Option 4: placement du sommaire, choix: before, after, si vide se place sous le H1
ps: si choix before ou after mettre une class="chapo" sur votre 1er paragraphe dans votre éditeur shopify
*/
  const option1 = "Sommaire";
  const option2 = "h2";
  const option3 = "3";
  const option4 = "";

  createSummary(option1,option2,option3,option4);

</script>

Options du système de sommaire

  • Option 1: titre du sommaire,
  • Option 2: balise à prendre en compte pour les ancres,
  • Option 3: Nombres de titres pour que le sommaire s’affiche,
  • Option 4: placement du sommaire, choix: before, after, si vide se place sous le H1,
  • ps: si choix before ou after mettre une class= »chapo » sur votre 1er paragraphe dans votre éditeur shopify.

Code spécifique pour Speedfly

<script>
  // va permettre créer un sommaire sur les h2
  const createSummary = function(t,h,nb,pos){            
    // on va chercher tous les H2
    const titles = document.querySelectorAll(h);  
    let statut = false;
    if (titles.length >= nb ) {
      statut = true;           
    }  
    if (statut) {
      let arrayTitlesText = [];  
      let i;
      // on boucle pour ajouter des ids différents et récupérer le texte des titres              
      for(i=0; i < titles.length; i++){
        const title = titles[i];
        title.id = `ancre-${i}`;
        arrayTitlesText.push(title.textContent);         
      }              
      // on crée le sommaire    
      const summaryWrapper = document.createElement('div');
      summaryWrapper.id = "summary";          
      const summaryTitle = document.createElement('strong');
      summaryTitle.textContent = t;
      summaryWrapper.appendChild(summaryTitle);
      const ul = document.createElement('ul');
      ul.id = "summary-list";
      summaryWrapper.appendChild(ul);
      // on récupère le texte des titres et on crée la liste à puce
      for(i=0; i < arrayTitlesText.length; i++){            
        const linkTitle = arrayTitlesText[i];                 
        const addLi = document.createElement('li');
        const findList = document.getElementById('summary-list');            
        const insertLi = ul.appendChild(addLi);
        const createLink = document.createElement('a');
        createLink.href = `#ancre-${i}`;            
        const insertLink = insertLi.appendChild(createLink);
        insertLink.innerHTML = `${i +1}. ${linkTitle}`; 
      }
      // on trouve le chapo pour définir le placements        
      const chapo = document.querySelector('.blog-meta');
      // options 
      if (pos == "before") {
        chapo.before(summaryWrapper); 
      }  
      else if (pos == "after") {
        chapo.after(summaryWrapper); 
      }
      else {
        const postTitle = document.querySelector('h1');
        postTitle.after(summaryWrapper); 
      }    
    }   
  }
  /* options modifiables :
Option 1: titre du sommaire 
Option 2: balise à prendre en compte pour les ancres 
Option 3: Nombres de titres pour que le sommaire s'affiche
Option 4: placement du sommaire, choix: before, after, si vide se place sous le H1
ps: si choix before ou after mettre une class="chapo" sur votre 1er paragraphe dans votre éditeur shopify
*/
  const option1 = "Sommaire";
  const option2 = "h2";
  const option3 = "3";
  const option4 = "after";

  createSummary(option1,option2,option3,option4);

</script>

Ce tutoriel existe aussi en vidéo

Le petit mot de la fin

Ce tuto shopify est maintenant terminé. Vous allez pouvoir profiter de ce système pour gagner je l’espère quelques places sur Google 😉

Merci de me laisser une petite note 😉
[Note moyenne de: 5 sur 8 votes]

Besoin de déléguer votre SAV ?

Si vous avez besoin d'une personne pour gérer votre SAV j'ai la perle rare 😉 contactez moi en MP ou cliquez sur le bouton ci-dessous:

Je veux déléguer mon SAV

🤗 Vous souhaitez me remercier pour mes Tutos ?

Cliquez sur le bouton ci-dessous pour m'encourager à continuer 😉

Payer un Café à Dgeo Dev

Cet article a 35 commentaires

  1. Hello Dgeo!

    Merci pour tous ces tutos trop bien!
    J’ai essayé celui là pour mettre un sommaire sur mes pages de blog (sous Speedfly), mais rien ne se passe…est -ce qu’il y a une subtilité avec le thème speedfly?
    Un très grand merci d’avance
    Anaïs

    1. Hello, en effet y avait une incompatibilité, j’ai donc créé un code spécifique pour le thème speedfly en attendant son implantation lors d’une prochaine mise à jour 😉 le système sera bien meilleur 🙂

  2. Bonjour Dgeo !
    Tes tutos sont super
    J’ai le thème Minimal c’est nickel.
    Par contre, je voulais créer un sommaire pour mes articles mais ca ne fonctionne pas, j’ai copier coller le code dans blog.template mais rien.

    C’est possible de faire sur cette page ou le template ne le permet pas ?

    Merci à toi

    1. Hello et merci pour le message. Il faut plutôt dans ce cas trouver dans sections le article.liquid

  3. Bonjour,

    Merci pour ce super tuto ! Comment pourrait-on ajouter les sous-niveaux d’une section ?
    Mes articles sont organisés avec des h1, (h2, h3, h4), (h2,h3,h4)… chaque groupe entre parenthèse correspond donc à des sections.
    Si j’utilise dans la configuration H2 et H3, cela me donne une liste unique linéaire qui n’est pas fragmentée par section.
    Est-ce quelque chose de possible à mettre en place automatiquement ?
    Merci d’avance.

    1. Hello, c’est une bonne réflexion qui est prévue dans une V2 bientôt mais cela demande un développement plus complexe que je ferai dés qu’un peu de temps se libère et c’est assez rare ces temps-ci 🙁

  4. Hello, merci pour cet article très intéressant.
    Serais-tu comment afficher les h2 dans le sommaire sans les numéros avant (1,2,3 etc) ?

    1. Hello 🙂 il faut trouver dans le code js la partie suivante et la supprimer : ${i +1}. (le pas oublier le .)

  5. merci dev pour ces infos, super pratique pour le seo, peut on mettre la class chapo en auto sur mes blog existant ?

    1. Honnêtement c’est chaud à faire… faudrait détecter ne JS lorsqu’on est sur un template d’article le 1er paragraphe mais du’un conteneur bien précis et d’injecter la classe… Ca reste contextuel selon le thème donc faudra un dev sur mesure pour faire ca 😉

  6. merci encore pour le travail que tu fournis, j’ai un soucis le sommaire s’affiche que sur un blog ?
    as tu une idée ?

    1. Hello, non il s’affiche partout à partir du moment ou le principe des identifiants de la fonction est respecté 🙂

  7. Bonjour encore merci pour ton travail ! Ce sommaire en place depuis 4 mois maintenant offre de meilleurs résultats en SEO. Les urls ancres remontent dans la Search Console. Néanmoins, Google m’indique un « Problème CLS : plus de 0,1 (mobile) ».
    Je suis presque sûre que cela provient Sommaire car il charge après le texte des articles de blog. Une optimisation à conseiller ?
    Jordan

  8. Hello ! Merci sur ce tuto très bien fait mais j’ai comme un p’tit souci ! Voici ce qui s’affiche :
    BIENVENUE
    Sommaire
    1.
    2. translation missing: fr.layout.header.language
    3. Titre de niveau 2
    4. Titre de niveau 2
    5. Titre de niveau 2
    6. Titre de niveau 2
    J’ai pourtant bien suivi les étapes… Une idée ?
    Merci,
    Séverine

    1. Hello, je pense que le code du thème a été touché 🙁 le mieux serait de revenir aux versions antérieures ou de demander au support du thème de vous aider 🙂

  9. Hello ! merci pour ton code, une idée de quand sortira la version avec les sous parties pour pouvoir ajouter des sous niveaux ? 🙂

    1. Hello, quand j’aurai un peu de temps libre du coup vers 2034 😀

  10. Bonjour et merci bcp pour tes efforts, j’espère vraiment que tu me répondras, ou si quelqu’un d’autre peut m’aider, c’est la première fois qu’une de tes videos ne fonctionne pas pour moi, bon en bref j’avais deux articles sur mon blog, un publié et un autre non (c’était comme un brouillon ) après de suivre les étapes de la video rien ne se passait sur l’article et par curiosité j’ai publié « le brouillon » pour voir et là le sommaire était présent, je me suis dis peut-être il s’est affiché juste sur le premier article créer dans le blog alors je l’ai supprimé pour avoir juste un seul afin de me l’afficher sur le bon, mais non il ne me l’affiche toujours pas sur l’autre article, je suis rester 2h a refaire la manipulation des le début et toujours il ne s’affiche plus, le problème c’est que j’ai supprimé le premier article dont il était affiché sinon j’allais juste modifier le contenu, stp aide moi, ça 2h que je suis coincé ( j’ai le thème début )

  11. j’ai pus résoudre le problème d’une façon un peut bizarre mais bon, le sommaire est bien affiché ou je veux merci mais je ne sais pas pourquoi il m’affiche 1- Just add to your card et puis 2 – le titre du h2, sachant que je n’ai aucune phrase « just add to your card » je ne sais pas pourquoi il l’affiche, comment l’enlever s’il te plait

    1. Hello, super si tu pas pu résoudre le soucis 🙂 pour le Just add to your card c’est surement un h2 masqué créé par une app (sticky bar peut etre ?) faut essayer d’analyser le DOM

  12. Bonjour, et merci pour tous ces tutos vraiment top.
    Je suis sur narrative et le tuto fonctionne très bien. Mais peut-on changer la couleur des textes dans le sommaire, mon fond est noir et les écrit sont en bleu pas beau et devienne violet flashy une fois sélectionnés ? merci d’avance

    1. Hello, oui c’est possible en rajouter dans le css ceci: #summary-list a { color:#FFF; }

  13. Bonjour. Merci pour tous vos tutos vraiment géniaux. J’avais une petite question concernant l’ancre des titres H2 : lorsque je clique dans le sommaire sur un des titres H2, je vois que l’URL se finit par #ancre-0 par exemple pour le premier titre. J’aimerais pouvoir afficher le titre H2 (avec les mots séparés par un tiret du 6) après le # (pour le SEO). Savez-vous comment faire ?

    Merci

    1. Hello, c’est assez complexe car cela nécessite un traitement des accents, espaces, caractères spéciaux…. Bref ce n’est pas une mince affaire et cela demanderai un développement spécifique 🙂 Bonne journée

  14. super comme d’habitude fonctionne impeccable pour ma page de CGV. Merci Dgeo

  15. Bonjour, je ne parviens pas à modifier l’aspect du sommaire… j’ai testé de mettre la partie CSS sur plusieurs assets, mais je ne trouve pas lequel est le bon… ça ne change rien peu importe où je le mets. quelqu’un peut me guider svp ?
    j’ai testé :
    – theme.dev.css
    – theme.js
    – theme.css

    1. Bonsoir, c’est pourtant dans la partie CSS du tutoriel. Il suffit de modifier les valeurs background et rajouter une color pour les liens. Donc logiquement ces codes sont dans theme.css

  16. J’ai pourtant testé de modifier ces valeurs dans tous les assets testés, y compris theme.css, mais comme je vous l’ai dit, rien ne change.. Je ne sais plus quoi faire. Merci tout de même pour votre réponse

  17. Hello, comment faire pour qu’il sélectionne que les H2 de l’article, moi il prend tous les H2 de la page, comme « me connecter » par exemple. Merci.

    1. Hello, c’est un peu complexe mais niveau seo le me connecter ne devrait pas être un h2 🙂 sinon il faudrait trouver un identifiant plus en profondeur… essayer de remplacer const option2 = « h2 »; par const option2 = « article h2 »;

  18. Hello,

    Est-ce que ce sommaire peut être considéré comme du contenu dupliqué pour Google.
    Je m’explique pour la même URL : https://www.monsite.fr/blog/article1 on va avoir plusieurs liens qui vont renvoyer vers nos H2, ex :

    https://www.monsite.fr/blog/article1#premierH2
    https://www.monsite.fr/blog/article1#deuxiemeH2
    https://www.monsite.fr/blog/article1#troisiemeH2
    etc.

    Est-ce que à cause de ses liens là, google peut-il considérer que c’est du contenu dupliqué.
    Merci par avance pour ta réponse

    1. Hello, non ce n’est pas considéré comme du duplicate étant donné que c’est des ancres internes de type lien sans duplication de titre. Google à donc l’habitude de ce genre de procédé.

  19. Bonjour,

    Merci pour votre super tuto,

    Je cherche comment positionner le sommaire dans un autre endroit que le « chapo » car cela ne fonctionne pas avec le theme de mon shop. Auriez-vous une astuce pour le positionner après un mot particulier par exemple : « § Sommaire »
    Pour reconnaitre un caractère peu commun comme le « § ».

    Merci à vous

Laisser un commentaire

Fermer le menu

Envie d'apprendre à Coder et Maitriser ton Thème Shopify  ?

Alors abonne-toi à la chaine et active la cloche pour ne pas louper l'arrivée des prochaines vidéos !

S'abonner à la chaine