Sommaire
Nous allons voir dans ce tutoriel comment éviter le duplicate content sur shopify
Légende: url = adresse internet.
Une des problématique majeure sur shopify reste la génération d’un contenu dés que vous allez associer un produit à une collection.
En effet lorsque vous créez un produit, Shopify crée une url de type « /products/nomduproduit ». Dés lors que vous allez associer ce produit à une collection cela va créer automatiquement une autre url de type « /collections/nomdelacollection/nomduproduit ». Cela a pour conséquence de vous créer 2 pages avec le même contenu donc pénalisé par les moteurs de recherche ! C’est ce qu’on appelle du duplicate content interne.
Avant de vous lancer !
Attention ! dans quelques thèmes une balise canonical est présente dans vos fichiers (Mise en page ou Layout – theme.liquid).
ce genre la : <link rel= »canonical » href= »{{ canonical_url }} »>
En haut dans les balises head regardez si vous trouvez cette balise:
Si vous l’avez c’est que le thème part du principe logique que les urls de type « /products/nomduproduit » sont les urls principales et que les autres sont des copies de celles-ci à ne pas indexer.
Si vous voulez faire ce tuto je vous conseille de supprimer cette balise 😉
Je vous invite Fortement à tester votre couverture d’indexation à l’aide de Google Search Console – Index – couverture afin de ne pas faire de bêtises 😉
Comment éviter ce problème ?
Il suffit à l’aide des codes que je vais vous donner de dire aux moteurs de recherche que tel ou tel type d’url ne sera pas indexée !
2 solutions s’offre à vous:
- Désindexer les urls des produits avec collections.
- Désindexer l’url principale du produit (sans collections).
Quelle solution choisir ?
Alors là c’est à vous de voir 🙂
Si vous décidez de désindexer des urls de type collections lors d’une recherche les internautes vont tomber uniquement sur la page de type « /products/nomduproduit », l’url originelle. Il faut savoir que vos produits recommandés présent sur certains thèmes comme Speedfly ne s’affichent que sur les urls de type collection. C’est important de le savoir 😉
Si vous faite le choix de la désindexation de l’url de type products « /collections/nomdelacollection/nomduproduit » vous allez devoir éviter de faire votre pub Facebook ou Adwords sur l’url originelle ! De plus il faudra impérativement que votre produit ne soit associé qu’à une seule collection sinon le duplicate content sera présent sur les autres collections de ce produit.
Et toi tu en pense quoi ?
Personnellement j’aurai tendance à privilégier la solution sans les urls avec collections afin de garder le fonctionnement et url native. Mais aucun des choix n’est mauvais, il suffit simplement de prendre la solution qui vous semble la plus adaptée à votre site.
Côté tutoriels – code shopify
Rendez-vous dans les fichiers de votre thème et trouvez le dossier « Mise en page (Layout) » et le fichier « theme.liquid« .
Vous allez devoir trouver la balise head en haut du site et plus spécifiquement la fermeture de celle-ci: </head>
Vous avez donc copier un de ces codes juste AVANT le </head> comme sur cet exemple:
Code pour supprimer les urls de type: « /products/nomduproduit ».
Code pour supprimer les urls de type: « /collections/nomdelacollection/nomduproduit ».
Bonus: Ne pas indexer certaines pages de votre site comme les mentions légales ou conditions générales de vente…
Exemple ici pour une url de type page contenant « conditions-generales-de-vente ».
Et le canonical dans tout ça ?
Le canonical est le fait de définir le contenu principal alors que plusieurs versions de ce contenu existe ce qui peut également être une bonne solution mais cela revient à désindexer les urls de type collections et ne garder le référencement que les urls des produits de type: « /products/nomduproduit »
Si cette solution vous convient voici le bout de code à placer au même endroit en remplacement des codes donnés plus haut 😉
Bon tuto shopify à vous 😉
Roll
5 Juil 2019Pour les url sur Facebook, on peut mettre une redirection avec Shopify ? A moins que ça fait aussi un dublicate content
Dgeo Dev
6 Juil 2019Bonjour, je suis navré je ne suis pas sur d’avoir compris la question… mais les liens mis sur Facebook doivent idéalement être les urls référencées sur Google afin de Booster le SEO. Bon WE
JB
13 Juil 2019N’y a t il pas la possibilité de faire plus simple sur speedfly ?
Dgeo Dev
14 Juil 2019Bonjour, le canonical est automatiquement choisi et appliqué sur speedfly 😉
NARO
15 Juil 2019Bonjour et merci pour ce tuto !
Cependant, je ne comprends pas bien.. dans le paragraphe « Avant de vous lancer ! » ligne 2: « En haut dans les balises head regardez si vous trouvez cette balise: »
Quelle est la balise en question ?
(thème début) J’ai tout de même regardé et après ma balise head (en supposant que c’est ce genre de balise qu’il faut avoir -ou pas-), j’ai:
Que dois-je faire ? Supprimer cette balise et faire la suite du tuto ?
Merci d’avance pour votre retour 🙂
Dgeo Dev
15 Juil 2019Hello, j’ai mis à jour le tuto pour indiquer la balise à rechercher 😉 Bonne soirée
Ema
1 Août 2019Bonjour j’ai supprimé la balise dans le fichier du template mais rien à faire elle s’affiche toujours dans mes pages produits… Savez-vous à quels autres endroits elle pourrait être ? Merci
Dgeo Dev
4 Août 2019Bonjour, comment testez-vous sa présence ? si c’est pas google ca ne sera pas effectif de suite… le temps que google repasse sur le site donc entre 1 semaine et plus d’un mois ou 2 mois selon le trafic. Pour tester je vous conseille sur une de vos page qui doit ou ne doit pas être indexée de faire un ctrl + S et d’ouvrir la source de votre page et de faire un ctrl + F pour recherche la balise souhaitée (no follow ou canonical). Bonne chance 🙂
roger delamare
21 Août 2019Bonjour, j’ai dans mon thème mais j’ai tout de même du duplicate content interne, j’ai cru comprendre qu’elle l’empêchait.
Sinon les urls que j’aimerai seulement indexer sont de type collections/nomcollec/products/nomprod car chez moi le products est tout de même présent, mais cela ne risque t-il pas de tout désindexer si j’applique votre méthode? Et sinon pourquoi conseillez vous l’url native avec juste products (est-elle plus performante? je croyais que c’était le contraire)
Aussi je voulais savoir si on devait d’abord supprimer temporairement toutes les urls dans la search console avant, ou la suppression est automatique avec votre méthode?
Enfin j’ai aussi des urls avec des ? et du charabia ensuite comment faire pour les enlever?
Merci, sinon super tuto 🙂
Dgeo Dev
24 Août 2019Bonjour et merci pour le message , je vais essayer de répondre rapidement dans l’ordre 🙂
Dans la majorité des thèmes une balise canonical est présente. Si elle est la il faut la retirer car vous préférez les urls avec collections et mettre le code du tuto pour dexindexer le products…
Pour l’url native c’est par ce que shopify préfère et il faut souvent aller dans le sens du developpeur mais les 2 se valent
Il est préférable de le supprimer dans la search console pour que ca aille plus vite sinon il faut attendre le passage du robot google pour qu’il refasse sa tabouille 🙂
Les urls avec ? ca vient souvent de facebook qui rajoute ce genre d’identifiant au clic sur un lien… pas besoin de s’en occuper
Bon WE à vous
med081
20 Déc 2019Bonjour,
je veux supprimer uniquement les liens produits qui ne sont pas issus de la collection, je copie colle votre juste avant la fin de la bannière head, sur le theme Brooklyn.
Mais rien ne fait, aucun changement ?
(PS. j’ai aussi essayer de supprimer le code canonical, mais rien non plus?)
Pouvez-vous me donner plus de détails ?
Dgeo Dev
24 Déc 2019Hello, comment testez vous car google met du temps à re crawler, le mieux est de tester en live sur ce type de lien en mettant votre lien en fin d’url: https://search.google.com/structured-data/testing-tool/u/0/?hl=fr#url=
Claire
9 Jan 2020Bonjour, je ne comprends pas la différence entre le canonical et la première solution donnée. Merci!
Dgeo Dev
14 Jan 2020Bonjour, la meilleure solution à l’heure actuelle reste la balise canocical. la 1ere solution reste identique mais elle la à titre informatif si le thème n’a pas la balise canonical.
Thomas
24 Jan 2020Bonjour,
Merci pour les tutos ! 🙂
Concernant la desindexation des pages types mentions légales, FAQ, CGV…
Si je souhaite garder le canonical doit-on mettre à la suite le code canonical puis le code pour chaque page que l’on souhaite desindexer ?
Comme dans l’exemple ci dessous ?
{% if template == « page » %}
{% assign $pageUrl = page.url | without: collection %}
{% if pageUrl contains ‘conditions-generales-de-vente’ %}
{% endif %}
{% endif %}
Bonne journée 🙂
Dgeo Dev
25 Jan 2020Hello, tu peux mettre des conditions OU… en adaptant la portion de code suivante : {% if pageUrl contains ‘conditions-generales-de-vente’ %} par
{% if pageUrl contains ‘conditions-generales-de-vente’ or pageUrl contains ‘mentions-legales’ or pageUrl contains ‘faq’ %}
Bonne soirée
Théo
3 Avr 2020Bonjour, le fait de retirer « Code pour supprimer les urls de type: « /collections/nomdelacollection/nomduproduit ». » ceci ne va pas noindex les page de collections ?
Dgeo Dev
4 Avr 2020Hello, non car on sera sur le produit appartenant à la collection et non sur cette collection.
Flo
5 Juin 2020Bonjour Dgeo Dev,
Je pensai que avec la sitemap de shopify google n’indexait que les fiches produits canoniques et donc que nous n’étions pas pénalisé en SEO par le duplicate content des collections.
En regardant avec googlesearchconsole c’est bien le cas, google n’a indexé que mes canonique.
Aussi à quoi sert de toucher au code?
Merci d’éclairer ma lanterne car je vois bien que tt le monde le fait 🙂
Dgeo Dev
6 Juin 2020Hello, alors ca dépend des thèmes 🙂 la plupart mettent la balise canonical sur l’url products/nomduproduit qui pour moi est le plus judicieux et si c’est le cas le tuto n’est pas vraiment utile 😉
Par contre pour les personnes qui souhaitent une autre approche ou que le thème ne suit pas cette norme c’est pratique. Le sitemap de shopify est dynamique il s’adapte aux options du thème
Jérémy
5 Juil 2020Bonjour Dgeo, J’ai récemment passé ma boutique shopify en multilingue et depuis google me l’indexe avec le sous-répertoire /en (« URL canonique déclarée par l’utilisateur »). Donc même sur un navigateur configuré en français, tout s’affiche en anglais… Est qu’une balise du type suffirait à faire comprendre à Google ou faut-il que j’utilise une balise canonical comme dans ton tuto ? Je voudrais que chaque version (chaque langue) soit indexée mais en gardant la langue française en version principale. Merci d’avance de ta réponse et de tous tes conseils !
Dgeo Dev
6 Juil 2020Hello, logiquement c’est dans l’application de multilangue que cela doit être géré. Si tu utilises Weglot ou Langify c’est automatiquement bien configuré.
Jérémy
6 Juil 2020Je n’utilise pas weglot ou langify. L’application que j’utilise affiche bien la bonne langue sur le site en fonction de la langue du navigateur mais j’ai l’impression que cela ne fonctionne pas pour les liens Google (et les développeurs ne savent pas). Du coup je pense que ça va être à moi de le faire mais j’ai un doute sur la balise à utiliser…? Aussi, est-ce que cela peut venir du fait que dans les fichiers locales, c’est l’anglais qui est marqué en « default » alors que toute ma boutique est configurée en Français ? Est ce que cela peut influencer Google ?
Dgeo Dev
6 Juil 2020Alors google regarde avant tout si dans le theme.liquid (dossier Layout) la balise
<html lang="fr">
est bien en fr… le fait d’avoir le thème par défaut en anglais va indiquer à google que le site est en<html lang="en">
. Je pense que le simple fait de mettre votre thème en français résoudra effectivement le soucis. Sinon il faudra investiguer si l’app le modifie pas le « fr » par « en » dans la balise html.Jérémy
6 Juil 2020Oui je comprends merci beaucoup ! Vaut-il mieux que je modifie la balise en « fr » ou que je supprime et recrée les deux fichiers locales (fr et en) pour mettre le « default » sur fr ?
Dgeo Dev
7 Juil 2020Alors tout dépend du thème mais si il est bien codé le simple fait de définir dans Boutique en ligne – Actions – Modifier langue et mettre en français modifie directement la balise en fr. Sinon oui vous pouvez forcer en le modifiant dans le fichier mais ca risque de supprimer la prise en compte dynamique du changement du système de multilangues…
Jérémy
7 Juil 2020La boutique était bien configuré en français dans « modifier langue » mais la balise n’avait pas été modifié en « fr » donc je vais mettre le « fr » moi même et je verrai bien. Merci beaucoup en tout cas !
Joker
6 Août 2020Hello, j’ai un soucis avec comment les canoniques url sont géré par shopify :
Lorsqu’on se rend une page produit en passant par une collection, l’url canonique est forcément : monsite.fr/products/nom-du-produit
Cependant l’URL normal pour la même page est : monsite.fr/collections/nom-de-la-collection/products/nom-du-produit.
Du coup l’url canonique se retrouve « canoniqualisé » vue que les deux url sont différentes…
J’aimerais que l’url canonique adapte correctement le chemin par ou le robot est passé pour se rendre sur X produit.
Ce site est un bon exemple de ce dont je parle avec l’extension détailled SEO, on voit bien qu’il décide si une page produit devrait être « canonical » tout en ayant le chemin de base du type : monsite.fr/collections/nom-de-la-collection/products/nom-du-produit
Lien de l’exemple : https://exotischerleben.de/collections/bambus-nachttisch/products/bambus-nacht-konsole-tabanan
Je ne sais pas si vous voyez ou je veux en venir , j’espère que vous allez pouvoir me venir en aide !
Merci
Dgeo Dev
6 Août 2020Bonjour, avec ce tuto vous pouvez définir génériquement si les urls de types products ou collections…/products laquelle de ces options seront prises en comptes. Cependant il est techniquement possible de faire des conditions basées sur les identifiants pour reprendre la main sur chaque produit mais cela demande une certaines compréhension du code et ca risque d’être vite une source de problème à la moindre erreur… A voir si des apps peuvent faire ce genre de choses mais honnêtement le canonical sur les urls natives /products/nomduproduit reste vraiment le plus efficace d’un point de vue SEO 😉
Meunier
7 Déc 2020Bonjour,
Pouvez-vous expliquer pourquoi l’url produit serait meilleur d’un point de vue SEO par rapport à l’url collection.
En effet, selon mon point de vue les collections ont un poid important et encore plus si elles se rank sur la serp. De plus, le fil d’ariane reste logique en url collection alors qu’en url produit on passe de l’accueil au produit directement.
Dgeo Dev
8 Déc 2020Bonsoir, tout simplement car elles ne sont pas indéxées sur le robots.txt que shopify génère automatiquement et que les urls courtes sont désormais préférées par google 🙂
Joker
6 Août 2020Hello, Tout d’abord merci pour votre réponse rapide. Donc si j’ai bien compris, avec votre tuto si je décide prendre en compte que les urls de types collections…/products , la canonique prendre l’url de base collection/nom-de-collection/products/nom-du-produit c’est bien sa ? 🙂
Dgeo Dev
7 Août 2020Oui c’est bien cela avec 2 avertissements ! 1. Bien enlever la balise canonical présente dans Layout – Theme.liquid / 2. ne pas avoir le même produit dans plus d’une collection sinon il va canoniser le même produit sur toutes les collections ou il est lié 🙂
Joker
13 Août 2020Coucou, je vois votre réponse tardivement.
Je vous remercie pour votre réponse et pour tout vos tutoriels, ils sont vraiment excellent et aide énormément. Concernant mon soucis, entre temps j’ai réussi à changer toute les canonique que je voulais en incluant les collections mais malheureusement le sitemap shopify généré automatiquement à crée un conflit au niveau du crawl de mes pages, aucune des /collections…/product n’a été indexé.
Je vais tenter votre tuto pour voir si je peut désindexé les urls /products/nom de produit.
Dgeo Dev
13 Août 2020Je vois, peut être une nouvelle lubie de shopify… dans ce cas essayer d’exclure le sitemap.xml de shopify dans la google seach console et laisser google gérer l’indexation lui même ou sinon demander au support de shopify d’intervenir car n’ayant pas d’accès au serveur ils sont les seuls capables de modifier cette configuration
Joker
13 Août 2020Bonjour à nouveau,
J’ai essayer la solution numéro 1 et sa desindexe bien l’url. Parcontre il y a un soucis, il desindexe également toutes les urls qu’ils contiennent /collection ou non…
Comme si il ne prenais pas en compte/ne voit pas le : Without collections, j’ai essayer avec le within, même chose :/
Savez-vous d’où vient le soucis ? Merci pour votre aide
sam mahone
11 Sep 2020Merci pour ce tuto. J’ai néanmoins une question importe sur les urls produits. Si je décide de désindexer les urls avec /collections et en gardant uniquement les urls /products, n’est-il pas plus intéressant de diriger directement l’internaute et google sur l’url /products quand on navigue sur le site ?
Je trouve que cela fait tâche ! Faut-il créer une redirection manuellement pour chaque produit (nuisible seo? ) ou entrez un bout de code pour simplifier tout cela ? (je suis preneur si vous avez un code pour le thème turbo).
Merci pour votre assistance ?
Dgeo Dev
12 Sep 2020Bonjour, effectivement sur la majorité des thèmes les urls de listing de produits sur la page d’accueil ou sur les collections redirigent vers des urls types du style : collection/… Speedfly propose cette option au besoin 😉 sinon pour le thème turbo je ne sais pas désolé le système de fichiers est très bordélique, il faudrait demander à leur support directement. Bonne journée
Simon
5 Oct 2020Hello,
Merci pour ton article, il m’a aidé à comprendre pour quoi il y avait ce bout de code sur mon theme turbo d’un shop que j’ai récupéré. Cependant je remarque qu’il y a la balise link avec le rel= »canonical » ET la balise meta avec le noindex. Est-ce qu’avoir les 2 est problématique ?
Je serai bien intéressé également pour la question de Sam Mahone sur le fait que du coup le link juice s’envoie sur les URL de type /collections alors qu’on devrait les envoyer sur /products.
Pour toi Dgeo Dev, le thème Speedfly est plus optimisé pour le SEO ? et pour les performances ?
Merci de ton retour.
Dgeo Dev
5 Oct 2020Hello, on peut effectivement avoir les 2 si ce type de pages doivent être totalement indexée même si le noindex suffit il faut savoir que sur shopify le canonical est mis partout donc c’est peut être la cause 🙂
Pour moi le plus judicieux est de rester en canonical sur products pour éviter le conflict avec le sitemap généré par shopify. les /collections/… pour moi ne sont pas bonnes pour le SEO.
Le thème Speedfly est effectivement à la connaissance le thème le plus optimisé en SEO à l’heure actuelle de part sa structure ses options avancées SEO et ses balises natives. Niveau performance on reste sous la barre des 2 secondes de chargement max si on ne surcharge bien évidemment pas trop en applications 😉
Le Flo
6 Oct 2020Hello !
Il reste les pages collections/filtres (les tags ou balises), qui peuvent être très nombreuses.
Olivier Andrieu d’ailleurs conseille de les désindexer.
Que penses tu du code ci-dessous pour désindexer les pages type collections/tag *** ?
NB : je ne suis pas développeur, j’ai trouvé ce code sur article en anglais, mais ne sais pas si c’est correct.
{% if template contains ‘collection’ and current_tags %}
{% else %}
{% endif %}
Dgeo Dev
8 Oct 2020Hello, effectivement ce code peut être intéressant !
Mathieu
11 Jan 2021Bonjour dgeodev 🙂
Je viens d’appliquer le code pour désindexer les pages produits qui ont des collections, mais je remarque que lorsque je clique sur un produit via une collection, l’URL du produit apparait toujours avec la collection, ça donne quelque chose comme : site/product/collection/nom du produit
Du coup je me demandais, est-ce que l’URL va rester aussi longue ou bien est-ce que lorsque les robots de Google vont passer ça va se transformer en : site/product/nom du produit ?
J’espère ne pas être hors sujet et que ma question est assez claire 🙂
Merci d’avance et désolé si ma question a l’air stupide ^^
Dgeo Dev
13 Jan 2021Hello, idéalement il faut que le template de collection liste les produits sans l’url des collections. A ma connaissance seule le thème speedfly le propose 🙂
Rémy
15 Jan 2021Salut j’ai crée plusieurs produit pour chaque variante que j’ai au lieu de les mettre tous ensemble cela est plus beau sur mon site comment je pourrais pour que seul 1 une des variante soit indexer et pour pas que google penser que c du contenue dupliquer.
Je devrais installer une url canonique sur chaque fiche produit ? Comment je peux faire cela ?
Dgeo Dev
15 Jan 2021Hello, le mieux d’un point de vue seo est de toutes les référencées et de faire un contenu différent pour chaque produit
RAscuna
3 Mai 2021Bonjour,
J’ai pu voir votre tuto sur comment éviter le spam content sur shopify avec la balise canonicale. C’est un très bon article mais je n’arrive pas à comprendre certaines choses, si vous pouviez m’éclairer.
Je fais du seo avec des thèmes différent, mais je compte passer pour mon prochain shop sur le thème SpeedFly. Vous dites qu’il est plus intéressant d’indexer à google les site/products/ que site/collection/nomdelacollection/products/nomduproduit ? Ce qui est logique au premier abord, mais cela veut dire que ma page de collection ne sera pas indexé celle ou sont présent tous mes produits (accessible depuis la home page) ?
J’ai vu que vous disiez que SpeedFly propose de le changer, donc vaut-il mieux avoir seulement une url site/products ou site/collection/products… Il sera toujours possible de ranker sur la page de collection ?
Je sais pas si j’ai été assez claire mais j’attend votre réponse avec impatience !
Dgeo Dev
5 Mai 2021Hello, oui il vaut mieux rester sur des urls de produit du type /products/… car dtf shopify indexe pas les urls avec les collections. Ca n’a aucunes incidences du moins sur les thèmes comme speedfly qui sont optimisés la dessus. Les collections sont indexées et les liens vers les produits sont qu’en a eux sans l’url des collection afin d’optimiser tout ça. De puis depuis peu le fil d’ariane peut etre conservé comme afin de revenir sur la collection qui contient ce produit ce qui n’est nativement pas possible. A ma connaissance seul speedfly proposer cela 😉 bonne soirée
Aurelien
18 Déc 2021Merci pour votre tuto très complet !
Après de multiples recherches et tests sur mon site, je n’arrive pas à réaliser une étape importante pour mon site.
Explication du problème :
J’ai un produit « A » qui est mis dans une collection « B ».
Ce produit existe donc sous deux urls,
URL 1: https://www.monsite.fr/products/A/
URL 2: https://www.monsite.fr/collections/B/products/A/
Ma problématique :
Lorsque je vais sur ma page collection de produits, soit : https://www.monsite.fr/collections/B/ et que je clique sur un produit, j’aimerais que l’URL qui s’affiche soit de type https://www.monsite.fr/collections/B/products/A/ (soit URL2) et non https://www.monsite.fr/products/A/ (soit URL1).
Je pense que ces deux sujets sont très similaires et que votre thème est lié à ma question.
Merci par avance de vos réponses.
Dgeo Dev
20 Déc 2021Hello et merci pour le message 🙂 à vrai dire cela dépend de la configuration du thème. Si vous avez speedfly il suffit de nous contactar sur notre support ici pour vous guider : speedecom.freshdesk.com
Théo
6 Fév 2023Salut Dgeo, j’affiche sur chaque fiche produit depuis le code un paragraphe seo qui fait un lien de maillage à la collection mère manuellement avec plusieurs if en fonction de sa collection et un lien pour le produit suivant de cette même collection du produit actuel pour le maillage avec l’appel liquid collection.next_product.url
Mon problème est qu’en parcourant le site depuis le menu j’arrive bien sur mon produit avec une url collection/nom/product/nom donc l’appel liquid est correct car shopify m’affiche bien un lien pour le produit suivant de cette même collection, mais si je clique sur une publicité, ou sur un produit en home page par exemple, le lien d’arrivé est directement un /product/nom de ce fait l’appel liquid collection.next_product. ne fonctionne pas, rien ne s’affiche, tu sais comment je pourrais résoudre ce problème ?
Pour faire plus simple :
sur un produit avec le lien long un appel liquid collection.title s’affiche mais ne s’affiche pas sur ce meme produit en lien court.
Merci par avance de ton temps,
Théo