Publié le 10 février 2026 SEO Technique

Comment Mettre en Pause une Boutique Shopify : Guide Complet sur le Plan Pause et Construction et la Désactivation

Sommaire de l'article

Introduction

Mettre en pause une boutique Shopify peut s'avérer nécessaire pour de nombreuses raisons : maintenance technique, refonte complète du site, restructuration du catalogue produits, saisonnalité de l'activité, congé prolongé ou simple période d'arrêt temporaire des ventes. Quelle que soit votre situation, il est essentiel de comprendre les options offertes par Shopify pour suspendre votre activité tout en préservant vos données, votre référencement et la confiance de vos clients.

Contrairement à une idée répandue, il n'existe pas d'option totalement gratuite qui permettrait de conserver une boutique active sur les serveurs de Shopify sans aucun abonnement. Shopify propose en réalité un plan spécifique appelé « Pause et Construction » (Pause and Build), facturé à un tarif réduit, ainsi qu'une option de désactivation complète de la boutique, quiéquivaut à une fermeture de compte. Bien distinguer ces deux scénarios est indispensable avant de prendre une décision.

Dans ce guide complet, vous allez découvrir :

  • La différence entre mise en pause et désactivation complète d’une boutique Shopify.
  • Le fonctionnement détaillé du plan Pause et Construction et son coût réel.
  • Les impacts sur vos clients, vos commandes, vos applications et vos noms de domaine.
  • La procédure pas à pas pour mettre votre boutique en pause puis la réactiver.
  • Les bonnes pratiques SEO pour protéger votre visibilité pendant la pause.

Comprendre les Deux Grandes Options Shopify : Pause et Désactivation

1. Le plan « Pause et Construction » (Pause and Build)

Le plan Pause et Construction est la solution officielle proposée par Shopify pour les marchands qui souhaitent faire une pause dans les ventes tout en gardant leur boutique en ligne et en conservant l’accès à l’interface d’administration. Il s’agit d’un abonnement à tarif réduit, facturé 9 $ US par mois.

Avec ce plan :

  • Votre boutique reste visible en ligne : les visiteurs peuvent parcourir vos pages, vos collections et vos fiches produits.
  • La page de paiement (checkout) est désactivée : aucun achat ne peutêtre effectué, le panier et le paiement sont bloqués.
  • Vous conservez un accès complet à l’admin Shopify : produits, thèmes, paramètres, contenu, SEO, pages, menus, etc.
  • Vous pouvez continuer à travailler sur votre boutique, préparer des collections, optimiser les fiches produits, améliorer le design, etc.

Ce plan n’est pas une désactivation totale : il s’agit d’une pause commerciale, pas d’une fermeture de compte. Vous payez un petit abonnement mensuel pour conserver votre infrastructure, votre design, vos données et votre visibilité en ligne, tout en mettant les ventes en suspens.

2. La désactivation complète de la boutique Shopify

La désactivation complète (ou fermeture de la boutique) est une opération radicalement différente. Elle consiste à fermer votre compte Shopify pour la boutique concernée. Dans ce cas :

  • Votre site n’est plus en ligne : les visiteurs ne voient plus votre boutique.
  • Vous perdez l’accès à l’administration Shopify de cette boutique une fois la fermeture confirmée.
  • Les abonnements et facturations Shopify pour cette boutique sont arrêtés.
  • Pour revenir, vous devrez créer une nouvelle boutique ou tenter de réactiver en contactant le support, selon les politiques en vigueur et le délaiécoulé.

Il est donc trompeur d’affirmer qu’en désactivant la boutique, le site resterait en ligne mais sans possibilité de paiement. Ce scénario correspond en réalité au plan Pause et Construction. La désactivation complèteéquivaut à une mise hors ligne de votre site et à une fermeture de compte.

Conditions d’Éligibilité au Plan Pause et Construction

Le plan Pause et Construction n’est pas accessible à toutes les boutiques dans tous les cas. Pour en bénéficier, vous devez respecter certaines conditions :

  • Votre boutique doit avoir quitté la période d’essai gratuite.
  • Vous devez avoirété sur un abonnement payant actif (par exemple : Basic Shopify, Shopify, Advanced Shopify, etc.).
  • Toutes les factures en cours doiventêtre réglées avant de passer au plan Pause et Construction.

En d’autres termes, vous ne pouvez pas utiliser le plan Pause et Construction comme une prolongation gratuite de la période d’essai ou comme un moyen de conserver une boutique sans aucun abonnement. Il s’agit d’un forfait payant à tarif réduit.

Fonctionnement Concret du Plan Pause et Construction

Accès à l’interface d’administration Shopify

Contrairement à certaines affirmations erronées, le plan Pause et Construction ne supprime pas votre accès admin. Au contraire, vous conservez la possibilité de :

  • Gérer et mettre à jour vos produits (titres, descriptions, prix, variantes, images).
  • Modifier votre thème, vos sections, votre mise en page et votre identité visuelle.
  • Ajouter, éditer ou supprimer vos pages de contenu (À propos, FAQ, CGV, politique de confidentialité, etc.).
  • Travailler sur votre référencement naturel (balises titres, méta-descriptions, structure des URL, maillage interne).
  • Paramétrer vos menus, collections, filtres de navigation et votre structure globale.
  • Consulter des rapports de base sur votre boutique (trafic, historique des ventes passées, etc.).

Le plan Pause et Construction est donc particulièrement adapté si vous souhaitez profiter de la période de pause pour repenser en profondeur votre boutique, améliorer l’expérience utilisateur et optimiser votre SEO avant la reprise des ventes.

Expérience côté clients pendant la pause

