Article SEO SEO Technique

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

Sommaire de l'article

Introduction

Le SEO local pour les services est devenu une stratégie incontournable pour les entreprises qui dépendent d’une clientèle de proximité : professions libérales, artisans, salons de beauté, cliniques, garages, services à domicile, coachs, etc. À l’heure où une part très importante des recherches en ligne comporte une intention locale, ignorer ce levier revient à laisser des clients à la concurrence.

Les comportements des internautes ont fortement évolué : ils recherchent désormais sur leur smartphone un prestataire “près de chez eux”, comparent les avis, consultent les horaires, puis cliquent directement sur un bouton pour appeler, obtenir un itinéraire ou prendre rendez-vous en ligne. Une grande proportion de ces recherches aboutit à une visite en personne ou à un achat dans les heures ou les jours qui suivent.

C’est dans ce contexte qu’intervient le concept de SEO Local Service Scheduling, que l’on peut traduire par planification de service intégrée au SEO local. L’idée est simple : ne plus se contenter d’être visible dans les résultats locaux, mais connecter cette visibilité directement à un système de prise de rendez-vous ou de réservation pour capter immédiatement l’intention de l’internaute.

Concrètement, une stratégie bien conçue de SEO local service scheduling permet :

  • d’augmenter la visibilité de l’entreprise sur les requêtes locales stratégiques ;
  • de faciliter la prise de contact et la planification de rendez-vous (en quelques clics) ;
  • de réduire les frictions (appels manqués, messages non lus, aller-retours inutiles) ;
  • d’améliorer l’expérience utilisateur et la satisfaction des clients ;
  • de suivre plus précisément le retour sur investissement des actions de référencement local.

Cet article explore en profondeur ce concept : définitions, enjeux, bonnes pratiques, exemples concrets, outils recommandés et réponses aux questions fréquentes, afin que vous puissiez mettre en place une stratégie de SEO local orientée prise de rendez-vous, solide et durable.

Concepts clés du SEO Local Service Scheduling

Pour bien comprendre ce concept, il est essentiel de maîtriser plusieurs notions fondamentales qui travaillent ensemble.

Optimisation locale (Local SEO)

Le SEO local regroupe l’ensemble des techniques qui visent à améliorer la visibilité d’une entreprise lorsque l’internaute effectue une recherche géolocalisée ou exprimant une intention locale. Il peut s’agir de requêtes explicites comme “plombier Paris 15” ou “coiffeur Lyon”, mais aussi de recherches implicites comme “garage ouvert maintenant” effectuées depuis un smartphone.

Les objectifs principaux du SEO local sont :

  • apparaître dans le pack local (les résultats cartographiques avec les fiches d’entreprises) ;
  • être visible sur Google Maps et autres cartes (Apple Plans, Waze, etc.) ;
  • positionner le site dans les résultats naturels pour des requêtes de type “ville + service” ;
  • assurer la cohérence et l’exactitude des informations (nom, adresse, téléphone, horaires, site web).

Une part significative des recherches en ligne est aujourd’hui liée à une intention locale, et une proportion importante des recherches mobiles portent sur la localisation d’un service. Les entreprises qui optimisent correctement leur présence locale se positionnent là où les clients cherchent effectivement leurs prestataires.

Planification des services (Service Scheduling)

La planification des services, ou service scheduling, désigne l’ensemble des processus et outils permettant :

  • de proposer des créneaux de rendez-vous ou de réservation ;
  • de gérer les disponibilités des équipes ou des ressources (salles, cabines, véhicules, équipements) ;
  • de confirmer, modifier ou annuler facilement un rendez-vous ;
  • d’envoyer des rappels automatiques par e-mail ou SMS pour réduire les absences ;
  • de centraliser les réservations en ligne, par téléphone et sur place.

Traditionnellement, cette planification était gérée par téléphone, via un agenda papier ou un logiciel interne. Avec la digitalisation, de plus en plus d’entreprises adoptent des solutions de prise de rendez-vous en ligne intégrées à leur site, à leurs réseaux sociaux et à leur fiche Google Business Profile.

