Publié le 18 février 2026 SEO Technique

Comment commencer à vendre sur Shopify : guide complet pour lancer une boutique rentable

Sommaire de l'article

Introduction

Démarrer une entreprise en ligne avec Shopify peut sembler intimidant au début, mais avec une bonne préparation et une méthode claire, la création d’une boutique en ligne professionnelle devient accessible à tous. Shopify est une plateforme e-commerce complète qui vous permet de créer, gérer et développer une boutique en ligne sans nécessiter de connaissances techniques avancées.

Dans ce guide détaillé, vous allez découvrirétape parétape comment commencer à vendre sur Shopify : de la création du compte à la configuration des moyens de paiement, en passant par le choix du thème, l’optimisation SEO, la gestion des produits et les bonnes pratiques pour générer vos premières ventes.

Qu’est-ce que Shopify et pourquoi l’utiliser pour vendre en ligne ?

Comprendre Shopify

Shopify est une plateforme d’e-commerce hébergée qui vous permet de créer rapidement une boutique en ligne, sans avoir à gérer vous-même l’hébergement, la sécurité ou les mises à jour techniques. Vous disposez d’une interface d’administration intuitive pour :

  • ajouter et organiser vos produits,
  • gérer vos stocks et vos commandes,
  • configurer vos moyens de paiement et de livraison,
  • personnaliser le design de votre site,
  • suivre vos performances via des rapports et statistiques.

Shopify propose un vasteécosystème d’applications pour enrichir votre boutique (email marketing, avis clients, upsell, automatisations, etc.) et s’intègre facilement à de nombreux canaux de vente : réseaux sociaux, Google, marketplaces, point de vente physique, etc.

Les principaux forfaits Shopify (aperçu tarifaire)

Les tarifs exacts de Shopify peuvent varier selon le pays, la devise et leséventuelles promotions en cours, mais la structure générale des plans reste similaire. Les forfaits principaux pour une boutique en ligne classique sont :

  • Basic : adapté pour démarrer et tester son activité en ligne, avec toutes les fonctionnalités essentielles pour vendre.
  • Shopify (intermédiaire) : conçu pour les boutiques en croissance qui ont besoin de rapports plus avancés et de frais de transaction réduits.
  • Advanced : destiné aux boutiques avec un volume de ventes plusélevé, qui ont besoin d’analyses poussées et d’outils avancés (calcul des droits et taxes, rapports personnalisés, etc.).

En complément, il existe des solutions spécifiques comme un plan de démarrage pour vendre via les réseaux sociaux et la messagerie, ainsi que Shopify Plus pour les grandes entreprises ou les sites à fort trafic.

Shopify facture l’abonnement de base de votre boutique, ainsi que des frais de transaction sur chaque vente en fonction du moyen de paiement utilisé. Lorsque vous utilisez Shopify Payments (la solution de paiement intégrée de Shopify, disponible dans de nombreux pays), les taux de commission sont généralement plus avantageux que lorsque vous utilisez exclusivement des prestataires tiers.

Essai gratuit et conditions de départ

Shopify propose régulièrement une période d’essai qui vous permet de tester la plateforme et de construire les bases de votre boutique avant de payer votre premier abonnement. La durée et le tarif promotionnel après l’essai peuventévoluer dans le temps ; au moment où vous créez votre boutique, vérifiez toujours les conditions exactes indiquées sur la page de tarification de Shopify.

Durant cette période d’essai, vous pouvez préparer votre catalogue, personnaliser le thème, configurer vos moyens de paiement et de livraison. Pour accepter des paiements réels et lever la protection par mot de passe de la boutique, vous devrez toutefois choisir un forfait payant.

Étapes pour commencer à vendre sur Shopify

1. Créer votre compte Shopify

La premièreétape consiste à créer un compte sur Shopify. Pour cela :

  • rendez-vous sur le site officiel de Shopify ;
  • indiquez votre adresse e-mail, un mot de passe et le nom de votre boutique ;
  • répondez aux quelques questions sur votre projet (type d’activité, expérience e-commerce, etc.).

