Publié le 5 février 2026 SEO Technique

On Running Shopify : Guide complet pour créer et optimiser une boutique de running sur Shopify

Sommaire de l'article

Introduction

L’univers du commerceélectroniqueévolue à une vitesse impressionnante, et les boutiques en ligne spécialisées dans le running profitent pleinement de cette dynamique. Grâce à Shopify, l’une des plateformes de e-commerce les plus utilisées au monde, créer, lancer et développer un magasin en ligne de chaussures et vêtements de running n’a jamaisété aussi accessible. Que vous soyez revendeur d’une marque comme On Running, boutique multimarques spécialisée, ou créateur de votre propre label, Shopify offre l’infrastructure idéale pour vendre vos produits de course à pied en France et à l’international.

Cependant, ouvrir une boutique ne suffit pas. Pour que votre boutique Shopify running se démarque dans les résultats de recherche et génère un trafic régulier, il est indispensable de maîtriser les fondamentaux du SEO (Search Engine Optimization) adaptés au secteur du sport et plus particulièrement au running : baskets de course, chaussures de trail, vêtements techniques, accessoires, nutrition sportive, etc.

Cet article vous guide pas à pas à travers :

  • les concepts clés du SEO appliqués à une boutique Shopify dédiée au running ;
  • les bonnes pratiques on-page et techniques pour améliorer votre visibilité ;
  • les stratégies de contenu pour attirer des coureurs débutants comme confirmés ;
  • les leviers spécifiques de Shopify (thèmes, applications, données) à exploiter pour un shop de running performant.

L’objectif est de vous donner une vision concrète et actionnable pour créer une boutique Shopify orientée running qui génère du trafic qualifié, des ventes récurrentes et une véritable communauté de passionnés.

Concepts clés du SEO pour une boutique Shopify spécialisée dans le running

Avant d’entrer dans la mise en œuvre, il est essentiel de maîtriser quelques notions fondamentales du référencement naturel appliquées à un site e-commerce de running sur Shopify.

1. Le rôle central du contenu de qualité

Un contenu de qualité est l’un des piliers d’un SEO réussi pour n’importe quel site, mais il devient encore plus stratégique dans un univers concurrentiel comme celui deséquipements de running. Sur une boutique Shopify orientée course à pied, ce contenu se décline en plusieurs formats :

  • descriptions détaillées et utiles de vos produits (chaussures, vêtements, accessoires) ;
  • guides d’achat pour choisir ses chaussures de running selon son profil (pronateur, supinateur, universel, débutant, compétiteur, trail, route, etc.) ;
  • articles de blogéducatifs sur l’entraînement, la préparation de courses, la prévention des blessures ou le choix du textile technique ;
  • fiches conseils sur l’entretien des chaussures et des vêtements de sport ;
  • contenus inspirants (portraits de coureurs, récits de courses, analyses de tendances running).

Une fiche produit de chaussures de running efficace ne se limite pas à quelques lignes. Elle doit comporter deséléments concrets :

  • type d’usage (route, trail, piste, randonnée rapide, triathlon) ;
  • type de foulée (universelle, pronatrice, supinatrice) ;
  • niveau d’amorti, stabilité, dynamisme ;
  • technologies de la semelle intermédiaire et de la semelle extérieure ;
  • poids de la chaussure, drop, hauteur de semelle ;
  • matériaux utilisés (mesh respirant, renforts, insert carbone, etc.) ;
  • conditions idéales d’utilisation (entraînement quotidien, compétition, longues distances, vitesse).

Sur Shopify, ce travailéditorial renforce non seulement votre référencement sur des requêtes comme « chaussures de running pour marathon » ou « baskets de trail légères », mais il rassure aussi les visiteurs et améliore le taux de conversion.

2. L’importance stratégique des mots-clés pour le running