Pour le client, l’avantage est immédiat : il peut réserver un créneau à tout moment, sans attendre l’ouverture des bureaux ni risquer de tomber sur une ligne occupée. Pour l’entreprise, les bénéfices sont multiples : moins d’appels à gérer, moins d’erreurs de saisie, meilleure visibilité sur le planning et statistiques plus fiables.

Intégration SEO local + planification de service

Le SEO Local Service Scheduling consiste à aligner ces deux dimensions :

  • la visibilité locale (être trouvé) ;
  • la capacité de conversion immédiate via la prise de rendez-vous (être choisi et réservé).

Au lieu de simplement attirer du trafic vers le site ou la fiche Google Business Profile, l’entreprise met en avant des appels à l’action clairs tels que “Prendre rendez-vous”, “Réserver une séance” ou “Demander une intervention à domicile”, et les relie à un système de réservation fluide.

Cette intégration repose sur plusieurs principes :

  • placer les boutons de réservation au cœur de l’expérience utilisateur (site, fiche Google, réseaux sociaux) ;
  • adapter le contenu SEO aux intentions de recherche orientées action (ex. “urgence”, “aujourd’hui”, “près de moi”) ;
  • simplifier au maximum le parcours : recherche → consultation d’informations clés → prise de rendez-vous ;
  • mesurer précisément l’impact des recherches locales sur le volume de rendez-vous et de ventes.

Dans un environnement où une grande partie des recherches locales aboutit à une action (appel, itinéraire, visite, achat), relier directement la visibilité SEO local à un module de scheduling permet de maximiser les conversions et de tirer pleinement parti du trafic local.

Pourquoi coupler SEO local et planification de service ?

Associer étroitement référencement local et prise de rendez-vous en ligne répond à plusieurs enjeux stratégiques pour les entreprises de services.

Captez une intention locale très forte

Les recherches locales sont généralement très proches de la décision d’achat. Lorsqu’un internaute tape par exemple “ostéopathe près de moi” ou “réparation chaudière urgence Lyon”, il ne se situe pas au stade de la simple découverte : il cherche un prestataire disponible rapidement.

Les études récentes montrent que :

  • une grande proportion des recherches Google comporte une intention locale ;
  • une part importante des recherches mobiles est liée à la localisation de services et de commerces ;
  • un pourcentage significatif des recherches locales aboutit à une visite en magasin ou en cabinet dans les 24 heures ;
  • une part notable des recherches locales se conclut par un achat, parfois dans la journée, parfois dans la semaine.

En d’autres termes, les utilisateurs qui réalisent des recherches locales de services sont souvent prêts à passer à l’action. C’est précisément ici que la planification de service intégrée joue un rôle décisif : elle permet de transformer cette intention immédiate en un rendez-vous confirmé.

Réduire la friction et les abandons

Sans solution de rendez-vous en ligne, le parcours client ressemble souvent à ceci :

  • l’utilisateur vous trouve via Google ;
  • il doit noter votre numéro, appeler (souvent aux heures d’ouverture) ;
  • il peut tomber sur un répondeur, une ligne occupée ou un employé débordé ;
  • un aller-retour s’ensuit pour trouver un créneau qui convient ;
  • parfois, il abandonne et contacte un concurrent plus réactif.

A contrario, avec un module de service scheduling bien intégré :

  • le client clique sur “Prendre rendez-vous” directement depuis Google ou la page locale du site ;
  • il voit les créneaux disponibles en temps réel ;
  • il réserve en quelques clics, 24h/24, sans appeler ;
  • il reçoit une confirmation et éventuellement un rappel automatique.

Ce parcours limite les abandons et permet de capter des clients qui, autrement, seraient peut-être allés voir ailleurs, surtout dans les secteurs concurrentiels et sur les recherches d’urgence.

Optimiser le remplissage du planning

Du point de vue de l’entreprise, l’un des bénéfices majeurs du SEO local couplé au scheduling est la meilleure utilisation du temps :

  • moins de “trous” dans l’agenda, grâce à la visibilité permanente des créneaux disponibles ;
  • réduction des no-shows (rendez-vous non honorés) grâce aux rappels automatiques ;
  • possibilité d’ajuster l’offre (créneaux express, urgences, créneaux premium) en fonction de la demande locale ;
  • meilleure anticipation de la charge de travail et répartition des ressources (équipes, salles, matériel).

