Blog SEO

Découvrez nos guides complets sur le SEO technique et l'optimisation e-commerce

Page 6 sur 23

SEO Technique

Product SEO : guide complet pour optimiser vos pages produits

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Algorithmes et Mises à Jour : Google Product Reviews Update (Mise à jour Avis Produits)

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Fondamentaux de l’indexation : processus d’ajout d’une page à l’index

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

SEO Local Review Appeal Appel d'avis Processus

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Algorithmes et Mises à Jour Google 2025 : Comprendre le Score de Probabilité et les Métriques SEO

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Combien facturer un site WordPress en 2025 : guide complet pour freelances et agences

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Vitesse et performance web : comprendre et optimiser la priorité des ressources

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Optimisation SEO : Guide Complet pour Améliorer votre Positionnement en 2025

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Prestataire référencement naturel : guide complet pour choisir le bon partenaire SEO

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Pourquoi utiliser WordPress pour créer un site internet

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Pourquoi ne pas utiliser WordPress : limites, risques et alternatives à connaître

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Pourquoi choisir WordPress e-commerce (WooCommerce) pour créer sa boutique en ligne

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Pourquoi choisir WordPress pour créer un site internet en 2025

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Pourquoi choisir WordPress en 2025 : le guide complet

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Pourquoi choisir Shopify pour créer et développer votre boutique en ligne

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Pourquoi WordPress est le meilleur CMS

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

On-Page SEO et Position Zéro : comprendre et décrocher les featured snippets

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Pop-ups Mobiles et Responsive : Guide Complet pour Optimiser vos Fenêtres Contextuelles

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Quels Plugins WordPress pour Optimiser Votre Site en 2025 ?

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

AI plugins WordPress : guide complet pour optimiser votre site avec l’intelligence artificielle

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Comment installer WordPress : Guide complet et sécurisé

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

SEO Local Service Scheduling : Concept complet de planification de service locale

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Je n'ai plus accès à mon admin WordPress : que faire ?

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Vitesse et Performance : Performance Tuning et Réglage de Performance pour un Processus Optimal

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Vitesse et Performance Perçue : Le Concept de Performance Perçue en SEO

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

WooCommerce ralentit-il WordPress ? La vérité sur les performances en 2025

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Vitesse et Performance Web Performance API API de performance Web API

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Performance Testing : Guide Complet du Processus et des Bonnes Pratiques

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Vitesse et Performance : Frame Rate, Taux de Rafraîchissement et Métriques Essentielles

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Vitesse et Budget de performance : concept, enjeux et mise en œuvre

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Vitesse et Performance Below the Fold : Sous la ligne de flottaison

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Comment passer un site WordPress en HTTPS (guide complet 2025)

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

Off-Page SEO : Ancre à correspondance partielle (Partial Match Anchor) – Type, usages et bonnes pratiques

Découvrez notre guide complet sur ce sujet SEO

SEO Technique