Pendant que votre boutique est sur le plan Pause et Construction :

  • Les visiteurs peuvent accéder à la boutique via votre URL habituelle.
  • Ils peuvent consulter vos catégories, lire vos fiches produits, découvrir votre marque et vos contenus.
  • Ils ne peuvent pas ajouter de produits au panier, ou si le panier est accessible, ils ne peuvent pas finaliser la commande.
  • Le checkout et les paiements sont désactivés.

Vous pouvez choisir de :

  • Laisser la boutique visible avec les produits consultables, mais sans achat possible.
  • Ajouter un message clair en page d’accueil (ou en pop-up) indiquant que la boutique est temporairement en pause et précisant une date de retour si vous la connaissez.
  • Protéger la boutique par un mot de passe si vous préférez que seuls certains visiteurs y accèdent (par exemple, partenaires, équipe interne, bêta-testeurs).

Fonctionnalités limitées pendant la pause

Certaines fonctionnalités sont limitées ou désactivées sur le plan Pause et Construction, notamment :

  • La vente en ligne (checkout) est désactivée.
  • Les remises, codes promo et certaines fonctionnalités marketing liées au checkout ne sont plus disponibles.
  • Les intégrations directes avec certains canaux de vente (Facebook Shop, Google Shopping, etc.) peuventêtre impactées tant que la boutique ne prend plus de commandes.

En revanche, vous pouvez continuer à créer des commandes provisoires (brouillons) pour des clients spécifiques, mais ces commandes ne peuvent pasêtre transformées en commandes classiques via le checkout en ligne tant que la boutique est en pause.

Différence Clé entre Pause et Désactivation Complète

Résumé comparatif

Pour clarifier définitivement les choses :

  • Pause et Construction : boutique en ligne, pas de ventes, admin accessible, abonnement réduit à 9 $ US par mois.
  • Désactivation complète : boutique hors ligne, accès admin supprimé à terme, fermeture du compte, arrêt de l’abonnement.

Si votre objectif est de :

  • Revenir rapidement à la vente après une période de travail interne ou une pause saisonnière : optez pour Pause et Construction.
  • Quitter définitivement Shopify ou arrêter l’activité pour une durée indéterminée sans payer d’abonnement : envisagez la désactivation complète, en gardant à l’esprit qu’il sera plus complexe de revenir ensuite.

Étapes pour Mettre en Pause une Boutique Shopify (Plan Pause et Construction)

Étape 1 : Préparer la mise en pause

Avant de changer de plan, prenez le temps de préparer la transition :

  • Traitez toutes les commandes en cours : expédiez les produits, mettez à jour les statuts et informez vos clients.
  • Vérifiez vos remboursements et litiges : assurez-vous que tout est régularisé.
  • Sauvegardez vos données importantes : exports de produits, listes de clients, rapports de ventes, si nécessaire.
  • Informez vos clients de la mise en pause à venir (email, réseaux sociaux, bandeau sur le site).

Étape 2 : Accéder aux paramètres du plan

Pour mettre votre boutique Shopify en pause via le plan Pause et Construction :

  1. Connectez-vous à votre interface d’administration Shopify en tant que propriétaire de la boutique.
  2. Cliquez sur Paramètres (en bas à gauche de l’interface).
  3. Allez dans la section Plan (ou Abonnement, selon les libellés en vigueur).

Étape 3 : Choisir l’option « Désactiver la boutique » puis « Pause et Construction »

Dans la page de gestion de votre plan :

  1. Cliquez sur le bouton « Désactiver la boutique ». Cela peut paraître contre-intuitif, mais c’est bien par cette option que Shopify vous proposera ensuite le plan de pause.
  2. Une fenêtre s’affiche avec plusieurs choix. Sélectionnez l’option « Pause et Construction ».
  3. Lisez les détails du plan (notamment le coût de 9 $ US par mois et les limitations).
  4. Validez votre choix pour passer officiellement sur le plan Pause et Construction.

Étape 4 : Adapter le message pour vos visiteurs

Une fois la pause active, pensez à :

  • Ajouter un message explicite sur votre page d’accueil et/ou dans un bandeau, pour expliquer la situation (pause temporaire, date de retour estimée, éventuelle liste d’attente, etc.).
  • Configureréventuellement une page protégée par mot de passe si vous souhaitez limiter complètement l’accès pendant que vous travaillez sur le site.
  • Mettre à jour vos canaux de communication (réseaux sociaux, fiche Google Business Profile, newsletters) pouréviter toute confusion.

Réactiver une Boutique Shopify après une Pause

Étape 1 : Choisir un nouveau plan payant

Pour réactiver les ventes, vous devez quitter le plan Pause et Construction et choisir un plan payant actif (par exemple : Basic Shopify, Shopify, Advanced Shopify, Shopify Plus, selon vos besoins). La réactivation n’est pas un simple « retour automatique » à l’ancien plan : vous devez explicitement sélectionner un nouveau forfait.

Les tarifs des plans standard peuventévoluer dans le temps, mais l’idée clé est la suivante : dès que vous choisissez un plan payant et le validez, la facturation mensuelle reprend au tarif correspondant et votre checkout est réactivé.

Étape 2 : Vérifier les paramètres système

Après la réactivation :

  • Testez le processus de commande complet (ajout au panier, checkout, paiement) pour vous assurer que tout fonctionne.
  • Vérifiez les modes de paiement (Shopify Payments, PayPal, autres passerelles) et mettez à jour les informations si nécessaire.
  • Contrôlez vos taxes, frais de livraison et zones d’expédition.
  • Assurez-vous que vos applications essentielles (emailing, avis clients, upsell, etc.) sont actives et correctement configurées.

Étape 3 : Informer votre audience du retour

Une fois prête, communiquez largement sur la réouverture de votre boutique :

  • Envoyez une newsletter à votre liste.
  • Publiez des annonces sur les réseaux sociaux.
  • Ajoutez un bandeau ou une section « Nous sommes de retour ! » en page d’accueil.