Les mots-clés sont le lien direct entre les recherches des internautes et les pages de votre boutique Shopify. Pour une boutique spécialisée dans le running, vous ne devez pas vous contenter de termes génériques ; vous devez viser unéventail de requêtes couvrant :

  • les intentions d’achat directes, par exemple : « acheter chaussures running en ligne », « boutique running Shopify », « magasin de chaussures de course à pied » ;
  • les recherches de comparaison : « meilleures chaussures running amorti », « baskets running pour débutant », « chaussures de trail légères femme » ;
  • les recherches informationnelles : « comment choisir ses chaussures de running », « quelle pointure pour le running », « combien de temps garder ses chaussures de course » ;
  • les requêtes de marque + type de produit, par exemple : « On Running Cloudsurfer homme », « On Running route femme », « chaussures On Running pour marathon » si vousêtes revendeur officiel.

Vous pouvez identifier ces mots-clés à l’aide d’outils de recherche de mots-clés, mais aussi en observant :

  • les suggestions automatiques sur les moteurs de recherche ;
  • les questions fréquentes sur les forums de running et les groupes de coureurs ;
  • les requêtes internes sur votre propre moteur de recherche Shopify une fois la boutique ouverte.

Une fois ces mots-clés identifiés, intégrez-les naturellement dans vos titres de pages, descriptions produits, textes de catégories, balises alt des images, et contenus de blog liés au running.

3. L’optimisation on-page sur Shopify