Une fois cetteétape terminée, vous accédez à votre interface d’administration Shopify (le back-office), d’où vous pourrez configurer tous les paramètres de votre boutique.

2. Configurer les paramètres de base de la boutique

Avant de penser au design, commencez par paramétrer correctement les bases de votre site :

  • Informations générales : nom de la boutique, e-mail de contact, coordonnées, langue et devise par défaut.
  • Paramètres juridiques : pages de conditions générales, politique de confidentialité, politique de retour, mentions légales.
  • Paramètres fiscaux : configuration de la TVA en fonction de votre pays, de votre statut et des pays dans lesquels vous vendez.
  • Paramètres de livraison : choix des zones de livraison, des transporteurs, des tarifs (forfaitaire, calculé, gratuit à partir d’un certain montant, etc.).

Ceséléments sont essentiels pour vendre légalement et inspirer confiance à vos futurs clients.

3. Choisir et connecter votre nom de domaine

Pour donner une image professionnelle à votre boutique, il est recommandé d’utiliser un nom de domaine personnalisé (par exemple www.maboutique.fr) plutôt que le sous-domaine par défaut fourni par Shopify. Vous pouvez :

  • acheter un nom de domaine directement via Shopify ;
  • ou connecter un domaine que vous possédez déj à chez un autre registrar.

Un nom de domaine clair, mémorisable et en cohérence avec votre marque facilite le référencement naturel et renforce la crédibilité de votre commerce en ligne.

4. Choisir un thème Shopify adapté à votre marque

Le design de votre boutique joue un rôle majeur dans la conversion de vos visiteurs en clients. Shopify propose une galerie de thèmes, gratuits et payants, accessibles directement depuis votre interface d’administration.

Pour bien choisir votre thème :

  • assurez-vous qu’il soit responsive (adapté aux mobiles et tablettes) ;
  • vérifiez la compatibilité avec les fonctionnalités dont vous avez besoin (menu méga, filtres avancés, vidéos, etc.) ;
  • analysez la lisibilité des pages produit, du panier et du tunnel de commande ;
  • testez les démos pourévaluer l’expérience utilisateur.

Une fois le thème choisi, installez-le puis personnalisez-le grâce à l’éditeur visuel de Shopify : vous pouvez modifier les couleurs, la typographie, les sections de page, les bannières, les boutons, etc., sans savoir coder.

5. Travailler l’identité visuelle et la navigation

Pour renforcer votre image de marque et rassurer vos visiteurs, travaillez une identité visuelle cohérente :

  • logo professionnel et déclinaisons (version mobile, favicon),
  • palette de couleurs harmonieuse (2à 3 couleurs principales),
  • choix de polices lisibles et adaptées à votre positionnement,
  • prise en compte de l’accessibilité (contraste, taille de police, lisibilité sur mobile).

La structure de navigation est tout aussi importante : créez des menus clairs (menu principal, menu pied de page), des catégories logiques et des filtres utiles. L’objectif est que l’utilisateur trouve rapidement ce qu’il cherche en un minimum de clics.

6. Ajouter et organiser vos produits

La gestion efficace de vos produits est au cœur de votre réussite sur Shopify. Pour chaque fiche produit, soignez leséléments suivants :

  • Titre du produit : clair, descriptif et intégrant les principaux mots-clés recherchés (sansêtre sur-optimisé).
  • Description détaillée : expliquez les bénéfices, les caractéristiques techniques, les matériaux, l’usage, l’entretien… Pensez aux questions que se pose votre client avant d’acheter.
  • Images haute qualité : plusieurs visuels par produit (vue d’ensemble, zoom sur les détails, mises en situation). Utilisez des dimensions optimisées pouréviter de ralentir le site.
  • Variantes : tailles, couleurs, formats, parfums, etc., avec des stocks distincts si nécessaire.
  • Prix et taxes : prix de vente TTC ou HT selon votre configuration, gestion des promotions, affichage des comparaisons de prix si vous proposez des remises.
  • Organisation : associez chaque produit à une ou plusieurs collections (catégories) pour faciliter la navigation et le référencement interne.