Gestion des Commandes avant et pendant la Pause

Traiter les commandes existantes avant la pause

Avant de passer au plan Pause et Construction, il est fortement recommandé de :

  • Honorer toutes les commandes en cours (expédition, suivi, service après-vente).
  • Mettre à jour le statut de chaque commande (traitée, expédiée, livrée).
  • Gérer leséventuels remboursements et demandes de retour.

Mettre une boutique en pause sans avoir traité les commandes existantes peut générer de la frustration, des litiges et nuire durablement à votre réputation.

Commandes pendant la pause

Une fois la pause activée :

  • Aucune nouvelle commande ne peutêtre passée via le site, car le paiement est désactivé.
  • Les commandes déj à passées avant la pause doivent néanmoinsêtre suivies et traitées normalement.
  • Vous conservez l’accès à l’historique de vos commandes pour gérer le SAV, la facturation et les rapports.

Statut des Noms de Domaine pendant la Pause

Domaine acheté via Shopify

Si vous avez acheté votre domaine directement via Shopify :

  • Le domaine reste actif pendant la pause.
  • Vous continuez à payer ses frais annuels de renouvellement (en général autour de 10à 15 $ US par an, selon l’extension).
  • Votre URL continue donc de pointer vers votre boutique, qui reste visible, mais sans possibilité d’achat.

Domaine externe (fournisseur tiers)

Si votre domaine est géré par un registrar externe (OVH, Gandi, GoDaddy, etc.) :

  • Votre domaine reste lié à votre boutique Shopify, sauf si vous modifiez manuellement les DNS.
  • Vous devez renouveler ce domaine auprès de votre fournisseur habituel pouréviter sa perte.
  • La pause de votre boutique Shopify n’affecte pas automatiquement la facturation de votre domaine externe.

Statut des Applications et des Frais Associés

Abonnements aux applications tierces

Un point souvent oublié : le passage au plan Pause et Construction ne suspend pas automatiquement la facturation de vos applications tierces. Si vous utilisez des apps payantes (emailing, avis produits, pop-ups, upsell, etc.) :

  • Ces applications peuvent continuer à vous facturer pendant la pause, tant qu’elles restent installées sur votre boutique.
  • Pouréviter des frais inutiles, il est conseillé de désinstaller ou suspendre les apps payantes dont vous n’avez pas besoin pendant la pause.
  • Pensez à vérifierégalement les abonnements externes (outils de reporting, services connectés) qui pourraient rester actifs même si vos ventes sont à l’arrêt.

Bonnes Pratiques SEO avant et pendant la Mise en Pause

Optimiser le contenu avant la pause