On-Page SEO : Titre de page et balise (Guide complet 2025) </h3> <p class="text-gray-600 text-sm"> Découvrez notre guide complet sur ce sujet SEO </p> </div> <div class="bg-gradient-to-r from-purple-600 to-blue-600 h-1"></div> </div> </a> <a href="/blog/who-owns-shopify-qui-possede-vraiment-shopify-nbsp/" class="block group"> <div class="bg-white rounded-xl shadow-lg hover:shadow-2xl transition-all duration-300 overflow-hidden transform group-hover:-translate-y-2"> <div class="p-6"> <div class="flex items-start justify-between mb-4"> <span class="inline-block bg-purple-100 text-purple-600 text-xs font-semibold px-3 py-1 rounded-full"> SEO Technique </span> <i class="fas fa-arrow-right text-purple-600 opacity-0 group-hover:opacity-100 transition-opacity"></i> </div> <h3 class="text-xl font-bold text-gray-900 mb-3 group-hover:text-purple-600 transition line-clamp-2"> Who owns Shopify : qui possède vraiment Shopify ? </h3> <p class="text-gray-600 text-sm"> Découvrez notre guide complet sur ce sujet SEO </p> </div> <div class="bg-gradient-to-r from-purple-600 to-blue-600 h-1"></div> </div> </a> <a href="/blog/algorithmes-google-et-overfitting-seo-comprendre-et-eviter-le-surapprentissage/" class="block group"> <div class="bg-white rounded-xl shadow-lg hover:shadow-2xl transition-all duration-300 overflow-hidden transform group-hover:-translate-y-2"> <div class="p-6"> <div class="flex items-start justify-between mb-4"> <span class="inline-block bg-purple-100 text-purple-600 text-xs font-semibold px-3 py-1 rounded-full"> SEO Technique </span> <i class="fas fa-arrow-right text-purple-600 opacity-0 group-hover:opacity-100 transition-opacity"></i> </div> <h3 class="text-xl font-bold text-gray-900 mb-3 group-hover:text-purple-600 transition line-clamp-2"> Algorithmes Google et Overfitting SEO : comprendre et éviter le surapprentissage </h3> <p class="text-gray-600 text-sm"> Découvrez notre guide complet sur ce sujet SEO </p> </div> <div class="bg-gradient-to-r from-purple-600 to-blue-600 h-1"></div> </div> </a> <a href="/blog/faut-il-payer-pour-shopify-guide-complet-des-tarifs-et-options-en-2025/" class="block group"> <div class="bg-white rounded-xl shadow-lg hover:shadow-2xl transition-all duration-300 overflow-hidden transform group-hover:-translate-y-2"> <div class="p-6"> <div class="flex items-start justify-between mb-4"> <span class="inline-block bg-purple-100 text-purple-600 text-xs font-semibold px-3 py-1 rounded-full"> SEO Technique </span> <i class="fas fa-arrow-right text-purple-600 opacity-0 group-hover:opacity-100 transition-opacity"></i> </div> <h3 class="text-xl font-bold text-gray-900 mb-3 group-hover:text-purple-600 transition line-clamp-2"> Faut-il payer pour Shopify ? Guide complet des tarifs et options en 2025 </h3> <p class="text-gray-600 text-sm"> Découvrez notre guide complet sur ce sujet SEO </p> </div> <div class="bg-gradient-to-r from-purple-600 to-blue-600 h-1"></div> </div> </a> <a href="/blog/ai-tools-for-wordpress-guide-complet-des-meilleurs-plugins-ia-pour-wordpress/" class="block group"> <div class="bg-white rounded-xl shadow-lg hover:shadow-2xl transition-all duration-300 overflow-hidden transform group-hover:-translate-y-2"> <div class="p-6"> <div class="flex items-start justify-between mb-4"> <span class="inline-block bg-purple-100 text-purple-600 text-xs font-semibold px-3 py-1 rounded-full"> SEO Technique </span> <i class="fas fa-arrow-right text-purple-600 opacity-0 group-hover:opacity-100 transition-opacity"></i> </div> <h3 class="text-xl font-bold text-gray-900 mb-3 group-hover:text-purple-600 transition line-clamp-2"> AI tools for WordPress : guide complet des meilleurs plugins IA pour WordPress </h3> <p class="text-gray-600 text-sm"> Découvrez notre guide complet sur ce sujet SEO </p> </div> <div class="bg-gradient-to-r from-purple-600 to-blue-600 h-1"></div> </div> </a> <a href="/blog/top-outils-d-ia-pour-shopify-depassez-vos-concurrents-avec-l-intelligence-artificielle/" class="block group"> <div class="bg-white rounded-xl shadow-lg hover:shadow-2xl transition-all duration-300 overflow-hidden transform group-hover:-translate-y-2"> <div class="p-6"> <div class="flex items-start justify-between mb-4"> <span class="inline-block bg-purple-100 text-purple-600 text-xs font-semibold px-3 py-1 rounded-full"> SEO Technique </span> <i class="fas fa-arrow-right text-purple-600 opacity-0 group-hover:opacity-100 transition-opacity"></i> </div> <h3 class="text-xl font-bold text-gray-900 mb-3 group-hover:text-purple-600 transition line-clamp-2"> Top Outils d'IA pour Shopify : Dépassez vos Concurrents avec l'Intelligence Artificielle </h3> <p class="text-gray-600 text-sm"> Découvrez notre guide complet sur ce sujet SEO </p> </div> <div class="bg-gradient-to-r from-purple-600 to-blue-600 h-1"></div> </div> </a> <a href="/blog/check-optimizer-guide-complet-pour-optimiser-votre-site-web/" class="block group"> <div class="bg-white rounded-xl shadow-lg hover:shadow-2xl transition-all duration-300 overflow-hidden transform group-hover:-translate-y-2"> <div class="p-6"> <div class="flex items-start justify-between mb-4"> <span class="inline-block bg-purple-100 text-purple-600 text-xs font-semibold px-3 py-1 rounded-full"> SEO Technique </span> <i class="fas fa-arrow-right text-purple-600 opacity-0 group-hover:opacity-100 transition-opacity"></i> </div> <h3 class="text-xl font-bold text-gray-900 mb-3 group-hover:text-purple-600 transition line-clamp-2"> Check Optimizer : Guide Complet pour Optimiser Votre Site Web </h3> <p class="text-gray-600 text-sm"> Découvrez notre guide complet sur ce sujet SEO </p> </div> <div class="bg-gradient-to-r from-purple-600 to-blue-600 h-1"></div> </div> </a> <a href="/blog/outil-suivi-referencement-naturel-guide-complet-2025/" class="block group"> <div class="bg-white rounded-xl shadow-lg hover:shadow-2xl transition-all duration-300 overflow-hidden transform group-hover:-translate-y-2"> <div class="p-6"> <div class="flex items-start justify-between mb-4"> <span class="inline-block bg-purple-100 text-purple-600 text-xs font-semibold px-3 py-1 rounded-full"> SEO Technique </span> <i class="fas fa-arrow-right text-purple-600 opacity-0 group-hover:opacity-100 transition-opacity"></i> </div> <h3 class="text-xl font-bold text-gray-900 mb-3 group-hover:text-purple-600 transition line-clamp-2"> Outil suivi référencement naturel : guide complet 2025 </h3> <p class="text-gray-600 text-sm"> Découvrez notre guide complet sur ce sujet SEO </p> </div> <div class="bg-gradient-to-r from-purple-600 to-blue-600 h-1"></div> </div> </a> <a href="/blog/les-meilleurs-outils-de-referencement-naturel-en-2025/" class="block group"> <div class="bg-white rounded-xl shadow-lg hover:shadow-2xl transition-all duration-300 overflow-hidden transform group-hover:-translate-y-2"> <div class="p-6"> <div class="flex items-start justify-between mb-4"> <span class="inline-block bg-purple-100 text-purple-600 text-xs font-semibold px-3 py-1 rounded-full"> SEO Technique </span> <i class="fas fa-arrow-right text-purple-600 opacity-0 group-hover:opacity-100 transition-opacity"></i> </div> <h3 class="text-xl font-bold text-gray-900 mb-3 group-hover:text-purple-600 transition line-clamp-2"> Les Meilleurs Outils de Référencement Naturel en 2025 </h3> <p class="text-gray-600 text-sm"> Découvrez notre guide complet sur ce sujet SEO </p> </div> <div class="bg-gradient-to-r from-purple-600 to-blue-600 h-1"></div> </div> </a> <a href="/blog/seo-technique-google-disavow-tool-l-outil-de-desaveu-de-liens-explique-en-detail/" class="block group"> <div class="bg-white rounded-xl shadow-lg hover:shadow-2xl transition-all duration-300 overflow-hidden transform group-hover:-translate-y-2"> <div class="p-6"> <div class="flex items-start justify-between mb-4"> <span class="inline-block bg-purple-100 text-purple-600 text-xs font-semibold px-3 py-1 rounded-full"> SEO Technique </span> <i class="fas fa-arrow-right text-purple-600 opacity-0 group-hover:opacity-100 transition-opacity"></i> </div> <h3 class="text-xl font-bold text-gray-900 mb-3 group-hover:text-purple-600 transition line-clamp-2"> SEO technique : Google Disavow Tool, l’outil de désaveu de liens expliqué en détail </h3> <p class="text-gray-600 text-sm"> Découvrez notre guide complet sur ce sujet SEO </p> </div> <div class="bg-gradient-to-r from-purple-600 to-blue-600 h-1"></div> </div> </a> <a href="/blog/outil-d-inspection-d-url-seo-technique-guide-complet/" class="block group"> <div class="bg-white rounded-xl shadow-lg hover:shadow-2xl transition-all duration-300 overflow-hidden transform group-hover:-translate-y-2"> <div class="p-6"> <div class="flex items-start justify-between mb-4"> <span class="inline-block bg-purple-100 text-purple-600 text-xs font-semibold px-3 py-1 rounded-full"> SEO Technique </span> <i class="fas fa-arrow-right text-purple-600 opacity-0 group-hover:opacity-100 transition-opacity"></i> </div> <h3 class="text-xl font-bold text-gray-900 mb-3 group-hover:text-purple-600 transition line-clamp-2"> Outil d’inspection d’URL SEO technique : guide complet </h3> <p class="text-gray-600 text-sm"> Découvrez notre guide complet sur ce sujet SEO </p> </div> <div class="bg-gradient-to-r from-purple-600 to-blue-600 h-1"></div> </div> </a> <a href="/blog/analyse-et-metriques-lighthouse-outil-d-audit-de-performance/" class="block group"> <div class="bg-white rounded-xl shadow-lg hover:shadow-2xl transition-all duration-300 overflow-hidden transform group-hover:-translate-y-2"> <div class="p-6"> <div class="flex items-start justify-between mb-4"> <span class="inline-block bg-purple-100 text-purple-600 text-xs font-semibold px-3 py-1 rounded-full"> SEO Technique </span> <i class="fas fa-arrow-right text-purple-600 opacity-0 group-hover:opacity-100 transition-opacity"></i> </div> <h3 class="text-xl font-bold text-gray-900 mb-3 group-hover:text-purple-600 transition line-clamp-2"> Analyse et Métriques Lighthouse : Outil d'audit de performance </h3> <p class="text-gray-600 text-sm"> Découvrez notre guide complet sur ce sujet SEO </p> </div> <div class="bg-gradient-to-r from-purple-600 to-blue-600 h-1"></div> </div> </a> <a href="/blog/referencement-naturel-a-cannes-guide-complet-pour-booster-votre-visibilite-locale/" class="block group"> <div class="bg-white rounded-xl shadow-lg hover:shadow-2xl transition-all duration-300 overflow-hidden transform group-hover:-translate-y-2"> <div class="p-6"> <div class="flex items-start justify-between mb-4"> <span class="inline-block bg-purple-100 text-purple-600 text-xs font-semibold px-3 py-1 rounded-full"> SEO Technique </span> <i class="fas fa-arrow-right text-purple-600 opacity-0 group-hover:opacity-100 transition-opacity"></i> </div> <h3 class="text-xl font-bold text-gray-900 mb-3 group-hover:text-purple-600 transition line-clamp-2"> Référencement naturel à Cannes : guide complet pour booster votre visibilité locale </h3> <p class="text-gray-600 text-sm"> Découvrez notre guide complet sur ce sujet SEO </p> </div> <div class="bg-gradient-to-r from-purple-600 to-blue-600 h-1"></div> </div> </a> <a href="/blog/optimisation-ou-optimization-strategies-cles-pour-les-entreprises-en-2025/" class="block group"> <div class="bg-white rounded-xl shadow-lg hover:shadow-2xl transition-all duration-300 overflow-hidden transform group-hover:-translate-y-2"> <div class="p-6"> <div class="flex items-start justify-between mb-4"> <span class="inline-block bg-purple-100 text-purple-600 text-xs font-semibold px-3 py-1 rounded-full"> SEO Technique </span> <i class="fas fa-arrow-right text-purple-600 opacity-0 group-hover:opacity-100 transition-opacity"></i> </div> <h3 class="text-xl font-bold text-gray-900 mb-3 group-hover:text-purple-600 transition line-clamp-2"> Optimisation ou Optimization : Stratégies Clés pour les Entreprises en 2025 </h3> <p class="text-gray-600 text-sm"> Découvrez notre guide complet sur ce sujet SEO </p> </div> <div class="bg-gradient-to-r from-purple-600 to-blue-600 h-1"></div> </div> </a> <a href="/blog/optimiser-le-referencement-naturel-definition-et-guide-complet/" class="block group"> <div class="bg-white rounded-xl shadow-lg hover:shadow-2xl transition-all duration-300 overflow-hidden transform group-hover:-translate-y-2"> <div class="p-6"> <div class="flex items-start justify-between mb-4"> <span class="inline-block bg-purple-100 text-purple-600 text-xs font-semibold px-3 py-1 rounded-full"> SEO Technique </span> <i class="fas fa-arrow-right text-purple-600 opacity-0 group-hover:opacity-100 transition-opacity"></i> </div> <h3 class="text-xl font-bold text-gray-900 mb-3 group-hover:text-purple-600 transition line-clamp-2"> Optimiser le référencement naturel : définition et guide complet </h3> <p class="text-gray-600 text-sm"> Découvrez notre guide complet sur ce sujet SEO </p> </div> <div class="bg-gradient-to-r from-purple-600 to-blue-600 h-1"></div> </div> </a> <a href="/blog/optimiser-les-recherches-guide-complet-pour-une-recherche-interne-efficace/" class="block group"> <div class="bg-white rounded-xl shadow-lg hover:shadow-2xl transition-all duration-300 overflow-hidden transform group-hover:-translate-y-2"> <div class="p-6"> <div class="flex items-start justify-between mb-4"> <span class="inline-block bg-purple-100 text-purple-600 text-xs font-semibold px-3 py-1 rounded-full"> SEO Technique </span> <i class="fas fa-arrow-right text-purple-600 opacity-0 group-hover:opacity-100 transition-opacity"></i> </div> <h3 class="text-xl font-bold text-gray-900 mb-3 group-hover:text-purple-600 transition line-clamp-2"> Optimiser les Recherches : Guide Complet pour une Recherche Interne Efficace </h3> <p class="text-gray-600 text-sm"> Découvrez notre guide complet sur ce sujet SEO </p> </div> <div class="bg-gradient-to-r from-purple-600 to-blue-600 h-1"></div> </div> </a> <a href="/blog/optimiser-seo-strategie-complete-pour-un-referencement-naturel-performant-en-2025/" class="block group"> <div class="bg-white rounded-xl shadow-lg hover:shadow-2xl transition-all duration-300 overflow-hidden transform group-hover:-translate-y-2"> <div class="p-6"> <div class="flex items-start justify-between mb-4"> <span class="inline-block bg-purple-100 text-purple-600 text-xs font-semibold px-3 py-1 rounded-full"> SEO Technique </span> <i class="fas fa-arrow-right text-purple-600 opacity-0 group-hover:opacity-100 transition-opacity"></i> </div> <h3 class="text-xl font-bold text-gray-900 mb-3 group-hover:text-purple-600 transition line-clamp-2"> Optimiser SEO : Stratégie Complète pour un Référencement Naturel Performant en 2025 </h3> <p class="text-gray-600 text-sm"> Découvrez notre guide complet sur ce sujet SEO </p> </div> <div class="bg-gradient-to-r from-purple-600 to-blue-600 h-1"></div> </div> </a> </div> <!-- Pagination --> <nav class="flex justify-center items-center gap-2 mt-12"> <a href="/blog/page/5/" class="px-4 py-2 bg-white border border-gray-300 rounded-lg hover:bg-purple-50 hover:border-purple-600 transition"> <i class="fas fa-chevron-left"></i> Précédent </a> <a href="/blog/" class="px-4 py-2 bg-white border border-gray-300 rounded-lg hover:bg-purple-50 hover:border-purple-600 transition">1</a><span class="px-2 text-gray-400">...</span><a href="/blog/page/3/" class="px-4 py-2 bg-white border border-gray-300 rounded-lg hover:bg-purple-50 hover:border-purple-600 transition">3</a><a href="/blog/page/4/" class="px-4 py-2 bg-white border border-gray-300 rounded-lg hover:bg-purple-50 hover:border-purple-600 transition">4</a><a href="/blog/page/5/" class="px-4 py-2 bg-white border border-gray-300 rounded-lg hover:bg-purple-50 hover:border-purple-600 transition">5</a><span class="px-4 py-2 bg-purple-600 text-white rounded-lg font-semibold">6</span><a href="/blog/page/7/" class="px-4 py-2 bg-white border border-gray-300 rounded-lg hover:bg-purple-50 hover:border-purple-600 transition">7</a><a href="/blog/page/8/" class="px-4 py-2 bg-white border border-gray-300 rounded-lg hover:bg-purple-50 hover:border-purple-600 transition">8</a><a href="/blog/page/9/" class="px-4 py-2 bg-white border border-gray-300 rounded-lg hover:bg-purple-50 hover:border-purple-600 transition">9</a><span class="px-2 text-gray-400">...</span><a href="/blog/page/23/" class="px-4 py-2 bg-white border border-gray-300 rounded-lg hover:bg-purple-50 hover:border-purple-600 transition">23</a> <a href="/blog/page/7/" class="px-4 py-2 bg-white border border-gray-300 rounded-lg hover:bg-purple-50 hover:border-purple-600 transition"> Suivant <i class="fas fa-chevron-right"></i> </a> </nav> <!-- Stats --> <div class="mt-12 text-center"> <p class="text-gray-600"> <span class="font-bold text-purple-600 text-2xl">1120</span> articles disponibles </p> <p class="text-sm text-gray-500 mt-2">Articles 251 à 300 sur 1120</p> </div> </div> </section> <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>