Shopify permetégalement de vendre aussi bien des produits physiques (avec gestion des stocks et de l’expédition) que des produits numériques (fichiers téléchargeables) ou des services (coaching, formations, rendez-vous, etc.), avec les paramétrages adaptés.

7. Configurer les moyens de paiement

Proposer plusieurs options de paiement sécurisées est essentiel pour convertir les visiteurs en clients. Sur Shopify, vous pouvez :

  • activer Shopify Payments (l à où il est disponible) pour accepter les cartes bancaires majeures ;
  • ajouter des prestataires tiers comme PayPal, Stripe ou d’autres solutions locales ;
  • activeréventuellement les paiements en plusieurs fois via certains prestataires compatibles.

Les frais de transaction varient selon le forfait choisi, le type de carte (locale ou internationale) et le moyen de paiement. En règle générale, plus votre forfait estélevé, plus les frais Shopify Payments sont réduits. Lorsque vous utilisez un prestataire de paiement tiers sans Shopify Payments, des frais supplémentaires s’ajoutent côté Shopify en plus des commissions du prestataire.

Prenez le temps de comparer :

  • les pourcentages prélevés sur chaque transaction,
  • les frais fixes,
  • les frais en cas de rétrofacturation (chargeback),
  • les surcoûtséventuels liés aux paiements en devisesétrangères (frais de conversion).

8. Configurer la livraison et la logistique

La gestion de la livraison est un autre pilier de votre boutique Shopify. Vous devez définir :

  • les zones de livraison que vous couvrez (France, Union européenne, international, etc.) ;
  • les modes d’expédition (standard, express, retrait en point relais, retrait en magasin, etc.) ;
  • les transporteurs (La Poste, Colissimo, Chronopost, Mondial Relay, transporteurs privés, etc.) ;
  • les tarifs de livraison (forfait unique, selon le poids, selon le montant du panier, livraison gratuite à partir d’un certain seuil).

Shopify permet d’utiliser des applications spécialisées pour automatiser l’édition desétiquettes d’expédition, intégrer les points relais ou afficher des frais calculés en temps réel par certains transporteurs. Pensezégalement à définir une politique de retour claire et visible, ce qui rassure fortement les acheteurs en ligne.

9. Paramétrer les pages essentielles et les mentions légales

Avant de lancer votre boutique, assurez-vous que toutes les pages indispensables sont créées et accessibles dans votre menu :

  • page Accueil optimisée et orientée conversion,
  • page À propos présentant votre marque, vos valeurs, votre histoire,
  • page Contact (formulaire ou e-mail direct, liens vers les réseaux sociaux),
  • pages CGV et conditions d’utilisation,
  • page Politique de confidentialité (RGPD),
  • page Politique de retours et remboursements,
  • mentions légales (selon la réglementation de votre pays).

Ces pages participent à la fois à la conformité légale, à la confiance des utilisateurs et au référencement naturel de votre site.

10. Tester le parcours client avant le lancement

Avant d’ouvrir votre boutique au public, réalisez plusieurs tests complets en conditions réelles :

  • navigation sur mobile et ordinateur,
  • ajout de produits au panier,
  • passage de commande avec différents moyens de paiement,
  • réception des e-mails de confirmation de commande,
  • vérification de la gestion des stocks et des notifications.

Identifiez et corrigez leséventuels blocages, lenteurs ou points de friction. Demandez à quelques personnes extérieures de testerégalement le site pour obtenir un regard neuf sur l’expérience utilisateur.

Bonnes pratiques pour optimiser votre boutique Shopify

Optimiser le contenu pour le SEO