L’optimisation sur page (on-page SEO) regroupe toutes les actions menées directement sur votre boutique Shopify pour améliorer la compréhension de vos contenus par les moteurs de recherche. Pour un magasin Shopify de running, cela inclut notamment :

  • l’optimisation des titres de pages (balises ) avec des expressions comme « boutique running en ligne », « chaussures de running pour homme et femme », combinées à votre nom de marque ;</li> <li>la rédaction de meta descriptions attractives qui mettent en avant vos avantages (livraison rapide, large choix de chaussures de running, conseils d’experts) ;</li> <li>l’utilisation d’URLs courtes, lisibles et descriptives, par exemple : <em>/chaussures-running-route-homme</em> plutôt que <em>/product-1234</em> ;</li> <li>l’intégration d’images optimisées (poids réduit, format adapté) avec des attributs alt décrivant précisément le produit : « chaussures de running route homme On Running coloris noir » ;</li> <li>la mise en place d’une structure de titres hiérarchisée (H1, H2, H3) cohérente dans vos pages de contenu et vos fiches produits ;</li> <li>une structure de site claire, avec des catégories et sous-catégories pensées pour les coureurs : route, trail, compétition, débutant, accessoires, etc.</li> </ul> <p>Sur Shopify, de nombreux thèmes sont déj à optimisés pour le SEO de base, mais il reste toujours indispensable de personnaliser les textes, les balises et la structure en fonction de votre positionnement dans le running.</p> <h3 id="4-l-importance-du-trafic-qualifie-pour-une-boutique-de-running">4. L’importance du trafic qualifié pour une boutique de running</h3> <p>Augmenter le nombre de visiteurs n’a d’intérêt que si ces visiteurs sont réellement intéressés par le running et les produits que vous vendez. Le trafic qualifié désigne des internautes :</p> <ul> <li>qui pratiquent ou souhaitent se mettre au running ;</li> <li>qui recherchent activement des chaussures, vêtements ou accessoires de course ;</li> <li>qui sont prêts à comparer, ajouter au panier et finaliser un achat.</li> </ul> <p>Pour attirer ce public précis, vous devez :</p> <ul> <li>adapter vos contenus aux différents niveaux (débutants, intermédiaires, confirmés, trailers, coureurs sur route) ;</li> <li>répondre à des problématiques concrètes : douleur aux genoux, besoin d’amorti, préparation d’un premier 10 km, d’un semi-marathon ou d’un marathon ;</li> <li>travailler votre présence sur les requêtes locales si vous avez aussi une boutique physique (ex. « magasin running Paris », « boutique running Lyon ») et connecter votre point de vente via Shopify POS ;</li> <li>proposer une expérience utilisateur fluide, rassurante et rapide, du premier clic jusqu’au paiement.</li> </ul> <p>La qualité de ce trafic se traduit directement dans vos statistiques Shopify : taux de conversion, panier moyen, récurrence d’achat, utilisation de moyens de paiement fluides comme Shop Pay, etc.</p> <h2 id="bonnes-pratiques-pour-optimiser-une-boutique-shopify-dediee-au-running">Bonnes pratiques pour optimiser une boutique Shopify dédiée au running</h2> <p>Une fois les bases posées, il est temps de passer aux bonnes pratiques concrètes pour optimiser votre <strong>boutique Shopify de running</strong>.</p> <h3 id="1-optimiser-en-profondeur-vos-descriptions-de-produits">1. Optimiser en profondeur vos descriptions de produits</h3> <p>Les descriptifs produits sont souvent négligés, alors qu’ils jouent un rôle clé à la fois pour le référencement et pour convaincre le coureur d’acheter. Une bonne description de chaussures de running sur Shopify devrait :</p> <ul> <li>décrire précisément le type de course pour lequel la chaussure aété conçue (entraînement quotidien, compétition, fractionné, trail technique) ;</li> <li>mettre en avant les bénéfices concrets pour le coureur : confort, amorti, relance, légèreté, accroche, protection ;</li> <li>indiquer les caractéristiques techniques importantes : drop, poids, type de mousse, construction de la tige, technologies de la semelle ;</li> <li>préciser le niveau du coureur ciblé (débutant, confirmé, compétiteur) ;</li> <li>intégrer naturellement des mots-clés comme « chaussures de running route homme », « baskets de course légères femme », sans sur-optimisation ;</li> <li>inclure, si possible, des témoignages clients et des avis notés qui rassurent sur la qualité du produit.</li> </ul> <p>Pour les vêtements techniques de running (t-shirts respirants, shorts, collants, vestes coupe-vent, brassières), mettez l’accent sur :</p> <ul> <li>les matériaux (fibres techniques, respirabilité, séchage rapide) ;</li> <li>la saisonnalité (été, hiver, mi-saison, pluie, vent) ;</li> <li>les détails pratiques : poches, éléments réfléchissants, coupe, confort sur longue distance.</li> </ul> <h3 id="2-ameliorer-la-structure-de-votre-site-shopify-running">2. Améliorer la structure de votre site Shopify running</h3> <p>Une structure de site claire facilite la navigation des utilisateurs et aide les moteurs de recherche à comprendre l’organisation de votre offre. Sur une boutique Shopify dédiée au running, pensez à organiser vos collections et menus de manière logique. Par exemple :</p> <ul> <li>catégories principales : « Chaussures de running », « Vêtements de running », « Accessoires », « Trail », « Nouveautés », « Promotions » ;</li> <li>sous-catégories : par type (route, trail, piste), par sexe (homme, femme, unisexe), par niveau (débutant, confirmé), ou par usage (entraînement, compétition, longue distance) ;</li> <li>filtres : pointure, couleur, type de foulée, drop, marque, niveau d’amorti.</li> </ul> <p>Quelques bonnes pratiques supplémentaires pour la structure :</p> <ul> <li>utiliser des URLs courtes et descriptives, en français correct et sans caractère spécial ;</li> <li>intégrer un menu de navigation intuitif, avec un accès rapide aux catégories phares (chaussures de route, chaussures de trail, vêtements homme, vêtements femme) ;</li> <li>créer une page d’accueil qui met clairement en avant les univers clés de votre boutique de running ;</li> <li>optimiser la vitesse de chargement des pages en compressant les images et en choisissant un thème Shopify rapide et responsive ;</li> <li>veiller à la parfaite adaptation mobile, car une grande partie des achats de running en ligne se fait sur smartphone.</li> </ul> <h3 id="3-creer-du-contenu-editorial-de-qualite-autour-du-running">3. Créer du contenuéditorial de qualité autour du running</h3> <p>Au-del à des descriptions de produits, un <strong>blog running sur Shopify</strong> est un excellent levier pour attirer des visiteurs via des requêtes informationnelles et renforcer votre expertise. Vous pouvez y publier régulièrement :</p> <ul> <li>des guides complets : « comment choisir ses chaussures de running pour débuter », « bien se préparer à un premier semi-marathon », « quelles chaussures pour un marathon » ;</li> <li>des articles techniques : « comprendre le drop d’une chaussure de running », « chaussures maximalistes vs minimalistes », « comment alterner ses paires pouréviter les blessures » ;</li> <li>des conseils d’entraînement : plans pour 5 km, 10 km, semi-marathon, marathon, trail ;</li> <li>des contenus inspirants : interviews de coureurs, retours d’expérience sur des courses emblématiques ;</li> <li>des focus produits : zoom sur une nouvelle chaussure de route, comparatif de modèles pour un usage précis.</li> </ul> <p>Chaque article peutêtre relié à vos collections ou à des fiches produits, ce qui crée un maillage interne cohérent et renforce la visibilité globale de votre boutique Shopify sur les sujets liés au running.</p> <h3 id="4-travailler-la-credibilite-et-la-confiance">4. Travailler la crédibilité et la confiance</h3> <p>Le running est un univers dans lequel les coureurs accordent beaucoup d’importance aux avis d’autres pratiquants et à la crédibilité de la boutique. Pour rassurer vos visiteurs sur Shopify, pensez à :</p> <ul> <li>afficher clairement vos conditions de livraison, de retour et d’échange ;</li> <li>mettre en avant les avis clients sur les produits et sur la boutique (notes, commentaires, photos d’utilisation réelle) ;</li> <li>présenter votre expertise running (expérience, équipe, partenaires, implication dans desévénements de course) ;</li> <li>proposer des tailles et des guides d’ajustement précis pour limiter les retours ;</li> <li>rassurer sur la sécurité du paiement, notamment via l’utilisation de solutions reconnues comme Shop Pay, cartes bancaires, portefeuilles numériques.</li> </ul> <p>Plus votre boutique inspire confiance, plus vos visiteurs seront enclins à finaliser leur commande et à revenir pour de futurs achats, ce qui améliore indirectement vos signaux SEO (taux de rebond, temps passé, récurrence).</p> <h2 id="exploiter-pleinement-shopify-pour-une-boutique-de-running-performante">Exploiter pleinement Shopify pour une boutique de running performante</h2> <p>Shopify n’est pas seulement une plateforme pour mettre des produits en ligne. C’est unécosystème complet qui permet de gérer votre activité, d’optimiser votre marketing et de suivre vos performances. Pour une boutique de running, certains aspects sont particulièrement utiles.</p> <h3 id="1-choisir-un-theme-adapte-a-l-univers-du-sport-et-du-running">1. Choisir un thème adapté à l’univers du sport et du running</h3> <p>Le choix du thème est déterminant pour l’expérience utilisateur et pour la mise en valeur de vos produits de course à pied. Un bon thème Shopify pour une boutique de running doitêtre :</p> <ul> <li>rapide et léger pour ne pas pénaliser le temps de chargement ;</li> <li>parfaitement responsive pour offrir une expérience optimale sur mobile ;</li> <li>visuellement adapté aux univers sportifs (mise en avant des visuels dynamiques, grandes photos, espaces pour les contenuséditoriaux) ;</li> <li>facile à personnaliser (couleurs, typographies, mise en page des fiches produits, carrousels de produits, etc.) ;</li> <li>compatible avec les applications essentielles (avis clients, recommandations de produits, filtres avancés).</li> </ul> <p>Un design clair, avec des catégories bien visibles et des call-to-action explicites (« Découvrir les chaussures de route », « Voir les nouveautés trail »), guide naturellement le coureur vers les produits les plus adaptés.</p> <h3 id="2-utiliser-les-applications-shopify-utiles-pour-le-running">2. Utiliser les applications Shopify utiles pour le running</h3> <p>L’App Store de Shopify propose une multitude d’applications permettant d’améliorer les fonctionnalités et le marketing de votre boutique de running. Vous pouvez notamment :</p> <ul> <li>ajouter un système d’avis et de notation produits pour mettre en avant l’expérience des coureurs ;</li> <li>mettre en place des recommandations de produits intelligentes (produits similaires, ventes croisées, packs pour débuter le running) ;</li> <li>proposer un programme de fidélité ou de points pour récompenser les coureurs réguliers ;</li> <li>utiliser des applications d’email marketing pour relancer les paniers abandonnés et envoyer des newsletters thématiques (nouveaux modèles de chaussures, conseils préparation de course) ;</li> <li>activer des outils d’analyse pour mieux suivre le comportement des visiteurs et optimiser vos pages les plus stratégiques.</li> </ul> <h3 id="3-exploiter-les-donnees-pour-piloter-et-optimiser-votre-boutique">3. Exploiter les données pour piloter et optimiser votre boutique</h3> <p>Shopify fournit des tableaux de bord et des rapports détaillés sur les ventes, les produits les plus consultés, les sources de trafic et le comportement des acheteurs. Pour une boutique de running, ces données peuvent révéler :</p> <ul> <li>quels types de chaussures se vendent le mieux (route, trail, compétition) ;</li> <li>les tailles et pointures les plus demandées, par sexe et par segment ;</li> <li>quelles pages de contenu ou articles de blog génèrent le plus de conversions ;</li> <li>quels canaux marketing (réseaux sociaux, recherche organique, campagnes payantes) apportent le trafic le plus qualifié.</li> </ul> <p>En analysant régulièrement ces informations, vous pourrez ajuster vos stocks, vos mises en avant produits, vos campagnes marketing et vos contenus SEO afin de maximiser vos performances.</p> <h2 id="strategies-de-contenu-avancees-pour-un-shopify-running-durablement-visible">Stratégies de contenu avancées pour un Shopify running durablement visible</h2> <p>Pour que votre boutique Shopify de running gagne en visibilité sur le long terme, la création de contenu doit s’inscrire dans une stratégie cohérente, alignée avec les besoins de vos clients et les saisons fortes du running.</p> <h3 id="1-calendrier-editorial-oriente-running">1. Calendrieréditorial orienté running</h3> <p>Le running suit des saisons relativement prévisibles : préparation du printemps, des grandes courses de l’automne, période hivernale, trails estivaux. Vous pouvez structurer votre calendrieréditorial en fonction :</p> <ul> <li>des grandes courses (marathons, semi-marathons, 10 km, trails, ultras) et proposer des contenus dédiés (guides de préparation, sélections de produits adaptés) ;</li> <li>des périodes de soldes ou de promotions pour renouveler sonéquipement de running ;</li> <li>des besoins récurrents des coureurs : chaussures pour la reprise, équipement pour courir l’hiver, vêtements pour courir sous la pluie, etc.</li> </ul> <p>Chaque contenu créé (article, guide, vidéo intégrée à une page, fiche conseil) peut intégrer des liens vers vos produits Shopify, renforçant à la fois l’intérêt pour le coureur et la conversion.</p> <h3 id="2-maillage-interne-entre-blog-et-produits">2. Maillage interne entre blog et produits</h3> <p>Le maillage interne consiste à relier entre elles les pages de votre site de façon structurée. Sur une boutique Shopify running :</p> <ul> <li>les articles du blog renvoient vers des catégories ou des fiches produits correspondantes ;</li> <li>les fiches produits peuvent renvoyer vers des articles expliquant comment bien utiliser ou choisir ce type de produit ;</li> <li>les pages de catégories intègrent des encadréséditoriaux avec des liens vers des guides complets.</li> </ul> <p>Ce maillage interne améliore la compréhension globale de votre site par les moteurs de recherche, tout en aidant le coureur à progresser naturellement dans son parcours : de l’information à la sélection, puis à l’achat.</p> <h3 id="3-contenu-oriente-communaute-de-coureurs">3. Contenu orienté communauté de coureurs</h3> <p>Les coureurs recherchent souvent plus qu’un simple produit ; ils apprécient les boutiques qui partagent leur passion. Vous pouvez renforcer la dimension communautaire de votre boutique Shopify en :</p> <ul> <li>mettant en avant des témoignages de clients et leurs objectifs (premier 5 km, premier marathon, premier trail) ;</li> <li>partageant des comptes rendus d’événements (courses, événements locaux, sorties collectives) ;</li> <li>proposant un espace de conseils et d’échanges via votre blog, votre newsletter ou vos réseaux sociaux connectés à votre boutique ;</li> <li>faisant découvrir des parcours de course, des conseils de récupération, des exercices de renforcement adaptés aux coureurs.</li> </ul> <p>Cette dimension communautaire ne profite pas uniquement à votre image de marque ; elle favorise les retours sur votre site, les partages, et donc la visibilité globale de votre boutique.</p> <h2 id="experience-utilisateur-et-conversion-sur-une-boutique-shopify-running">Expérience utilisateur et conversion sur une boutique Shopify running</h2> <p>Un bon référencement n’est efficace que si l’expérience utilisateur est au niveau. Sur une boutique spécialisée dans le running, votre objectif est de rendre l’achat aussi simple et rassurant que possible, tout en aidant le coureur à trouver la chaussure ou l’équipement le mieux adapté.</p> <h3 id="1-navigation-simple-et-filtres-pertinents">1. Navigation simple et filtres pertinents</h3> <p>Les coureurs peuvent avoir des besoins très spécifiques : foulée, distance, terrain, climat, niveau. Vos filtres doivent tenir compte de ces critères. Sur les pages de catégorie de votre boutique Shopify, prévoyez au minimum des filtres par :</p> <ul> <li>type de terrain (route, trail, piste) ;</li> <li>type de foulée (universelle, pronatrice, supinatrice) lorsque cela est pertinent ;</li> <li>distance cible (courtes distances, semi-marathon, marathon, ultra) ;</li> <li>niveau de pratique (débutant, confirmé, compétiteur) ;</li> <li>taille / pointure, sexe, couleur, marque.</li> </ul> <p>Une navigation claire et des filtres adaptés à l’univers du running réduisent les frictions et augmentent vos chances de conversion.</p> <h3 id="2-fiches-produits-orientees-decision">2. Fiches produits orientées décision</h3> <p>Chaque fiche produit doit aider le coureur à prendre une décisionéclairée. Outre leséléments techniques, pensez à :</p> <ul> <li>intégrer plusieurs photos sous différents angles, y compris sur pied et en situation ;</li> <li>proposer, si possible, une courte vidéo montrant le produit en action ;</li> <li>indiquer les conseils de taille (taille grand, taille petit, conseils pour choisir la pointure) ;</li> <li>mettre en avant les avis vérifiés, les notes et les retours d’usage des coureurs ;</li> <li>mentionner les produits complémentaires idoine (chaussettes techniques, ceintures, textiles assortis).</li> </ul> <h3 id="3-checkout-fluide-et-moyens-de-paiement-adaptes">3. Checkout fluide et moyens de paiement adaptés</h3> <p>Un coureur qui a trouvé la bonne chaussure de running doit pouvoir finaliser sa commande rapidement, sans friction. Sur Shopify, vous pouvez :</p> <ul> <li>proposer un tunnel de commande simplifié, avec le moins d’étapes possible ;</li> <li>offrir plusieurs moyens de paiement sécurisés, y compris des solutions rapides qui enregistrent les informations pour de futurs achats ;</li> <li>optimiser l’expérience mobile jusqu’au paiement, car de nombreux coureurs commandent depuis leur téléphone après une séance ou en déplacement ;</li> <li>clarifier les frais de livraison et les délais dès le début du processus de commande.</li> </ul> <h2 id="developper-la-visibilite-et-les-ventes-de-votre-boutique-shopify-running-sur-le-long-terme">Développer la visibilité et les ventes de votre boutique Shopify running sur le long terme</h2> <p>Construire une boutique Shopify dédiée au running est un projet durable. Le SEO, le contenu et l’optimisation de l’expérience utilisateur sont des leviers qui se travaillent dans la durée pour obtenir des résultats solides.</p> <h3 id="1-suivre-et-ajuster-votre-strategie-seo-running">1. Suivre et ajuster votre stratégie SEO running</h3> <p>Le référencement n’est pas figé. Vous devrez suivre régulièrement :</p> <ul> <li>les positions de vos pages sur les requêtes clés (ex. « chaussures de running femme », « chaussures de trail homme », « magasin running en ligne ») ;</li> <li>le volume de trafic organique issu des moteurs de recherche ;</li> <li>le taux de conversion des pages les plus visitées (catégories, fiches produits, articles de blog) ;</li> <li>l’évolution des comportements des coureurs (nouvelles tendances, nouveaux types de produits, par exemple les chaussures à plaque carbone ou les chaussures ultra-amorties).</li> </ul> <p>En fonction de ces données, vous pourrez :</p> <ul> <li>améliorer vos textes et vos fiches produits les plus stratégiques ;</li> <li>créer de nouveaux contenus pour répondre à des questionsémergentes ;</li> <li>ajuster la mise en avant de certains produits ou catégories.</li> </ul> <h3 id="2-travailler-la-complementarite-avec-d-autres-canaux">2. Travailler la complémentarité avec d’autres canaux</h3> <p>Bien que cet article soit centré sur le SEO et la structure de votre boutique Shopify running, il est important de penser votre stratégie de manière globale. Votre visibilité peutêtre renforcée par :</p> <ul> <li>les réseaux sociaux (Instagram, Facebook, TikTok) où vous pouvez partager des conseils, des tests produits, des retours de courses ;</li> <li>des partenariats avec des clubs de running, des coachs ou desévénements sportifs ;</li> <li>des campagnes d’email marketing pour fidéliser vos clients et annoncer vos nouveautés ;</li> <li>la publicité payante (search ou social ads) pour soutenir vos lancements de produits ou vos périodes fortes.</li> </ul> <p>Tous ces canaux renvoient vers votre boutique Shopify, renforçant la notoriété de votre marque et créant un cercle vertueux avec votre SEO.</p> <h3 id="3-penser-international-si-votre-offre-s-y-prete">3. Penser international si votre offre s’y prête</h3> <p>Si vous proposez des marques ou des produits de running qui intéressent un public au-del à de la France, Shopify vous permet de vendre facilement à l’international. Vous pouvez :</p> <ul> <li>proposer plusieurs langues et devises sur votre boutique ;</li> <li>adapter certaines pages aux marchés les plus porteurs (traductions, tailles, références locales) ;</li> <li>gérer la logistique transfrontalière de manière centralisée via votre interface Shopify.</li> </ul> <p>Le running est un sport universel ; si votre logistique et votre positionnement le permettent, élargir votre audience au-del à de votre marché local peut devenir un puissant relais de croissance.</p> <h2 id="conclusion">Conclusion</h2> <p>Créer et développer une <strong>boutique Shopify spécialisée dans le running</strong> est une opportunité solide pour les passionnés de course à pied comme pour les commerçants souhaitant se positionner sur un marché dynamique. Shopify fournit l’infrastructure technique, les outils de gestion et les fonctionnalités e-commerce nécessaires pour vendre efficacement des chaussures, vêtements et accessoires de running.</p> <p>La différence se joue cependant sur votre capacité à :</p> <ul> <li>produire un contenu de qualité, riche et utile pour les coureurs ;</li> <li>optimiser vos pages pour le SEO, avec une structure claire et des mots-clés pertinents ;</li> <li>offrir une expérience utilisateur fluide, rassurante et adaptée aux besoins spécifiques des pratiquants ;</li> <li>exploiter les atouts de Shopify (thèmes, applications, données) pour faireévoluer votre boutique en continu ;</li> <li>animer votre univers avec des contenuséditoriaux, des conseils et une vraie proximité avec la communauté des coureurs.</li> </ul> <p>En combinant ceséléments, votre boutique Shopify dédiée au running peut progressivement s’imposer comme une référence, générer un trafic qualifié en croissance et fidéliser une clientèle de coureurs qui reviendront régulièrement pour renouveler leuréquipement et découvrir vos nouveautés.</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-cr-eer-une-boutique-shopify/" 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</span> </a> <a href="/blog/theme-shopify-avec-ia-guide-complet-pour-optimiser-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">Thème Shopify avec IA : guide complet pour optimiser votre boutique</span> </a> <a href="/blog/comment-creer-une-boutique-shopify-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 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="on-running-shopify-guide-complet-pour-creer-et-optimiser-une-boutique-de-running-sur-shopify"> <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 = 'on-running-shopify-guide-complet-pour-creer-et-optimiser-une-boutique-de-running-sur-shopify'; // 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>