Pour les entreprises multi-sites ou les réseaux de franchises, cette approche permet également de diriger le trafic vers le point de vente ou le professionnel le plus adapté en fonction de la localisation et des disponibilités.

Mesurer précisément la performance du SEO local

Intégrer la prise de rendez-vous au cœur de la stratégie locale permet enfin de relier directement les actions SEO aux résultats business. Au lieu de se contenter de mesurer :

  • le trafic sur le site ;
  • le taux de clics sur la fiche Google Business Profile ;
  • ou le nombre d’impressions dans le pack local,

il devient possible de suivre :

  • le nombre de rendez-vous générés par les recherches locales ;
  • la répartition par canal (Google, réseaux sociaux, annuaires, trafic direct) ;
  • le taux de conversion visite → rendez-vous ;
  • l’impact sur le chiffre d’affaires local.

Cette visibilité détaillée permet de prendre des décisions plus éclairées : prioriser certains mots-clés locaux, renforcer la présence dans une zone géographique, tester des call-to-action différents, ou encore adapter la politique de prix et de créneaux.

Bonnes pratiques pour un SEO Local Service Scheduling performant

Mettre en œuvre une stratégie efficace repose sur une combinaison de bonnes pratiques techniques, éditoriales et organisationnelles.

1. Optimiser le contenu pour les mots-clés locaux orientés action

Au-delà des classiques “service + ville” (par exemple “plombier Paris”, “coiffeur Lyon”, “ostéopathe Bordeaux”), il est important de penser aux requêtes qui traduisent une intention de prise de rendez-vous :

  • “prendre rendez-vous + service + ville” ;
  • “réservation en ligne + service + quartier” ;
  • “urgence + service + près de moi” ;
  • “disponible aujourd’hui + service + ville”.