Pour attirer du trafic organique et durable, il est essentiel d’optimiser vos pages pour le référencement naturel (SEO). Sur Shopify, concentrez-vous en priorité sur :

  • les titres de pages (balises ) et <strong>les méta-descriptions</strong> : rédigez des titres clairs intégrant vos principaux mots-clés (“boutique de vêtementséthiques”, “cosmétiques naturels made in France”, etc.) et des descriptions incitatives au clic ;</li> <li><strong>les URL</strong> : utilisez des adresses courtes et descriptives (par exemple <em>/collections/robes-lin</em> plutôt que <em>/collection123</em>) ;</li> <li><strong>les balises d’en-tête</strong> (<h1>, <h2 id="structurez-chaque-page-autour-d-un-seul-titre-principal-et-de-sous-titres-logiques-nbsp-le-contenu-d">, <h3>) : structurez chaque page autour d’un seul titre principal et de sous-titres logiques ;</li> <li><strong>le contenu des descriptions produits</strong> : intégrez naturellement vos mots-clés dans le texte, sans sur-optimisation ni répétition artificielle ;</li> <li><strong>les attributs ALT des images</strong> : décrivez brièvement les visuels pour améliorer l’accessibilité et le référencement dans Google Images.</li> </ul> <p>Créezégalement une <strong>stratégieéditoriale</strong> via un blog intégré à Shopify pour publier régulièrement des articles qui répondent aux questions de vos clients (guides d’achat, tutoriels, comparatifs, inspirations, etc.). Ces contenus renforcent votre positionnement sur vos thématiques et attirent un trafic qualifié.</p> <h3>Améliorer la structure et l’expérience utilisateur</h3> <p>Une structure claire et une navigation intuitive sont indispensables pour offrir une bonne expérience utilisateur et maximiser le taux de conversion. Sur Shopify, veillez à :</p> <ul> <li>limiter le nombre de niveaux de menu pouréviter les labyrinthes de navigation,</li> <li>afficher un <strong>menu principal</strong> cohérent (par exemple : Nouveautés, Collections, Meilleures ventes, À propos, Contact),</li> <li>mettre en place des <strong>filtres</strong> pertinents sur vos pages catégories (taille, couleur, prix, type de produit),</li> <li>proposer un <strong>moteur de recherche interne</strong> efficace pour les catalogues volumineux,</li> <li>afficher clairement les informations clés sur les fiches produits (prix, disponibilité, livraison, délais, retours).</li> </ul> <p>Soignezégalement leséléments de réassurance : avis clients, labels, certifications, moyens de paiement sécurisés, informations sur les délais de livraison et les retours.</p> <h3 id="creer-du-contenu-de-qualite-pour-engager-votre-audience">Créer du contenu de qualité pour engager votre audience</h3> <p>Publier régulièrement du contenu utile, pertinent et engageant est une excellente stratégie pour fidéliser votre audience et renforcer votre image de marque. Quelques idées de contenus pour votre boutique Shopify :</p> <ul> <li>tutoriels d’utilisation de vos produits,</li> <li>guides d’entretien,</li> <li>idées de looks, recettes, inspirations, selon votre secteur,</li> <li>portraits de clients ou de membres de l’équipe,</li> <li>articles sur vos engagements (écoresponsabilité, fabrication locale, circuit court, etc.).</li> </ul> <p>Vous pouvez publier ces contenus sur le blog intégré à Shopify, puis les relayer sur vos réseaux sociaux et dans vos campagnes d’e-mail marketing.</p> <h3 id="suivre-les-performances-et-optimiser-en-continu">Suivre les performances et optimiser en continu</h3> <p>Une fois votre boutique lancée, l’optimisation ne s’arrête pas. Utilisez les outils d’analyse pour suivre vos indicateurs clés :</p> <ul> <li><strong>Google Analytics</strong> (ou GA4) : pour analyser le trafic, le comportement des utilisateurs, les sources d’acquisition, les taux de conversion, etc.</li> <li><strong>Google Search Console</strong> : pour surveiller votre visibilité dans les résultats de recherche, les requêtes qui génèrent des impressions et clics, et détecter les erreurs techniques.</li> <li><strong>Rapports Shopify</strong> : pour analyser les ventes par produit, par canal, par période, le panier moyen, la récurrence d’achat, etc.</li> </ul> <p>Sur la base de ces données, améliorez en continu :</p> <ul> <li>vos pages les plus visitées mais peu convertissantes,</li> <li>vos fiches produits avec un faible taux de clic ou de conversion,</li> <li>vos campagnes publicitaires,</li> <li>vos séquences d’e-mails et vos relances panier abandonné.</li> </ul> <h2 id="outils-et-ressources-utiles-pour-reussir-sur-shopify">Outils et ressources utiles pour réussir sur Shopify</h2> <ul> <li><strong>Google Search Console</strong> : pour surveiller et améliorer votre visibilité dans les résultats de recherche, identifier les requêtes sur lesquelles vous apparaissez et corriger leséventuelles erreurs d’indexation.</li> <li><strong>Google Analytics</strong> : pour analyser le trafic, le comportement des utilisateurs, les conversions et le chiffre d’affaires généré par vos différentes sources d’acquisition.</li> <li><strong>Applications Shopify</strong> : la marketplace d’applications de Shopify propose des milliers d’extensions. Par exemple : <ul> <li>des applications pour trouver des produits à vendre en dropshipping,</li> <li>des outils d’e-mail marketing comme Klaviyo,</li> <li>des applications pour les avis clients, les programmes de fidélité, l’upsell ou le cross-sell,</li> <li>des connecteurs vers des places de marché ou des réseaux sociaux.</li> </ul> </li> </ul> <p>Choisissez vos applications avec parcimonie : chaque extension peut ajouter des fonctionnalités utiles, mais aussi un coût supplémentaire et un impact sur les performances du site. Installez uniquement ce qui est réellement nécessaire au développement de votre activité.</p> <h2 id="faq-questions-frequentes-sur-la-vente-avec-shopify">FAQ – Questions fréquentes sur la vente avec Shopify</h2> <dl> <dt><strong>Puis-je essayer Shopify gratuitement ?</strong></dt> <dd>Oui, Shopify propose une période d’essai qui vous permet de tester la plateforme avant de choisir un forfait payant. Les modalités exactes (durée de l’essai, éventuels tarifs promotionnels de départ) peuventévoluer dans le temps ; consultez la page de tarification lors de votre inscription pour connaître l’offre en cours.</dd> <dt><strong>Combien coûte un compte Shopify ?</strong></dt> <dd>Le coût d’un compte Shopify dépend du forfait que vous choisissez et du mode de paiement (mensuel ou annuel). Les principaux plans destinés aux boutiques en ligne classiques sont généralement organisés autour d’un forfait d’entrée de gamme pour démarrer, d’un forfait intermédiaire pour les boutiques en croissance et d’un forfait avancé pour les volumes de vente plusélevés. À ces frais d’abonnement peuvent s’ajouter des commissions sur les paiements, des frais de conversion de devise, des coûts d’applications et la TVA. Les tarifs indiqués par Shopify peuventêtre exprimés hors taxes ; la TVA est alors ajoutée sur vos factures mensuelles selon le pays dans lequel vousêtesétabli. Pour obtenir les prix exacts et à jour dans votre devise, référez-vous à la page officielle de tarification de Shopify et vérifiez si des promotions sont en cours.</dd> <dt><strong>Comment puis-je promouvoir ma boutique Shopify ?</strong></dt> <dd>Pour promouvoir efficacement votre boutique Shopify, combinez plusieurs leviers d’acquisition : travaillez votre référencement naturel (SEO), créez une présence active sur les réseaux sociaux, mettez en place des campagnes publicitaires ciblées (Meta Ads, Google Ads, TikTok Ads, etc.), développez l’e-mail marketing (newsletters, relances panier abandonné, campagnes automatisées) et collaborez avec des partenaires, influenceurs ou affiliés. L’objectif est de générer un trafic qualifié et de bâtir une audience fidèle autour de votre marque.</dd> <dt><strong>Est-ce difficile de personnaliser un thème sur Shopify ?</strong></dt> <dd>Non, la personnalisation d’un thème Shopify est conçue pourêtre accessible même sans compétences techniques avancées. L’éditeur visuel vous permet de modifier les sections, les couleurs, les polices, les images et la disposition deséléments par simple glisser-déposer. Pour les utilisateurs plus avancés, il est possible de modifier le code (HTML, CSS, Liquid) ou de faire appel à un développeur ou une agence spécialisée afin de créer une expérience sur-mesure.</dd> <dt><strong>Puis-je vendre des produits physiques et numériques sur Shopify ?</strong></dt> <dd>Oui, Shopify permet de vendre des produits physiques (avec gestion du stock et de l’expédition), des produits numériques (fichiers téléchargeables, contenus à accès restreint) ainsi que des services (consulting, formations, réservations, ateliers, etc.). Selon le type de produit ou de service, il peutêtre utile d’ajouter une application dédiée pour gérer les téléchargements sécurisés, les réservations de créneaux ou les accès membres.</dd> <dt><strong>Ai-je besoin de compétences techniques pour lancer ma boutique ?</strong></dt> <dd>Vous n’avez pas besoin de savoir coder pour lancer une boutique sur Shopify. La plupart des paramétrages se font via des interfaces visuelles et des formulaires simples. Toutefois, des connaissances de base en marketing digital, en rédaction web et en gestion d’entreprise seront un atout important pour développer votre activité. Si nécessaire, vous pouvez vous faire accompagner par un freelance ou une agence spécialisée Shopify pour les aspects plus techniques ou stratégiques.</dd> <dt><strong>Comment gérer la TVA et la facturation sur Shopify ?</strong></dt> <dd>Shopify vous permet de configurer des règles de TVA en fonction de votre pays et des zones dans lesquelles vous vendez. Vous pouvez paramétrer les taux applicables, choisir si les prix affichés sont TTC ou HT, et générer des rapports de taxes. Pour les factures clients, vous pouvez utiliser des modèles intégrés ou des applications spécialisées qui génèrent des factures conformes à la réglementation de votre pays. En cas de doute, il est fortement recommandé de consulter un expert-comptable ou un conseiller fiscal pour vérifier la conformité de votre configuration.</dd> <dt><strong>Combien de temps faut-il pour lancer une boutique Shopify ?</strong></dt> <dd>La durée de lancement dépend de la complexité de votre projet, du nombre de produits et de votre niveau de préparation. Une boutique simple avec un catalogue limité et un thème standard peutêtre mise en ligne en quelques jours si vous disposez déj à de vos visuels, descriptions et contenus. Pour un projet plus ambitieux (branding poussé, catalogue large, intégrations spécifiques, contenuséditoriaux avancés), il est plus réaliste de prévoir plusieurs semaines de travail.</dd> </dl> <h2 id="conclusion">Conclusion</h2> <p>Commencer à vendre sur Shopify est une excellente décision pour toute personne ou entreprise souhaitant se lancer sérieusement dans le commerce en ligne. La plateforme offre une infrastructure fiable, des outils puissants et une grande flexibilité, que vous soyez en phase de test, en pleine croissance ou déj à bienétabli sur votre marché.</p> <p>En suivant lesétapes décrites dans ce guide — création du compte, choix du thème, configuration des paiements et de la livraison, structuration de vos collections, optimisation du contenu pour le SEO, mise en place d’outils d’analyse et de marketing — vous placez votre boutique dans les meilleures conditions pour attirer des visiteurs qualifiés et générer vos premières ventes.</p> <p>N’attendez plus pour passer à l’action : définissez votre offre, préparez vos visuels, créez votre boutique Shopify et commencez à bâtir une marque forte et durable dans l’univers du 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-vendre-avec-shopify-guide-complet-pour-lancer-et-developper-votre-boutique-en-ligne/" 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 vendre avec Shopify : guide complet pour lancer et développer votre boutique en ligne</span> </a> <a href="/blog/comment-se-lancer-sur-shopify-guide-complet-pour-creer-une-boutique-en-ligne-rentable/" 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 se lancer sur Shopify : guide complet pour créer une boutique en ligne rentable</span> </a> <a href="/blog/comment-creer-une-boutique-shopify-rentable-en-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 créer une boutique Shopify rentable en 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-commencer-a-vendre-sur-shopify-guide-complet-pour-lancer-une-boutique-rentable"> <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-commencer-a-vendre-sur-shopify-guide-complet-pour-lancer-une-boutique-rentable'; // 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="/#realisations" class="hover:text-white transition text-sm">Réalisations</a> <a href="/#brands" class="hover:text-white transition text-sm">Nos Sites</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">© 2026 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 gap = 24; const cardsPerView = { mobile: 1, tablet: 2, desktop: 3, large: 4 }; function getCardsPerView() { const w = window.innerWidth; if (w >= 1280) return cardsPerView.large; if (w >= 1024) return cardsPerView.desktop; if (w >= 768) return cardsPerView.tablet; return cardsPerView.mobile; } function getCardWidth() { const cpv = getCardsPerView(); const cw = brandsCarousel.offsetWidth; return (cw - gap * (cpv - 1)) / cpv; } function updateCarousel() { const cpv = getCardsPerView(); const cardW = getCardWidth(); const maxIdx = Math.max(0, cards.length - cpv); currentIndex = Math.min(currentIndex, maxIdx); const offset = currentIndex * (cardW + gap); brandsContainer.style.transform = `translateX(-${offset}px)`; const atStart = currentIndex === 0; const atEnd = currentIndex >= maxIdx; [brandsPrevBtn, brandsPrevBtnMobile].forEach(function(btn) { if (btn) { btn.style.opacity = atStart ? '0.4' : '1'; btn.style.pointerEvents = atStart ? 'none' : 'auto'; } }); [brandsNextBtn, brandsNextBtnMobile].forEach(function(btn) { if (btn) { btn.style.opacity = atEnd ? '0.4' : '1'; btn.style.pointerEvents = atEnd ? 'none' : 'auto'; } }); if (document.getElementById('brandsCounter')) { document.getElementById('brandsCounter').textContent = (currentIndex + 1) + ' / ' + (maxIdx + 1); } } function nextSlide() { const cpv = getCardsPerView(); const maxIdx = Math.max(0, cards.length - cpv); if (currentIndex < maxIdx) { currentIndex++; updateCarousel(); } } function prevSlide() { if (currentIndex > 0) { currentIndex--; updateCarousel(); } } if (brandsNextBtn) brandsNextBtn.addEventListener('click', nextSlide); if (brandsPrevBtn) brandsPrevBtn.addEventListener('click', prevSlide); if (brandsNextBtnMobile) brandsNextBtnMobile.addEventListener('click', nextSlide); if (brandsPrevBtnMobile) brandsPrevBtnMobile.addEventListener('click', prevSlide); function setCardWidths() { const cardW = getCardWidth(); cards.forEach(function(card) { card.style.width = cardW + 'px'; card.style.minWidth = cardW + 'px'; card.style.flexShrink = '0'; }); } let touchStartX = 0; let touchEndX = 0; brandsCarousel.addEventListener('touchstart', function(e) { touchStartX = e.changedTouches[0].screenX; }, { passive: true }); brandsCarousel.addEventListener('touchend', function(e) { touchEndX = e.changedTouches[0].screenX; const diff = touchStartX - touchEndX; if (Math.abs(diff) > 50) { diff > 0 ? nextSlide() : prevSlide(); } }, { passive: true }); setCardWidths(); updateCarousel(); 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>