La phase de pause est une excellente opportunité pour améliorer votre référencement naturel (SEO) :

  • Revoir les titres de pages (balises ) pour intégrer des mots-clés pertinents autour de vos produits et de votre niche.</li> <li>Optimiser les <strong>méta-descriptions</strong> pour inciter au clic et clarifier votre proposition de valeur.</li> <li>Enrichir les <strong>descriptions produits</strong> avec un contenu unique, détaillé et orienté utilisateur.</li> <li>Structurer votre site avec des <strong>catégories et sous-catégories logiques</strong> pour améliorer la navigation et le crawl des moteurs de recherche.</li> </ul> <h3 id="ameliorer-la-structure-du-site">Améliorer la structure du site</h3> <p>Profitez de la pause pour vérifier :</p> <ul> <li>La <strong>cohérence du maillage interne</strong> (liens entre pages, liens contextuels, renvois vers les catégories importantes).</li> <li>La <strong>performance technique</strong> (temps de chargement, images optimisées, responsive design).</li> <li>La clarté de vos <strong>menus de navigation</strong> et de vos filtres de recherche.</li> </ul> <h3 id="continuer-a-creer-du-contenu-de-qualite">Continuer à créer du contenu de qualité</h3> <p>Mettre une boutique en pause ne signifie pas arrêter de communiquer. Pour maintenir et développer votre audience :</p> <ul> <li>Alimentez régulièrement votre <strong>blog</strong> avec des articles utiles (guides, comparatifs, tendances, tutoriels).</li> <li>Restez actif sur vos <strong>réseaux sociaux</strong> pour garder le lien avec votre communauté.</li> <li>Collectez des <strong>adresses email</strong> (via un formulaire d’inscription) pour préparer une campagne de relance lors de la réouverture.</li> </ul> <h2 id="communication-avec-les-clients-pendant-la-pause">Communication avec les Clients pendant la Pause</h2> <h3 id="informer-clairement-de-la-mise-en-pause">Informer clairement de la mise en pause</h3> <p>La transparence est essentielle pour préserver la confiance de vos clients. Avant et pendant la pause :</p> <ul> <li>Envoyez un <strong>email explicatif</strong> à votre base de contacts pour annoncer la pause, en précisant les raisons (sans entrer dans des détails sensibles) et la durée estimée.</li> <li>Publiez des messages sur vos <strong>réseaux sociaux</strong> pour relayer l’information.</li> <li>Ajoutez un <strong>message visible</strong> sur votre site (bandeau, pop-up ou section dédiée) indiquant que les commandes sont temporairement suspendues.</li> </ul> <h3 id="preparer-le-retour">Préparer le retour</h3> <p>Utilisez la pause pour préparer activement la reprise :</p> <ul> <li>Créez une <strong>liste d’attente</strong> ou un formulaire pourêtre averti de la réouverture.</li> <li>Proposez, si possible, un <strong>cadeau de relance</strong> (code promo, accès anticipé) pour les abonnés à votre newsletter.</li> <li>Planifiez vos <strong>campagnes marketing</strong> (email, réseaux sociaux, publicités) pour le jour J.</li> </ul> <h2 id="faq-questions-frequemment-posees-sur-la-mise-en-pause-d-une-boutique-shopify">FAQ : Questions Fréquemment Posées sur la Mise en Pause d’une Boutique Shopify</h2> <dl> <dt>1. Puis-je mettre ma boutique Shopify en pause sans rien payer ?</dt> <dd>Non. Il n’existe pas d’option gratuite qui permet de garder une boutique en ligne avec accès à l’admin sans aucun forfait. Le plan officiel de pause est le <strong>plan Pause et Construction</strong>, facturé <strong>9 $ US par mois</strong>, qui maintient votre boutique en ligne mais désactive les ventes.</dd> <dt>2. Est-ce que je perds l’accès à l’administration de ma boutique pendant la pause ?</dt> <dd>Non, au contraire. Avec le <strong>plan Pause et Construction</strong>, vous conservez l’<strong>accès complet à l’admin Shopify</strong>. Vous pouvez continuer à modifier vos produits, votre thème, vos paramètres, vos pages et votre SEO. Ce n’est que dans le cas d’une <strong>désactivation complète</strong> que vous perdez l’accès à l’admin et que le site est hors ligne.</dd> <dt>3. Mon site reste-t-il visible pendant la pause ?</dt> <dd>Oui. Avec le plan Pause et Construction, votre site reste <strong>visible en ligne</strong>. Les visiteurs peuvent naviguer sur vos pages et voir vos produits. En revanche, les achats sont bloqués, car le système de paiement est désactivé. Si vous désactivez complètement la boutique, le site n’est plus accessible au public.</dd> <dt>4. Puis-je continuer à recevoir des commandes pendant la pause ?</dt> <dd>Non. Pendant que vousêtes sur le plan Pause et Construction, <strong>aucune nouvelle commande ne peutêtre passée</strong> via le site, car le checkout est désactivé. Vous pouvez toutefois traiter les commandes passées avant la pause et, dans certains cas, créer des commandes brouillons pour une gestion manuelle.</dd> <dt>5. Que se passe-t-il avec mes commandes en cours si je mets ma boutique en pause ?</dt> <dd>Les commandes déj à passées avant la mise en pause doiventêtre <strong>honorées normalement</strong>. Il est fortement conseillé de traiter toutes les commandes en cours (expédition, suivi, retours potentiels) avant de passer au plan Pause et Construction pouréviter tout problème de service client.</dd> <dt>6. Mes applications Shopify sont-elles mises en pause automatiquement ?</dt> <dd>Non. Le passage au plan Pause et Construction ne désactive pas automatiquement vos <strong>applications tierces</strong>. Si certaines apps sont payantes, elles peuvent continuer à vous facturer tant qu’elles restent installées. Pensez à <strong>désinstaller ou suspendre</strong> les apps dont vous n’avez pas besoin pendant la pause.</dd> <dt>7. Que devient mon nom de domaine pendant la pause ?</dt> <dd>Si votre domaine aété acheté via Shopify, il reste actif et continue d’être facturé annuellement. Si vous utilisez un domaine externe, il reste pointé vers votre boutique tant que vous gardez la configuration DNS. Dans tous les cas, la <strong>pause de la boutique n’interrompt pas la facturation de votre domaine</strong> : vous devez continuer à le renouveler auprès du fournisseur concerné.</dd> <dt>8. Comment réactiver ma boutique après une pause ?</dt> <dd>Pour réactiver votre boutique, vous devez <strong>choisir un plan payant</strong> (par exemple Basic Shopify, Shopify ou Advanced Shopify) depuis les paramètres de votre compte. Une fois le nouveau plan validé, la facturation mensuelle reprend au tarif correspondant et le <strong>checkout est réactivé</strong>. Pensez ensuite à tester le processus de commande et à informer vos clients de la réouverture.</dd> <dt>9. La mise en pause affecte-t-elle mon référencement naturel ?</dt> <dd>Étant donné que votre boutique reste en ligne et accessible avec le plan Pause et Construction, votre <strong>SEO n’est pas interrompu</strong>. Vous pouvez même profiter de cette période pour améliorer vos contenus, vos balises et votre structure. Il est toutefois important d’éviter de rendre la boutique totalement inaccessible aux robots (pas de blocage complet), sauf stratégie SEO très spécifique.</dd> <dt>10. Que faire si je souhaite quitter Shopify définitivement ?</dt> <dd>Si vousêtes certain de ne plus vouloir utiliser Shopify, vous pouvez opter pour la <strong>désactivation complète</strong> de la boutique, qui ferme votre compte, met le site hors ligne et arrête la facturation de l’abonnement Shopify. Avant cela, pensez à <strong>exporter vos données</strong> importantes (clients, produits, rapports), à informer vos clients et à gérer vos engagements légaux (facturation, garanties, etc.).</dd> </dl> <h2 id="conclusion">Conclusion</h2> <p>Mettre en pause une boutique Shopify ne se résume pas à « arrêter de payer » tout en conservant son site en ligne. Shopify propose un mécanisme bien défini : le <strong>plan Pause et Construction</strong>, facturé <strong>9 $ US par mois</strong>, qui permet de <strong>conserver l’accès à l’admin</strong>, de <strong>maintenir la boutique visible</strong> et de <strong>désactiver temporairement les ventes</strong>. À l’inverse, la <strong>désactivation complète</strong> correspond à une fermeture de compte, avec un site hors ligne et une perte d’accès à l’administration.</p> <p>En comprenant précisément la différence entre ces deux options, en gérant correctement vos <strong>commandes en cours</strong>, vos <strong>applications</strong>, vos <strong>noms de domaine</strong> et votre <strong>communication client</strong>, vous pouvez traverser une période de pause de manière sereine, tout en préparant une relance plus solide et mieux optimisée de votre activité e-commerce.</p> </div> <!-- Articles similaires --> <div class="mt-12 pt-8 border-t border-gray-200"> <h2 class="text-2xl font-bold text-gray-900 mb-6 flex items-center gap-2"> <i class="fas fa-newspaper text-purple-600"></i> Articles similaires </h2> <div class="grid gap-4"> <a href="/blog/comment-resilier-shopify-guide-complet-pour-fermer-ou-mettre-en-pause-votre-boutique/" class="block p-4 bg-white rounded-lg border border-gray-200 hover:border-purple-300 hover:shadow-md transition"> <span class="text-purple-600 font-semibold hover:text-purple-800">Comment résilier Shopify : guide complet pour fermer ou mettre en pause votre boutique</span> </a> <a href="/blog/comment-desactiver-sa-boutique-shopify-guide-complet-pour-fermer-suspendre-ou-mettre-en-pause-votre-/" class="block p-4 bg-white rounded-lg border border-gray-200 hover:border-purple-300 hover:shadow-md transition"> <span class="text-purple-600 font-semibold hover:text-purple-800">Comment désactiver sa boutique Shopify : guide complet pour fermer, suspendre ou mettre en pause votre magasin</span> </a> <a href="/blog/comment-mettre-sa-boutique-shopify-en-ligne-guide-complet-2025/" class="block p-4 bg-white rounded-lg border border-gray-200 hover:border-purple-300 hover:shadow-md transition"> <span class="text-purple-600 font-semibold hover:text-purple-800">Comment mettre sa boutique Shopify en ligne (guide complet 2025)</span> </a> </div> </div> <!-- CTA Section --> <div class="mt-12 pt-8 border-t border-gray-200"> <div class="bg-gradient-to-r from-purple-600 to-blue-600 rounded-xl p-8 text-center text-white"> <h3 class="text-2xl font-bold mb-4">Besoin d'aide avec votre SEO ?</h3> <p class="mb-6 text-purple-100">Notreéquipe d'experts peut vous aider à optimiser votre site e-commerce</p> <div class="flex flex-col sm:flex-row gap-4 justify-center"> <a href="/seo-ecommerce" class="bg-white text-purple-600 px-8 py-3 rounded-lg font-semibold hover:bg-purple-50 transition inline-block"> Découvrir nos services SEO </a> <a href="/#contact" class="bg-purple-800 text-white px-8 py-3 rounded-lg font-semibold hover:bg-purple-900 transition inline-block"> Nous contacter </a> </div> </div> </div> </article> <!-- Section Commentaires --> <div class="mt-12 max-w-4xl mx-auto bg-white rounded-2xl shadow-xl p-8 md:p-12"> <h2 class="text-3xl font-bold text-gray-900 mb-6 flex items-center gap-3"> <i class="fas fa-comments text-purple-600"></i> Commentaires </h2> <!-- Liste des commentaires approuvés --> <div id="comments-list" class="mb-8 space-y-6"> <!-- Les commentaires approuvés seront chargés ici via JavaScript --> </div> <!-- Formulaire de commentaire --> <div class="border-t border-gray-200 pt-8"> <h3 class="text-xl font-semibold text-gray-900 mb-4">Laisser un commentaire</h3> <form id="comment-form" class="space-y-4"> <input type="hidden" id="article-slug" value="comment-mettre-en-pause-une-boutique-shopify-guide-complet-sur-le-plan-pause-et-construction-et-la-d"> <div class="grid md:grid-cols-2 gap-4"> <div> <label for="comment-name" class="block text-sm font-medium text-gray-700 mb-2">Nom *</label> <input type="text" id="comment-name" name="name" required class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-600 focus:border-transparent"> </div> <div> <label for="comment-email" class="block text-sm font-medium text-gray-700 mb-2">Email *</label> <input type="email" id="comment-email" name="email" required class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-600 focus:border-transparent"> </div> </div> <div> <label for="comment-message" class="block text-sm font-medium text-gray-700 mb-2">Message *</label> <textarea id="comment-message" name="message" rows="5" required class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-600 focus:border-transparent"></textarea> </div> <div class="text-sm text-gray-600"> <i class="fas fa-info-circle text-purple-600"></i> Votre commentaire sera soumis à modération avant publication. </div> <button type="submit" class="bg-gradient-to-r from-purple-600 to-blue-600 text-white px-8 py-3 rounded-lg font-semibold hover:from-purple-700 hover:to-blue-700 transition inline-flex items-center gap-2"> <i class="fas fa-paper-plane"></i> Publier le commentaire </button> </form> <div id="comment-status" class="mt-4 hidden"></div> </div> </div> <!-- Navigation Articles --> <div class="mt-12 max-w-4xl mx-auto"> <a href="/blog" class="inline-flex items-center gap-2 text-purple-600 hover:text-purple-800 transition font-semibold"> <i class="fas fa-arrow-left"></i> Retour au blog </a> </div> </div> </section> <!-- Script pour les commentaires --> <script> const articleSlug = 'comment-mettre-en-pause-une-boutique-shopify-guide-complet-sur-le-plan-pause-et-construction-et-la-d'; // Charger les commentaires approuvés async function loadComments() { try { const response = await fetch(`/gestion-commentaires/get-comments.php?slug=${articleSlug}`); const data = await response.json(); const commentsList = document.getElementById('comments-list'); if (data.success && data.comments.length > 0) { commentsList.innerHTML = data.comments.map(comment => ` <div class="border-l-4 border-purple-600 pl-4 py-2"> <div class="flex items-center gap-2 mb-2"> <strong class="text-gray-900">${comment.name}</strong> <span class="text-sm text-gray-500">•</span> <span class="text-sm text-gray-500">${new Date(comment.date).toLocaleDateString('fr-FR')}</span> </div> <p class="text-gray-700">${comment.message}</p> </div> `).join(''); } else { commentsList.innerHTML = '<p class="text-gray-500 italic">Aucun commentaire pour le moment. Soyez le premier à commenter !</p>'; } } catch (error) { console.error('Erreur lors du chargement des commentaires:', error); } } // Gérer la soumission du formulaire document.getElementById('comment-form').addEventListener('submit', async function(e) { e.preventDefault(); const formData = { slug: articleSlug, name: document.getElementById('comment-name').value, email: document.getElementById('comment-email').value, message: document.getElementById('comment-message').value }; const submitBtn = this.querySelector('button[type="submit"]'); const originalText = submitBtn.innerHTML; submitBtn.disabled = true; submitBtn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Envoi en cours...'; try { const response = await fetch('/gestion-commentaires/submit-comment.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(formData) }); const result = await response.json(); const messageDiv = document.getElementById('comment-status'); if (result.success) { messageDiv.className = 'mt-4 p-4 bg-green-100 border border-green-400 text-green-700 rounded-lg'; messageDiv.textContent = 'Merci ! Votre commentaire aété soumis et sera publié après modération.'; messageDiv.classList.remove('hidden'); this.reset(); } else { messageDiv.className = 'mt-4 p-4 bg-red-100 border border-red-400 text-red-700 rounded-lg'; messageDiv.textContent = result.message || 'Une erreur est survenue. Veuillez réessayer.'; messageDiv.classList.remove('hidden'); } } catch (error) { const messageDiv = document.getElementById('comment-status'); messageDiv.className = 'mt-4 p-4 bg-red-100 border border-red-400 text-red-700 rounded-lg'; messageDiv.textContent = 'Erreur de connexion. Veuillez réessayer plus tard.'; messageDiv.classList.remove('hidden'); } finally { submitBtn.disabled = false; submitBtn.innerHTML = originalText; } }); // Charger les commentaires au chargement de la page loadComments(); </script> <footer class="bg-gray-950 text-gray-400 py-12"> <div class="container mx-auto px-6"> <div class="flex flex-col md:flex-row justify-between items-center"> <div class="mb-6 md:mb-0 flex items-start gap-4"> <img src="/images/logo.png" alt="Logo VRAIVEX" class="h-32 w-32 md:h-40 md:w-40 object-contain"> <div> <a href="#" class="text-2xl font-bold block"> <span class="gradient-text">VRAIVEX</span> </a> <p class="mt-2 text-sm">Automatisation, IA et SEO au service de la performance e-commerce</p> </div> </div> <div class="flex flex-col items-center md:items-end"> <div class="grid grid-cols-2 md:flex md:flex-wrap gap-3 md:space-x-6 mb-4 text-center md:text-right"> <a href="/#about" class="hover:text-white transition text-sm">À propos</a> <a href="/#services" class="hover:text-white transition text-sm">Services</a> <a href="/#prestations" class="hover:text-white transition text-sm">Prestations</a> <a href="/#bestsellers" class="hover:text-white transition text-sm">Best Sellers</a> <a href="/#brands" class="hover:text-white transition text-sm">Nos marques</a> <a href="/creation-site-ecommerce" class="hover:text-white transition text-sm">Création Sites</a> <a href="/seo-ecommerce" class="hover:text-white transition text-sm">SEO E-commerce</a> <a href="/partenaires" class="hover:text-white transition text-sm">Partenaires</a> <a href="/#contact" class="hover:text-white transition text-sm">Contact</a> </div> <p class="text-sm text-center md:text-right">© 2025 VRAIVEX. Tous droits réservés.</p> </div> </div> </div> </footer> <!-- Back to Top Button --> <button id="backToTop" class="fixed bottom-8 right-8 bg-gradient-to-r from-purple-600 to-blue-600 text-white p-4 rounded-full shadow-lg hover:shadow-xl transform hover:scale-110 transition-all duration-300 z-50 hidden"> <i class="fas fa-arrow-up text-xl"></i> </button> <script> // Header scroll effect window.addEventListener('scroll', function() { const header = document.getElementById('header'); if (window.scrollY > 100) { header.classList.add('header-scrolled'); } else { header.classList.remove('header-scrolled'); } }); // Smooth scrolling for anchor links document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function (e) { e.preventDefault(); document.querySelector(this.getAttribute('href')).scrollIntoView({ behavior: 'smooth' }); }); }); // Mobile menu toggle const mobileMenuButton = document.getElementById('mobileMenuButton'); const mobileMenu = document.getElementById('mobileMenu'); const menuIcon = document.getElementById('menuIcon'); if (mobileMenuButton && mobileMenu) { mobileMenuButton.addEventListener('click', function() { mobileMenu.classList.toggle('hidden'); // Toggle icon between bars and times if (mobileMenu.classList.contains('hidden')) { menuIcon.classList.remove('fa-times'); menuIcon.classList.add('fa-bars'); } else { menuIcon.classList.remove('fa-bars'); menuIcon.classList.add('fa-times'); } }); // Close menu when clicking on a link const mobileLinks = mobileMenu.querySelectorAll('a'); mobileLinks.forEach(link => { link.addEventListener('click', function() { mobileMenu.classList.add('hidden'); menuIcon.classList.remove('fa-times'); menuIcon.classList.add('fa-bars'); }); }); } // Brands Carousel const brandsCarousel = document.getElementById('brandsCarousel'); const brandsContainer = document.getElementById('brandsContainer'); const brandsPrevBtn = document.getElementById('brandsPrevBtn'); const brandsNextBtn = document.getElementById('brandsNextBtn'); const brandsPrevBtnMobile = document.getElementById('brandsPrevBtnMobile'); const brandsNextBtnMobile = document.getElementById('brandsNextBtnMobile'); if (brandsContainer && brandsCarousel) { let currentIndex = 0; const cards = brandsContainer.querySelectorAll('.brand-card'); const cardsPerView = { mobile: 1, tablet: 2, desktop: 3, large: 4 }; function getCardsPerView() { const width = window.innerWidth; if (width >= 1280) return cardsPerView.large; if (width >= 1024) return cardsPerView.desktop; if (width >= 768) return cardsPerView.tablet; return cardsPerView.mobile; } function updateCarousel() { const cardsPerViewCount = getCardsPerView(); const containerWidth = brandsCarousel.offsetWidth; const cardWidth = containerWidth / cardsPerViewCount; const maxIndex = Math.max(0, cards.length - cardsPerViewCount); currentIndex = Math.min(currentIndex, maxIndex); brandsContainer.style.transform = `translateX(-${currentIndex * cardWidth}px)`; // Update button states const isAtStart = currentIndex === 0; const isAtEnd = currentIndex >= maxIndex; if (brandsPrevBtn) { brandsPrevBtn.style.opacity = isAtStart ? '0.5' : '1'; brandsPrevBtn.style.cursor = isAtStart ? 'not-allowed' : 'pointer'; } if (brandsNextBtn) { brandsNextBtn.style.opacity = isAtEnd ? '0.5' : '1'; brandsNextBtn.style.cursor = isAtEnd ? 'not-allowed' : 'pointer'; } if (brandsPrevBtnMobile) { brandsPrevBtnMobile.style.opacity = isAtStart ? '0.5' : '1'; brandsPrevBtnMobile.style.cursor = isAtStart ? 'not-allowed' : 'pointer'; } if (brandsNextBtnMobile) { brandsNextBtnMobile.style.opacity = isAtEnd ? '0.5' : '1'; brandsNextBtnMobile.style.cursor = isAtEnd ? 'not-allowed' : 'pointer'; } } function nextSlide() { const cardsPerViewCount = getCardsPerView(); const maxIndex = Math.max(0, cards.length - cardsPerViewCount); if (currentIndex < maxIndex) { currentIndex++; updateCarousel(); } } function prevSlide() { if (currentIndex > 0) { currentIndex--; updateCarousel(); } } // Event listeners if (brandsNextBtn) brandsNextBtn.addEventListener('click', nextSlide); if (brandsPrevBtn) brandsPrevBtn.addEventListener('click', prevSlide); if (brandsNextBtnMobile) brandsNextBtnMobile.addEventListener('click', nextSlide); if (brandsPrevBtnMobile) brandsPrevBtnMobile.addEventListener('click', prevSlide); // Set responsive width for cards function setCardWidths() { const cardsPerViewCount = getCardsPerView(); const containerWidth = brandsCarousel.offsetWidth; const gap = 24; // 24px gap const cardWidth = (containerWidth - (gap * (cardsPerViewCount - 1))) / cardsPerViewCount; cards.forEach(card => { card.style.width = `${cardWidth}px`; card.style.flexShrink = '0'; }); } // Initialize setCardWidths(); updateCarousel(); // Update on resize let resizeTimeout; window.addEventListener('resize', function() { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(function() { setCardWidths(); currentIndex = 0; updateCarousel(); }, 250); }); } </script> <script> // Header scroll effect window.addEventListener('scroll', function() { const header = document.getElementById('header'); if (window.scrollY > 50) { header.classList.add('header-scrolled'); } else { header.classList.remove('header-scrolled'); } }); // Scroll animations const observerOptions = { threshold: 0.1, rootMargin: '0px 0px -50px 0px' }; const observer = new IntersectionObserver(function(entries) { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('visible'); } }); }, observerOptions); // Observe all fade-in-up elements document.querySelectorAll('.fade-in-up').forEach(el => { observer.observe(el); }); // Smooth scroll for anchor links document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function (e) { e.preventDefault(); const target = document.querySelector(this.getAttribute('href')); if (target) { target.scrollIntoView({ behavior: 'smooth', block: 'start' }); } }); }); // Counter animation for stats function animateCounter(element, target, duration = 2000) { let start = 0; const increment = target / (duration / 16); const timer = setInterval(() => { start += increment; if (start >= target) { element.textContent = target + (element.textContent.includes('+') ? '+' : '') + (element.textContent.includes('K') ? 'K€' : ''); clearInterval(timer); } else { element.textContent = Math.floor(start) + (element.textContent.includes('+') ? '+' : '') + (element.textContent.includes('K') ? 'K€' : ''); } }, 16); } // Observe stats section const statsObserver = new IntersectionObserver(function(entries) { entries.forEach(entry => { if (entry.isIntersecting && !entry.target.classList.contains('animated')) { entry.target.classList.add('animated'); const statsCards = entry.target.querySelectorAll('.stats-card'); statsCards.forEach((card, index) => { setTimeout(() => { card.style.opacity = '0'; card.style.transform = 'translateY(20px)'; setTimeout(() => { card.style.transition = 'all 0.6s ease'; card.style.opacity = '1'; card.style.transform = 'translateY(0)'; }, 100); }, index * 100); }); } }); }, { threshold: 0.3 }); const statsSection = document.querySelector('section.bg-gradient-to-r'); if (statsSection) { statsObserver.observe(statsSection); } </script> <script> // Gestion du formulaire de contact const contactForm = document.getElementById('contact-form'); const formMessage = document.getElementById('form-message'); const submitBtn = document.getElementById('submit-btn'); if (contactForm) { contactForm.addEventListener('submit', async function(e) { e.preventDefault(); // Désactiver le bouton pendant l'envoi submitBtn.disabled = true; submitBtn.textContent = 'Envoi en cours...'; // Récupérer les données du formulaire const formData = new FormData(contactForm); try { // Vérifier que les données sont bien dans le FormData const formDataObj = { name: formData.get('name'), email: formData.get('email'), subject: formData.get('subject'), message: formData.get('message') }; console.log('Données du formulaire:', formDataObj); // Vérifier que tous les champs sont remplis if (!formDataObj.name || !formDataObj.email || !formDataObj.subject || !formDataObj.message) { formMessage.classList.remove('hidden'); formMessage.className = 'mb-6 p-4 rounded-lg bg-red-600 text-white'; formMessage.textContent = 'Veuillez remplir tous les champs du formulaire.'; submitBtn.disabled = false; submitBtn.textContent = 'Envoyer le message'; return; } // Essayer d'abord avec JSON (plus fiable) // Siça ne fonctionne pas, on essaiera avec FormData let response; try { // Méthode 1 : Envoyer en JSON (plus fiable selon les forums) response = await fetch('gestion-formulaire-contact/send-email-json.php', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(formDataObj) }); } catch (jsonError) { console.warn('Erreur avec JSON, essai avec FormData:', jsonError); // Méthode 2 : Fallback avec FormData response = await fetch('send-email.php', { method: 'POST', body: formData }); } // Lire le texte de la réponse d'abord pour déboguer const responseText = await response.text(); console.log('Réponse serveur:', responseText.substring(0, 500)); // Vérifier si la réponse est OK if (!response.ok) { // Essayer de parser le JSON d'erreur try { const errorResult = JSON.parse(responseText); // Afficher le message d'erreur du serveur directement à l'utilisateur formMessage.classList.remove('hidden'); formMessage.className = 'mb-6 p-4 rounded-lg bg-red-600 text-white'; formMessage.textContent = errorResult.message || `Erreur ${response.status}: ${response.statusText}`; submitBtn.disabled = false; submitBtn.textContent = 'Envoyer le message'; return; // Sortir de la fonction pour ne pas continuer } catch (e) { throw new Error(`Erreur HTTP ${response.status}: ${response.statusText}. Réponse: ${responseText.substring(0, 200)}`); } } // Vérifier si PHP n'est pas exécuté (le serveur renvoie le code PHP brut) if (responseText.trim().startsWith('<?php') || responseText.includes('<?php')) { console.error('ERREUR: PHP n\'est pas exécuté par le serveur. Le code PHP est renvoyé brut.'); console.error('Le serveur web n\'est pas configuré pour exécuter PHP.'); // Utiliser la solution de secours : sauvegarder dans localStorage const messageData = { name: formData.get('name'), email: formData.get('email'), subject: formData.get('subject'), message: formData.get('message'), timestamp: new Date().toISOString() }; // Sauvegarder dans localStorage comme solution de secours const savedMessages = JSON.parse(localStorage.getItem('vraivex_messages') || '[]'); savedMessages.push(messageData); localStorage.setItem('vraivex_messages', JSON.stringify(savedMessages)); // Afficher un message spécial formMessage.classList.remove('hidden'); formMessage.className = 'mb-6 p-4 rounded-lg bg-yellow-600 text-white'; formMessage.innerHTML = '⚠️ PHP n\'est pas configuré sur le serveur. Votre message aété sauvegardé localement. <br>Veuillez nous contacter directement à <strong>contact@vraivex.fr</strong> ou consulter les messages sauvegardés dans la console du navigateur.'; // Afficher les messages sauvegardés dans la console console.log('Messages sauvegardés localement:', savedMessages); console.log('Pour consulter les messages, tapez dans la console: JSON.parse(localStorage.getItem("vraivex_messages"))'); return; // Sortir de la fonction } // Essayer de parser le JSON let result; try { result = JSON.parse(responseText); } catch (parseError) { console.error('Erreur de parsing JSON:', parseError); console.error('Réponse reçue:', responseText.substring(0, 500)); throw new Error('Le serveur a renvoyé une réponse invalide. Vérifiez la console pour plus de détails.'); } // Afficher le message de résultat formMessage.classList.remove('hidden'); if (result.success) { formMessage.className = 'mb-6 p-4 rounded-lg bg-green-600 text-white'; formMessage.textContent = 'Message envoyé avec succès ! Nous vous répondrons dans les plus brefs délais.'; contactForm.reset(); } else { formMessage.className = 'mb-6 p-4 rounded-lg bg-red-600 text-white'; let errorMsg = result.message || 'Une erreur est survenue. Veuillez réessayer.'; // Afficher le message de debug en développement (à retirer en production) if (result.debug) { console.error('Erreur détaillée:', result.debug); } formMessage.textContent = errorMsg; } } catch (error) { formMessage.classList.remove('hidden'); formMessage.className = 'mb-6 p-4 rounded-lg bg-red-600 text-white'; // Message d'erreur plus détaillé pour le débogage let errorMsg = 'Une erreur est survenue lors de la communication avec le serveur. '; errorMsg += 'Veuillez réessayer plus tard ou nous contacter directement à contact@vraivex.fr'; // En mode développement, afficher plus de détails if (error.message) { console.error('Erreur détaillée:', error); console.error('Message:', error.message); console.error('Stack:', error.stack); } formMessage.textContent = errorMsg; } finally { // Réactiver le bouton submitBtn.disabled = false; submitBtn.textContent = 'Envoyer le message'; // Masquer le message après 5 secondes setTimeout(() => { formMessage.classList.add('hidden'); }, 5000); } }); } // Back to Top Button functionality const backToTopButton = document.getElementById('backToTop'); // Show/hide button based on scroll position window.addEventListener('scroll', () => { if (window.pageYOffset > 300) { backToTopButton.classList.remove('hidden'); } else { backToTopButton.classList.add('hidden'); } }); // Smooth scroll to top when clicked backToTopButton.addEventListener('click', () => { window.scrollTo({ top: 0, behavior: 'smooth' }); }); </script> </body> </html>