Intégrez ces expressions de manière naturelle dans :

  • les titres de pages (balises et <h1>) ;</li> <li>les <strong>sous-titres</strong> (<h2 id="les-textes-descriptifs-des-services-les-faq-locales-par-exemple-comment-prendre-rendez-vous-en-ligne">, <h3>) ;</li> <li>les <strong>textes descriptifs</strong> des services ;</li> <li>les <strong>FAQ locales</strong> (par exemple : “Comment prendre rendez-vous en ligne avec notre cabinet à Nantes ?”).</li> </ul> <p>L’objectif est de faire correspondre votre contenu aux termes réellement utilisés par les internautes au moment où ils cherchent un <strong>prestataire local disponible</strong>.</p> <h3>2. Améliorer la structure et l’expérience utilisateur du site</h2> <p>Une <strong>structure claire</strong> et une navigation intuitive sont essentielles, à la fois pour les utilisateurs et pour les moteurs de recherche. Pour une entreprise de services locale, cela passe notamment par :</p> <ul> <li>des <strong>pages dédiées par service</strong> (ex. “Coupe femme”, “Réparation de chauffage”, “Coaching individuel”) ;</li> <li>des <strong>pages locales ou de zones</strong> si vous couvrez plusieurs villes ou quartiers ;</li> <li>un <strong>menu simple</strong> permettant d’accéder rapidement à la page “Prendre rendez-vous” ;</li> <li>des boutons d’appel à l’action visibles : “Réserver maintenant”, “Prendre rendez-vous en ligne”, “Demander une intervention”.</li> </ul> <p>Sur mobile, où se concentrent une grande partie des recherches locales, la rapidité de chargement et la lisibilité sont décisives. Un site lent ou mal adapté aux écrans de smartphone fait perdre des prospects, même si le référencement est bon.</p> <h3 id="3-creer-du-contenu-de-qualite-oriente-local-et-service">3. Créer du contenu de qualité orienté local et service</h3> <p>Au-delà des pages de présentation, un <strong>blog</strong> ou une section “conseils” peut renforcer votre visibilité locale et votre expertise. Quelques idées :</p> <ul> <li>guides pratiques liés à votre activité (ex. “Comment choisir son ostéopathe à Marseille ?”) ;</li> <li>articles saisonniers (ex. “Préparer sa chaudière avant l’hiver à Lille”) ;</li> <li>contenus autour des <strong>besoins locaux</strong> (ex. “Les meilleurs créneaux pour éviter l’affluence dans notre salon de coiffure à Toulouse”) ;</li> <li>présentation de cas concrets ou de témoignages clients, en mentionnant la ville ou le quartier.</li> </ul> <p>Ce type de contenu permet de :</p> <ul> <li>se positionner sur plus de <strong>requêtes de longue traîne</strong> ;</li> <li>renforcer la <strong>confiance</strong> et la crédibilité ;</li> <li>montrer concrètement comment se déroule un rendez-vous ou une intervention, ce qui rassure et favorise la réservation.</li> </ul> <h3 id="4-exploiter-pleinement-google-business-profile-et-les-plateformes-locales">4. Exploiter pleinement Google Business Profile et les plateformes locales</h3> <p>La fiche <strong>Google Business Profile</strong> constitue souvent le premier point de contact entre un client et une entreprise locale. Pour un SEO Local Service Scheduling efficace, il est crucial de :</p> <ul> <li>remplir toutes les <strong>informations essentielles</strong> : nom, adresse, téléphone, site, horaires, catégories, services ;</li> <li>maintenir ces données <strong>strictement à jour</strong> (horaires spéciaux, congés, changements de numéro) ;</li> <li>ajouter des <strong>photos de qualité</strong> (locaux, équipe, avant/après, équipements, etc.) ;</li> <li>encourager activement les <strong>avis clients</strong> et y répondre régulièrement ;</li> <li>activer lorsque c’est possible les <strong>liens de prise de rendez-vous</strong> ou de réservation, en les connectant à votre système de scheduling.</li> </ul> <p>Être présent et cohérent sur d’autres plateformes locales (Pages Jaunes, annuaires professionnels, sites d’avis, portails spécialisés par métier) renforce également la visibilité et la confiance. Il est toutefois important de veiller à la <strong>cohérence des données</strong> (mêmes coordonnées et mêmes horaires partout) pour éviter de perdre des clients à cause d’informations contradictoires.</p> <h3 id="5-integrer-un-systeme-de-prise-de-rendez-vous-fluide">5. Intégrer un système de prise de rendez-vous fluide</h3> <p>Le cœur du SEO Local Service Scheduling réside dans le choix et l’intégration d’un <strong>outil de scheduling</strong>. Plusieurs options existent :</p> <ul> <li>solutions spécialisées par métier (logiciels de prise de rendez-vous médicaux, esthétiques, sportifs, etc.) ;</li> <li>outils généralistes comme Calendly, Time Slot, ou d’autres systèmes de réservation en ligne ;</li> <li>modules spécifiques intégrés au CMS du site (WordPress, Drupal, solutions propriétaires).</li> </ul> <p>Quels que soient les outils choisis, l’objectif est de :</p> <ul> <li>proposer un parcours de réservation <strong>simple, rapide et rassurant</strong> ;</li> <li>limiter le nombre d’étapes et de champs à remplir au strict nécessaire ;</li> <li>confirmer clairement le rendez-vous et expliquer la suite (durée, modalités, préparation éventuelle) ;</li> <li>connecter autant que possible le module à vos <strong>fiches locales</strong> (Google Business Profile, pages de services, profils sociaux).</li> </ul> <p>Un bon système doit également permettre de gérer les créneaux, les annulations, les rappels et les notifications internes, afin de véritablement <strong>fluidifier l’organisation</strong> au quotidien.</p> <h3 id="6-suivre-et-ameliorer-en-continu">6. Suivre et améliorer en continu</h3> <p>Une stratégie de SEO local orientée scheduling ne se met pas en place “une fois pour toutes”. Elle nécessite un <strong>suivi régulier</strong> et des ajustements :</p> <ul> <li>analyser quelles <strong>requêtes locales</strong> génèrent le plus de rendez-vous ;</li> <li>tester différents <strong>messages</strong> pour les boutons (“Réserver maintenant”, “Prendre rendez-vous en 1 clic”, “Choisir un créneau”) ;</li> <li>mesurer l’impact des <strong>avis clients</strong> et des notes sur le volume de demandes ;</li> <li>adapter les <strong>horaires de disponibilité</strong> en fonction des pics de demande locale (soir, week-end, pauses déjeuner).</li> </ul> <p>Les données issues de votre site, de Google Business Profile et de votre solution de réservation constituent une mine d’or pour affiner votre stratégie et renforcer votre position sur votre zone de chalandise.</p> <h2 id="outils-et-ressources-pour-une-strategie-efficace">Outils et ressources pour une stratégie efficace</h2> <p>Pour piloter efficacement un SEO Local Service Scheduling, plusieurs catégories d’outils sont particulièrement utiles.</p> <h3 id="outils-de-suivi-seo">Outils de suivi SEO</h3> <ul> <li><strong>Google Search Console</strong> : permet de suivre la performance de votre site dans les résultats de recherche, d’identifier les requêtes locales qui déclenchent des clics, et de détecter d’éventuels problèmes techniques.</li> <li><strong>Google Analytics</strong> (ou autres solutions d’analyse web) : offre une vision détaillée du trafic, des pages les plus consultées, des terminaux utilisés (mobile, desktop) et du comportement des utilisateurs avant la prise de rendez-vous.</li> <li><strong>Outils d’analyse SEO spécialisés</strong> comme Ahrefs, SEMrush ou équivalents : utiles pour repérer des <strong>opportunités de mots-clés locaux</strong>, analyser la concurrence et suivre l’évolution de vos positions sur les requêtes stratégiques.</li> </ul> <h3 id="outils-de-presence-locale">Outils de présence locale</h3> <ul> <li><strong>Google Business Profile</strong> : indispensable pour gérer votre visibilité dans le pack local et sur Google Maps. C’est souvent le premier canal par lequel les prospects découvrent votre entreprise, appellent ou demandent un itinéraire.</li> <li><strong>Gestionnaires de listings locaux</strong> : certains outils permettent de mettre à jour vos informations (N.A.P. : Nom, Adresse, Téléphone) sur de nombreux annuaires à partir d’une seule interface, ce qui garantit une meilleure cohérence des données.</li> <li><strong>Outils d’avis clients</strong> : plateformes de collecte d’avis ou fonctionnalités intégrées qui facilitent la demande d’évaluations après un rendez-vous, élément clé du référencement local et de la conversion.</li> </ul> <h3 id="outils-de-scheduling-et-de-gestion-de-rendez-vous">Outils de scheduling et de gestion de rendez-vous</h3> <ul> <li><strong>Solutions de prise de rendez-vous en ligne</strong> généralistes (par exemple Calendly, Time Slot, ou des services similaires) : adaptées aux prestataires de services qui souhaitent un système simple à mettre en place et à intégrer sur leur site.</li> <li><strong>Logiciels spécialisés par secteur</strong> (santé, beauté, sport, coaching, automobile, etc.) : ils intègrent souvent des fonctionnalités avancées comme la gestion de plusieurs ressources, la facturation, les rappels automatiques, ou les dossiers clients.</li> <li><strong>Modules natifs des CMS</strong> : certains sites utilisent des plugins directement connectés à leur système de gestion de contenu, ce qui facilite l’intégration visuelle et technique sur l’ensemble des pages.</li> </ul> <p>Le choix de l’outil doit tenir compte de plusieurs critères : taille de l’équipe, nombre de sites ou de praticiens, type de services, volume de rendez-vous, niveau de personnalisation souhaité et budget. L’essentiel est que l’outil s’intègre <strong>harmonieusement dans le parcours utilisateur</strong> issu de la recherche locale.</p> <h2 id="exemples-d-application-par-type-d-activite">Exemples d’application par type d’activité</h2> <p>Le concept de SEO Local Service Scheduling s’applique à de nombreux secteurs. Voici quelques exemples concrets.</p> <h3 id="professionnels-de-sante-et-bien-etre">Professionnels de santé et bien-être</h3> <p>Pour les <strong>cabinets médicaux, paramédicaux ou de bien-être</strong> (médecins, ostéopathes, kinésithérapeutes, psychologues, centres de soins, spas, etc.) :</p> <ul> <li>les patients recherchent souvent un praticien <strong>près de chez eux</strong> ou de leur lieu de travail ;</li> <li>la possibilité de <strong>réserver en ligne</strong> un créneau disponible rapidement est un critère de choix important ;</li> <li>un site optimisé pour des requêtes locales (ex. “ostéopathe Nantes prise de rendez-vous en ligne”) couplé à un module de réservation adapté aux exigences du secteur facilite grandement l’accès aux soins.</li> </ul> <h3 id="beaute-coiffure-et-esthetique">Beauté, coiffure et esthétique</h3> <p>Pour les <strong>salons de coiffure, instituts de beauté, barbiers, ongleries</strong>, la visibilité locale est décisive :</p> <ul> <li>les internautes comparent les avis, les photos et les services proposés dans leur quartier ;</li> <li>les créneaux disponibles en fin de journée ou le samedi sont particulièrement recherchés ;</li> <li>un système de réservation en ligne intégré à la fiche Google Business Profile et au site permet de remplir plus facilement les créneaux et de réduire les appels téléphoniques en période d’affluence.</li> </ul> <h3 id="artisans-et-services-a-domicile">Artisans et services à domicile</h3> <p>Les <strong>plombiers, électriciens, chauffagistes, serruriers, entreprises de nettoyage, services de dépannage</strong> et autres prestataires à domicile bénéficient fortement de la combinaison SEO local + scheduling :</p> <ul> <li>les recherches locales d’<strong>urgence</strong> (fuite, panne, serrure bloquée) sont nombreuses et orientées action ;</li> <li>une visibilité forte sur les requêtes “près de moi” et “urgence + ville” couplée à un système de demande d’intervention rapide (formulaire ou créneaux d’urgence) permet de capter ces besoins immédiats ;</li> <li>les avis clients locaux rassurent fortement et influencent la décision finale.</li> </ul> <h3 id="coaching-formation-et-services-professionnels">Coaching, formation et services professionnels</h3> <p>Les <strong>coachs, consultants, formateurs, agences de services</strong> qui travaillent avec une clientèle locale peuvent également tirer parti du SEO Local Service Scheduling :</p> <ul> <li>en optimisant des pages pour des requêtes du type “coach sportif Lyon réservation séance” ou “consultant marketing Paris prise de rendez-vous” ;</li> <li>en proposant des <strong>créneaux de consultation découverte</strong> directement réservables en ligne ;</li> <li>en suivant précisément le nombre de rendez-vous issus du référencement local pour mesurer le retour sur investissement.</li> </ul> <h2 id="faq-questions-frequentes-sur-le-seo-local-service-scheduling">FAQ – Questions fréquentes sur le SEO Local Service Scheduling</h2> <ul> <li> <em>Qu’est-ce que le SEO local ?</em><br/> Le SEO local est l’optimisation d’un site web et de la présence en ligne d’une entreprise afin d’apparaître en bonne position dans les résultats des recherches à <strong>intention géographique</strong>, ainsi que sur les cartes interactives comme Google Maps. Il vise à rendre l’entreprise visible auprès des personnes situées dans sa zone de chalandise. </li> <li> <em>En quoi la planification de service est-elle liée au SEO local ?</em><br/> Le SEO local permet à un prospect de <strong>trouver</strong> votre entreprise, tandis que la planification de service lui permet de <strong>réserver</strong> un rendez-vous ou une prestation en quelques clics. En connectant les deux, vous transformez plus facilement une simple visite en ligne en <strong>client réel</strong>. </li> <li> <em>Pourquoi le SEO local est-il particulièrement important pour les services ?</em><br/> Les entreprises de services reposent souvent sur un <strong>agenda de rendez-vous</strong>. Une grande partie des recherches locales débouche sur une action (appel, itinéraire, visite sur place ou réservation). Être bien positionné localement, avec une solution de prise de rendez-vous claire, permet donc d’augmenter significativement le nombre de clients et le remplissage du planning. </li> <li> <em>Comment optimiser ma fiche Google Business Profile pour la prise de rendez-vous ?</em><br/> Commencez par renseigner des informations <strong>précises et complètes</strong> : nom, adresse, téléphone, site web, catégories, services, horaires à jour. Ajoutez des photos de qualité et encouragez vos clients satisfaits à laisser un avis. Si votre solution le permet, activez les <strong>liens de réservation ou de prise de rendez-vous</strong> pour que les utilisateurs puissent choisir un créneau directement depuis Google. Publiez régulièrement des actualités, offres ou événements pour garder votre fiche active. </li> <li> <em>Quels sont les principaux avantages d’un système de prise de rendez-vous en ligne ?</em><br/> Un système de scheduling en ligne offre plusieurs bénéfices : disponibilité 24h/24, réduction des appels téléphoniques, diminution des erreurs de saisie, <strong>rappels automatiques</strong> pour limiter les oublis, meilleure visibilité sur le planning, statistiques détaillées sur l’origine des rendez-vous, et surtout une expérience client plus fluide, alignée avec les habitudes de recherche actuelles. </li> <li> <em>Est-ce adapté à une petite entreprise ou à un indépendant ?</em><br/> Oui. De nombreuses solutions de prise de rendez-vous sont adaptées aux <strong>petites structures</strong> et aux indépendants, avec des offres tarifaires modulables. Même avec un volume de rendez-vous limité, le gain de temps, la réduction des appels et l’amélioration de la visibilité locale peuvent être significatifs. De plus, une bonne intégration du module de réservation à votre référencement local renforce votre professionnalisme aux yeux des clients. </li> <li> <em>Combien de temps faut-il pour voir les résultats d’une stratégie SEO Local Service Scheduling ?</em><br/> Les délais peuvent varier selon la concurrence locale, la qualité du site, l’historique de la fiche Google Business Profile et la zone géographique ciblée. L’optimisation de la présence locale et l’intégration d’un système de rendez-vous peuvent toutefois générer des <strong>signes positifs</strong> relativement rapidement : hausse des appels, augmentation des visites sur la fiche Google, premiers rendez-vous pris en ligne, puis, progressivement, amélioration des positions locales et du volume global de demandes. </li> <li> <em>Dois-je être présent sur tous les annuaires locaux ?</em><br/> Il est préférable de se concentrer sur les <strong>plateformes les plus pertinentes</strong> pour votre secteur et votre zone (Google Business Profile, principaux annuaires français, portails spécialisés par métier, plateformes d’avis reconnus). L’important n’est pas d’être partout, mais d’être bien présent avec des <strong>informations cohérentes</strong>, des avis de qualité et, si possible, un lien clair vers votre système de prise de rendez-vous. </li> </ul> <h2 id="conclusion">Conclusion</h2> <p>Le <strong>SEO Local Service Scheduling</strong>, c’est-à-dire l’intégration étroite entre <strong>SEO local</strong> et <strong>planification de service</strong>, constitue aujourd’hui une approche stratégique majeure pour toutes les entreprises qui vivent de rendez-vous, de réservations ou de prestations à forte dimension locale.</p> <p>Dans un contexte où la majorité des consommateurs consultent en ligne les services à proximité, où une grande part des recherches Google comporte une composante locale, et où les recherches sur smartphone débouchent fréquemment sur une visite ou un achat, le simple fait d’être visible ne suffit plus. Il faut offrir un <strong>parcours complet</strong> : être trouvé, inspirer confiance, puis permettre de réserver ou de prendre rendez-vous immédiatement.</p> <p>En combinant :</p> <ul> <li>une <strong>optimisation locale solide</strong> (site, contenu, fiche Google Business Profile, avis, cohérence des données) ;</li> <li>un <strong>module de scheduling</strong> bien intégré, simple à utiliser et relié à tous vos points de contact numériques ;</li> <li>un <strong>suivi régulier</strong> des performances (trafic, positions, nombre de rendez-vous, chiffre d’affaires associé),</li> </ul> <p>vous mettez en place un système capable de transformer les recherches locales en <strong>clients fidèles</strong>, tout en améliorant l’organisation interne et la qualité de service. C’est cette synergie entre visibilité, confiance et facilité de réservation qui fait du SEO Local Service Scheduling un levier particulièrement puissant pour les années à venir.</p> </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="seo-local-service-scheduling-concept-complet-de-planification-de-service-locale"> <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 = 'seo-local-service-scheduling-concept-complet-de-planification-de-service-locale'; // 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>