Masquer un produit (search interne Shopify + SEO Google)
Très utile pour faire des tests sur des produits, ou bien pour les produits gratuits du panier (produits offerts). Attention bien vérifier que c'est fonctionnel avec le thème en cours.
Méthode 1 : Utiliser un metafield personnalisé
Créer le metafield
- Allez dans Paramètres → Metafields → Produits
- Cliquez sur Ajouter une définition
- Configurez le metafield :
- Type de contenu : Nombre (Number)
- Nom : Masquer le produit
- Namespace et clé :
seo.hidden - Description : Entrez "1" si vous souhaitez masquer ce produit (Search et Google)
Utilisation dans le code
Masquer de la recherche interne Shopify
Dans votre template de recherche (templates/search.liquid ou section de recherche) :
{% for product in search.results %}
{% if product.metafields.seo.hidden != 1 %}
{% render 'product-card', product: product %}
{% endif %}
{% endfor %}Masquer des collections
Dans vos sections de collection :
{% for product in collection.products %}
{% unless product.metafields.seo.hidden == 1 %}
{% render 'product-card', product: product %}
{% endunless %}
{% endfor %}Masquer du sitemap et du SEO
Dans votre theme.liquid ou dans les balises meta, ajoutez une condition pour exclure les produits masqués :
{% if product.metafields.seo.hidden == 1 %}
<meta name="robots" content="noindex, nofollow">
{% endif %}Exemple complet dans une section produit
{% unless product.metafields.seo.hidden == 1 %}
<div class="product-card">
<h2>{{ product.title }}</h2>
<p>{{ product.price | money }}</p>
<a href="{{ product.url }}">Voir le produit</a>
</div>
{% endunless %}Méthode 2 : Utiliser la fonctionnalité "Non répertorié" de Shopify
Shopify propose maintenant une fonctionnalité native pour masquer un produit de la recherche et du référencement.
Activer "Non répertorié" sur un produit
- Allez dans Produits → Sélectionnez un produit
- Dans la section Visibilité, cochez "Non répertorié"
- Le produit sera automatiquement :
- Masqué de la recherche interne Shopify
- Masqué des moteurs de recherche (noindex)
- Accessible uniquement via son URL directe
Vérifier dans le code
Vous pouvez vérifier si un produit est non répertorié avec :
{% if product.status == 'active' %}
{# Produit actif et répertorié #}
{% elsif product.status == 'archived' %}
{# Produit archivé #}
{% endif %}Pour vérifier si un produit est accessible :
{% if product.available %}
{# Le produit est disponible et peut être acheté #}
{% endif %}Comparaison des deux méthodes
Metafield personnalisé (seo.hidden)
Avantages :
- Contrôle total sur l'affichage
- Peut être utilisé pour des cas spécifiques (produits offerts, tests)
- Flexible : vous pouvez créer votre propre logique
- Compatible avec tous les thèmes
Inconvénients :
- Nécessite de modifier le code partout où les produits sont affichés
- Doit être géré manuellement dans chaque template/section
- Risque d'oublier certains endroits
Fonctionnalité native "Non répertorié"
Avantages :
- Géré automatiquement par Shopify
- Pas besoin de modifier le code
- Masqué automatiquement de la recherche et du SEO
- Plus simple à utiliser
Inconvénients :
- Moins de contrôle sur l'affichage
- Le produit est complètement masqué (pas de logique conditionnelle)
Cas d'usage
Produits offerts (gratuits)
Pour les produits offerts qui ne doivent pas apparaître dans la recherche :
{% for product in collection.products %}
{% if product.price == 0 and product.metafields.seo.hidden == 1 %}
{# Produit gratuit masqué - ne pas afficher #}
{% else %}
{% render 'product-card', product: product %}
{% endif %}
{% endfor %}Produits en test
Pour tester des produits sans les rendre visibles :
{% if product.metafields.seo.hidden != 1 %}
{# Afficher le produit normalement #}
{% else %}
{# Produit en test - afficher uniquement pour les admins #}
{% if customer.tags contains 'admin' %}
{% render 'product-card', product: product %}
{% endif %}
{% endif %}Masquer conditionnellement dans différentes sections
{% comment %} Dans une section de produits vedettes {% endcomment %}
{% for product in collections.featured.products %}
{% unless product.metafields.seo.hidden == 1 %}
{% render 'product-card', product: product %}
{% endunless %}
{% endfor %}
{% comment %} Dans une section de produits récents {% endcomment %}
{% for product in collections.new.products %}
{% if product.metafields.seo.hidden != 1 %}
{% render 'product-card', product: product %}
{% endif %}
{% endfor %}Implémentation complète
Template de recherche
{% paginate search.results by 24 %}
<div class="search-results">
{% for item in search.results %}
{% if item.object_type == 'product' %}
{% assign product = item %}
{% unless product.metafields.seo.hidden == 1 %}
{% render 'product-card', product: product %}
{% endunless %}
{% endif %}
{% endfor %}
</div>
{% endpaginate %}Section de collection
<div class="collection-products">
{% for product in collection.products %}
{% if product.metafields.seo.hidden != 1 %}
<div class="product-item">
{% render 'product-card', product: product %}
</div>
{% endif %}
{% endfor %}
</div>Snippet product-card avec vérification
{% comment %} snippets/product-card.liquid {% endcomment %}
{% unless product.metafields.seo.hidden == 1 %}
<div class="product-card">
<a href="{{ product.url }}">
<img src="{{ product.featured_image | img_url: 'medium' }}" alt="{{ product.title }}">
<h3>{{ product.title }}</h3>
<p>{{ product.price | money }}</p>
</a>
</div>
{% endunless %}SEO et référencement
Balises meta pour les produits masqués
{% if product.metafields.seo.hidden == 1 %}
<meta name="robots" content="noindex, nofollow">
<meta name="googlebot" content="noindex, nofollow">
{% endif %}Sitemap XML
Si vous générez un sitemap personnalisé, excluez les produits masqués :
{% for product in collections.all.products %}
{% if product.metafields.seo.hidden != 1 %}
<url>
<loc>{{ shop.url }}{{ product.url }}</loc>
<lastmod>{{ product.updated_at | date: '%Y-%m-%d' }}</lastmod>
</url>
{% endif %}
{% endfor %}Vérifications importantes
Tester avec le thème en cours
Avant de mettre en production, vérifiez que le masquage fonctionne dans :
- ✅ Page de recherche : Les produits masqués n'apparaissent pas
- ✅ Collections : Les produits masqués sont exclus
- ✅ Produits vedettes : Les produits masqués ne sont pas affichés
- ✅ Produits récents : Les produits masqués sont exclus
- ✅ Sitemap : Les produits masqués ne sont pas référencés
- ✅ Balises meta : Les produits masqués ont
noindex
Test rapide
{% comment %} Test pour vérifier que le metafield fonctionne {% endcomment %}
{% if product.metafields.seo.hidden == 1 %}
<!-- PRODUIT MASQUÉ - Ne pas afficher -->
{% else %}
<!-- Produit normal - Afficher -->
{% endif %}Bonnes pratiques
- Documentation : Documentez l'utilisation du metafield
seo.hiddendans votre équipe - Cohérence : Utilisez toujours la même logique partout (
== 1ou!= 1) - Tests : Testez régulièrement que les produits masqués ne s'affichent pas
- Alternative native : Considérez d'abord la fonctionnalité "Non répertorié" de Shopify si elle répond à vos besoins
- Performance : Les conditions Liquid sont rapides, mais évitez les boucles trop complexes
Notes importantes
- ⚠️ Vérification du thème : Assurez-vous que cette fonctionnalité est compatible avec votre thème
- ⚠️ Produits offerts : Les produits gratuits peuvent être masqués pour éviter qu'ils apparaissent dans les résultats de recherche
- ⚠️ Tests : Utilisez cette fonctionnalité pour tester des produits sans les rendre publics
- ⚠️ SEO : Les produits masqués ne doivent pas être indexés par Google pour éviter les problèmes de contenu dupliqué
Ressources
- Documentation Shopify Metafields : Shopify Metafields (opens in a new tab)
- Produits non répertoriés : Shopify Help - Unlisted Products (opens in a new tab)