Publié le 6 septembre 2026 SEO Technique

Algorithmes et Mises à Jour Feature Importance Importance des caractéristiques Concept

Sommaire de l'article

Algorithmes, mises à jour et importance des caractéristiques (Feature Importance) en SEO

Introduction

L’optimisation pour les moteurs de recherche (SEO) est un domaine en évolution permanente, rythmé par des mises à jour d’algorithmes de plus en plus sophistiqués. Les moteurs de recherche, en particulier Google, évaluent aujourd’hui des centaines de signaux pour déterminer le classement des pages dans les résultats de recherche. Parmi les concepts utiles pour comprendre ce fonctionnement, l’idée d’importance des caractéristiques – souvent appelée par analogie feature importance – permet de raisonner sur le poids relatif de différents facteurs de classement, même si leur pondération exacte reste secrète.

Cet article ne prétend pas dévoiler l’algorithme de Google, qui est propriétaire et non public. Il propose plutôt un cadre de compréhension inspiré des méthodes d’apprentissage automatique (machine learning) et de l’évolution connue des mises à jour d’algorithmes de recherche, afin d’expliquer comment les moteurs peuvent accorder plus ou moins de poids à certains signaux : contenu, structure, expérience utilisateur, performance technique, popularité, pertinence thématique, etc.

Nous verrons donc :

  • comment fonctionnent, de façon générale, les algorithmes de recherche modernes, largement basés sur le machine learning ;
  • ce que recouvre la notion de feature importance dans le cadre du SEO, et ce qu’elle ne permet pas de faire ;
  • l’impact des mises à jour algorithmiques régulières sur le poids relatif des signaux de classement ;
  • les bonnes pratiques concrètes pour optimiser les caractéristiques les plus importantes aujourd’hui (contenu, structure, technique, signaux d’expérience, E‑E‑A‑T, maillage, etc.) ;
  • les principaux outils pour observer ces signaux et ajuster sa stratégie.

Concepts clés

Avant de parler de feature importance en SEO, il est indispensable de clarifier plusieurs notions fondamentales.

Algorithmes de recherche modernes

Les algorithmes de moteurs de recherche comme Google combinent aujourd’hui :

  • des composants déterministes (par exemple : interprétation des balises HTML, gestion des redirections, règles de sécurité, filtrage du spam) ;
  • des modèles statistiques et de machine learning qui apprennent à partir de données massives (clics, contenus, liens, comportements, signaux de qualité) afin d’ordonner les résultats de manière plus pertinente ;
  • des modèles de traitement du langage naturel basés sur des architectures de type transformer pour mieux comprendre les requêtes et le contenu (recherche sémantique, compréhension du contexte, détection de l’intention).

Contrairement à une idée reçue, il n’existe pas un seul algorithme monolithique, mais un ensemble de systèmes qui interviennent tout au long du processus : exploration (crawl), indexation, compréhension de la requête, sélection de documents, personnalisation éventuelle, réordonnancement, génération d’extraits enrichis, etc.

Mises à jour algorithmiques

Les moteurs de recherche procèdent à des mises à jour fréquentes de leurs systèmes. On distingue généralement :

  • des mises à jour majeures (core updates), qui ajustent globalement la façon dont les signaux de qualité sont pris en compte et peuvent provoquer des variations notables de trafic sur de nombreux sites ;
  • des mises à jour ciblées (contenu utile, spam, liens, product reviews, etc.) qui visent des problèmes précis : contenus de faible valeur, sur-optimisation, liens artificiels, etc. ;
  • des ajustements continus, souvent invisibles individuellement, qui améliorent progressivement la pertinence (correctifs, ré-entraînement de modèles, changement de pondération de certains signaux).

Ces mises à jour modifient, de fait, l’importance relative de certaines caractéristiques. Par exemple, une mise à jour orientée « contenu utile » peut réduire l’influence de la simple densité de mots-clés au profit de signaux de qualité, de profondeur et de satisfaction utilisateur.

Feature Importance : importance des caractéristiques

En machine learning, la feature importance désigne la contribution relative de chaque variable (feature) aux prédictions d’un modèle. Il existe plusieurs méthodes techniques (importance par permutation, importance basée sur les arbres de décision, SHAP, etc.), chacune avec ses limites. Dans le cas d’un moteur de recherche, on peut voir les signaux de classement comme des caractéristiques : pertinence du contenu, qualité des liens, temps de chargement, compatibilité mobile, etc.

Dans le contexte du SEO, parler d’importance des caractéristiques revient donc à :

  • raisonner sur les familles de signaux que les moteurs sont susceptibles d’utiliser ;
  • observer, grâce aux mises à jour et à l’analyse de données, quels signaux semblent devenir plus ou moins déterminants ;
  • adapter sa stratégie en conséquence, tout en gardant à l’esprit que les poids exacts restent inconnus et peuvent évoluer à tout moment.

Il est important de noter que :

  • aucun outil externe ne peut fournir la feature importance exacte à l’intérieur de l’algorithme de Google ;
  • les listes de « facteurs de classement » sont nécessairement des modélisations approximatives, fondées sur la communication publique de Google, la littérature scientifique, les brevets et l’observation empirique des résultats.

Les grandes familles de caractéristiques prises en compte en SEO

Pour raisonner sur l’importance des caractéristiques, il est utile de regrouper les signaux de classement en grandes familles. Les pondérations exactes varient selon la requête, l’intention de recherche, le secteur, le type de contenu et l’historique de l’utilisateur, mais certaines familles restent centrales.

1. Pertinence et qualité du contenu

Le contenu reste l’un des piliers de la visibilité organique. Pour un moteur de recherche, un contenu de qualité présente plusieurs caractéristiques :

  • il répond clairement à l’intention de la requête (informationnelle, transactionnelle, navigationnelle, locale, etc.) ;
  • il est original, c’est-à-dire qu’il apporte une valeur ajoutée réelle par rapport aux contenus existants ;
  • il est complet et structuré, couvrant les aspects importants du sujet sans se limiter à des textes superficiels ;
  • il est à jour lorsque la fraîcheur de l’information est importante (données, réglementations, prix, tendances, actualités) ;
  • il utilise les termes et expressions attendus dans le domaine, sans sur-optimisation (mots-clés principaux, lexique thématique, entités nommées, synonymes).

De nombreux systèmes de Google évaluent aujourd’hui la qualité de contenu à l’aide de modèles linguistiques avancés, capables d’aller au-delà des simples mots-clés exacts. L’optimisation se déplace donc progressivement de la « densité de mots-clés » vers la pertinence sémantique, la profondeur et la clarté.

2. Structure de la page et signaux on-page

La structure du document HTML fournit au moteur des indices clairs sur l’organisation de l’information :

  • la balise </strong>, fortement corrélée à la compréhension du sujet de la page et utilisée pour l’affichage en résultats ;</li> <li>la balise <strong>H1</strong>, qui porte généralement le sujet principal de la page ;</li> <li>les balises <strong>H2, H3, H4…</strong>, qui hiérarchisent les sous-parties ;</li> <li>les éléments de <strong>navigation</strong> (menu, fil d’Ariane, liens internes) ;</li> <li>les <strong>données structurées</strong> (schema.org) lorsqu’elles sont pertinentes et correctement implémentées.</li> </ul> <p>Une structure claire facilite autant le travail des robots que l’expérience humaine. À l’inverse, une page longue sans titres, sans paragraphes aérés ni logique de sections tend à être moins bien comprise et moins engageante.</p> <h3 id="3-experience-utilisateur-et-signaux-d-engagement">3. Expérience utilisateur et signaux d’engagement</h3> <p>Les moteurs n’observent pas uniquement le contenu statique. Ils peuvent aussi prendre en compte des <strong>signaux comportementaux agrégés</strong>, comme :</p> <ul> <li>le taux de clic relatif dans les résultats (CTR) par rapport à d’autres résultats pour la même requête ;</li> <li>le fait que l’utilisateur revienne rapidement aux résultats pour cliquer sur un autre lien (insatisfaction possible) ;</li> <li>le temps passé sur le site, le nombre de pages vues, lorsque ces données sont observables de manière anonyme et agrégée.</li> </ul> <p>Du point de vue SEO, l’objectif n’est pas de « manipuler » ces signaux, mais d’<strong>améliorer réellement l’expérience</strong> : clarté de la réponse, lisibilité, absence de surcharges publicitaires, navigation intuitive, adaptation mobile, etc.</p> <h3 id="4-performance-technique-et-accessibilite">4. Performance technique et accessibilité</h3> <p>Les aspects techniques conditionnent la capacité du moteur à explorer, indexer et proposer une bonne expérience :</p> <ul> <li><strong>temps de chargement</strong> raisonnable, en particulier sur mobile ;</li> <li><strong>stabilité visuelle</strong> et réactivité (principes proches des Core Web Vitals) ;</li> <li><strong>compatibilité mobile</strong> (design responsive, éléments cliquables accessibles, police lisible) ;</li> <li>usage généralisé du <strong>HTTPS</strong> ;</li> <li>absence de <strong>bloquage d’exploration</strong> non souhaité (robots.txt, balises meta robots, erreurs serveur répétées) ;</li> <li>structure d’URL logique, redirections propres, sitemaps XML à jour lorsque nécessaire.</li> </ul> <p>Ces signaux ne suffisent pas à eux seuls à positionner une page sur une requête compétitive, mais un site techniquement défaillant est pénalisé en pratique par une moindre indexation, une expérience dégradée et un désavantage global face à des concurrents mieux optimisés.</p> <h3 id="5-popularite-liens-et-reputation">5. Popularité, liens et réputation</h3> <p>Les <strong>liens</strong> restent un signal important de popularité et de recommandation. Cependant, leur rôle a beaucoup évolué :</p> <ul> <li>la <strong>qualité</strong> des liens prime largement sur la quantité ;</li> <li>la <strong>pertinence thématique</strong> entre la page d’origine et la page ciblée est déterminante ;</li> <li>certains types de liens artificiels ou massifs peuvent déclencher des filtres, voire des sanctions.</li> </ul> <p>Au-delà des backlinks, la <strong>réputation en ligne</strong> (avis, citations, mentions de marque, signaux d’autorité dans un domaine) contribue à l’évaluation globale de la fiabilité d’un site, en particulier dans les thématiques sensibles (finance, santé, droit, etc.).</p> <h3 id="6-e-e-a-t-experience-expertise-autorite-fiabilite">6. E‑E‑A‑T : Expérience, Expertise, Autorité, Fiabilité</h3> <p>Bien que l’E‑E‑A‑T ne soit pas un « facteur de classement direct » calculé par un score unique, de nombreux systèmes du moteur visent à favoriser les contenus :</p> <ul> <li>produits par des personnes ayant une <strong>expérience réelle</strong> du sujet ;</li> <li>porteurs d’une <strong>expertise démontrable</strong> (contenu de qualité, informations précises, références crédibles) ;</li> <li>associés à une <strong>autorité</strong> reconnue dans un domaine (site éditorial, organisme de référence, marque établie) ;</li> <li>émanant de sources <strong>fiables</strong> (transparence éditoriale, mentions légales, politique de confidentialité, réputation générale).</li> </ul> <p>Les signaux liés à l’E‑E‑A‑T sont particulièrement importants dans les domaines « Your Money or Your Life » (YMYL), où les mauvaises informations peuvent avoir un impact financier, médical ou juridique significatif.</p> <h2 id="comment-les-mises-a-jour-modifient-l-importance-des">Comment les mises à jour modifient l’importance des caractéristiques</h2> <p>Les <strong>mises à jour d’algorithmes</strong> ont pour but d’améliorer la pertinence et la qualité globale des résultats. Concrètement, cela se traduit par :</p> <ul> <li>une <strong>repondération</strong> de certains signaux de classement (par exemple : plus d’importance accordée à la qualité du contenu, moins à de simples signaux techniques basiques pour une requête donnée) ;</li> <li>l’introduction de <strong>nouveaux signaux</strong> (meilleure détection du spam, meilleure compréhension sémantique, interprétation de nouveaux types de données) ;</li> <li>la mise à jour ou le <strong>ré-entraînement de modèles</strong> de machine learning qui apprennent à partir de nouvelles données d’utilisation et de nouveaux corpus de contenu.</li> </ul> <p>Un point essentiel pour le SEO : l’<strong>ordre d’importance</strong> des caractéristiques n’est ni fixe ni universel. Il dépend :</p> <ul> <li>du type de requête (informationnelle, produit, locale, marque, etc.) ;</li> <li>de l’intention de l’utilisateur (se renseigner, acheter, comparer, se rendre physiquement quelque part) ;</li> <li>du type de résultat attendu (article, fiche produit, vidéo, résultat local, page institutionnelle, etc.) ;</li> <li>de l’environnement concurrentiel (qualité moyenne des contenus présents sur le même sujet).</li> </ul> <p>Par exemple :</p> <ul> <li>sur une requête très locale (par exemple « dentiste paris 15 »), la <strong>pertinence géographique</strong> et les signaux de <strong>présence locale</strong> (fiche d’établissement, avis, cohérence des informations NAP) seront particulièrement importants ;</li> <li>sur une requête purement informationnelle de haut niveau (par exemple « qu’est-ce que l’apprentissage profond »), la <strong>qualité du contenu éditorial</strong>, l’autorité dans le domaine et la clarté pédagogique seront déterminants ;</li> <li>sur une requête transactionnelle (« acheter chaussures running femme »), la <strong>qualité de la fiche produit</strong>, la confiance, la disponibilité, le prix et la logistique (livraison, retours) deviennent des signaux clés.</li> </ul> <h2 id="bonnes-pratiques-pour-optimiser-l-importance-des">Bonnes pratiques pour optimiser l’importance des caractéristiques en SEO</h2> <p>Dans ce contexte mouvant, la meilleure stratégie consiste à travailler les signaux dont la pertinence est confirmée dans la durée, plutôt que de rechercher des raccourcis. Voici les bonnes pratiques principales.</p> <h3 id="optimiser-le-contenu-pertinence-profondeur-et-clarte">Optimiser le contenu : pertinence, profondeur et clarté</h3> <p>Le contenu est le cœur de la visibilité organique. Pour maximiser son poids dans les algorithmes :</p> <ul> <li><strong>Analysez l’intention</strong> derrière chaque requête ciblée : quelles questions implicites l’utilisateur se pose-t-il ? Cherche-t-il une définition, un tutoriel, une comparaison, un produit, une adresse ?</li> <li><strong>Structurez vos contenus</strong> pour couvrir l’ensemble des sous-questions importantes : définitions, bénéfices, risques, étapes, exemples, cas d’usage, FAQ.</li> <li><strong>Utilisez un vocabulaire riche</strong> mais naturel : synonymes, termes techniques lorsque c’est pertinent, noms d’entités, champs lexicaux du sujet.</li> <li><strong>Mettez à jour régulièrement</strong> les contenus sensibles au temps (prix, chiffres, réglementations, technologies, tendances) afin de ne pas laisser des informations obsolètes nuire à la confiance.</li> <li><strong>Évitez le contenu généré automatiquement sans supervision</strong>, les reformulations creuses ou les textes qui n’apportent pas de valeur nouvelle par rapport à ce qui existe déjà.</li> </ul> <h3 id="ameliorer-la-structure-et-le-balisage-html">Améliorer la structure et le balisage HTML</h3> <p>Une bonne structure aide les moteurs à comprendre le sujet et la hiérarchie de l’information :</p> <ul> <li>une seule balise <strong>H1</strong> claire, reflétant le thème principal de la page ;</li> <li>des <strong>H2</strong> pour les grandes sections, et des <strong>H3</strong> ou <strong>H4</strong> pour les sous-parties, sans multiplication artificielle ;</li> <li>des <strong>titres descriptifs</strong>, qui résument réellement le contenu de la section au lieu d’empiler des mots-clés ;</li> <li>des <strong>paragraphes courts</strong>, aérés, pour améliorer la lisibilité sur mobile ;</li> <li>des <strong>listes à puces</strong> lorsque cela facilite la lecture d’éléments complexes ou séquentiels.</li> </ul> <p>L’usage pertinent de <strong>données structurées</strong> (par exemple pour les articles, produits, FAQ, événements, recettes, organisation) peut aussi aider les moteurs à interpréter les caractéristiques de votre contenu et à afficher des résultats enrichis, ce qui améliore potentiellement le taux de clic.</p> <h3 id="renforcer-l-experience-utilisateur">Renforcer l’expérience utilisateur</h3> <p>Pour que les signaux comportementaux jouent en votre faveur :</p> <ul> <li>assurez-vous que la <strong>promesse du titre</strong> et de la meta description correspond aux informations réellement présentes sur la page ;</li> <li>placez les <strong>informations essentielles</strong> dans la partie visible dès le chargement, de manière claire et directe ;</li> <li>limitez les interstitiels intrusifs, les pop-ups difficiles à fermer et les publicités qui masquent le contenu ;</li> <li>facilitez la <strong>navigation interne</strong> avec un menu logique, des liens contextuels vers des contenus connexes et un fil d’Ariane cohérent ;</li> <li>travaillez la <strong>lisibilité</strong> : contrastes suffisants, typographie adaptée, taille de police confortable, espaces suffisants entre les éléments cliquables.</li> </ul> <h3 id="soigner-la-performance-technique">Soigner la performance technique</h3> <p>Les caractéristiques techniques contribuent à la fois au confort de l’utilisateur et à la capacité d’exploration du moteur :</p> <ul> <li>optimisez les <strong>images</strong> (format adapté, compression, dimensions correctes) et le chargement des scripts ;</li> <li>mettez en place un <strong>système de cache</strong> et un hébergement dimensionné à votre trafic ;</li> <li>limitez les <strong>redirections en chaîne</strong> et corrigez les erreurs serveur récurrentes ;</li> <li>assurez-vous que le <strong>site est pleinement utilisable sur mobile</strong> (responsive design, menus adaptés, formulaires utilisables au doigt) ;</li> <li>surveillez régulièrement les <strong>erreurs d’exploration</strong> et les problèmes d’indexation.</li> </ul> <h3 id="developper-une-popularite-saine-et-durable">Développer une popularité saine et durable</h3> <p>Pour renforcer les signaux de popularité sans risques :</p> <ul> <li>publiez des contenus qui <strong>méritent réellement d’être cités</strong> : études de cas, données originales, analyses approfondies, ressources pratiques ;</li> <li>travaillez des <strong>partenariats éditoriaux légitimes</strong> (invités, interviews, contributions croisées) dans votre thématique ;</li> <li>évitez les techniques de <strong>liens artificiels</strong> à grande échelle, susceptibles de déclencher des filtres ou pénalités ;</li> <li>surveillez l’<strong>ancrage des liens</strong> : privilégiez un texte d’ancre naturel, varié, reflétant la réalité du contenu ciblé ;</li> <li>veillez à la <strong>cohérence de votre image de marque</strong> : profils sociaux officiels, mentions cohérentes, transparence sur l’éditeur du site.</li> </ul> <h3 id="renforcer-l-e-e-a-t-a-travers-le-site">Renforcer l’E‑E‑A‑T à travers le site</h3> <p>Pour transmettre des signaux de fiabilité et d’expertise :</p> <ul> <li>présentez clairement les <strong>auteurs</strong> des contenus, avec leur expérience et leurs domaines de compétence lorsqu’ils sont pertinents ;</li> <li>indiquez les <strong>sources principales</strong> lorsqu’un contenu repose sur des données, des études ou des textes réglementaires ;</li> <li>mettez en avant vos <strong>références et réalisations</strong> (clients, certifications, études, prix, publications) lorsqu’elles sont vérifiables ;</li> <li>assurez une <strong>transparence éditoriale</strong> : politique de confidentialité, mentions légales, informations de contact claires ;</li> <li>revoyez régulièrement les contenus sensibles (santé, finance, droit) pour corriger d’éventuelles imprécisions ou informations dépassées.</li> </ul> <h2 id="outils-et-ressources-pour-analyser-l-importance-des">Outils et ressources pour analyser l’importance des caractéristiques</h2> <p>Il est impossible de mesurer directement la feature importance de chaque signal interne du moteur. En revanche, plusieurs outils permettent d’observer des indicateurs clés et d’inférer, au moins partiellement, l’impact de certains changements.</p> <h3 id="outils-reconnus-pour-le-suivi-seo">Outils reconnus pour le suivi SEO</h3> <ul> <li><strong>Google Search Console</strong> : elle fournit des données sur les requêtes qui génèrent des impressions et des clics, la position moyenne, les problèmes d’indexation, les signaux techniques importants et certains enrichissements (données structurées, pages AMP, etc.). C’est l’outil de base pour relier des variations de trafic à des changements potentiels de visibilité sur des requêtes données.</li> <li><strong>Google Analytics ou solutions d’analyse d’audience équivalentes</strong> : elles permettent d’observer le comportement réel des visiteurs (temps passé, taux de rebond, pages par session, conversions) et de relier ces signaux aux caractéristiques du contenu ou de la page.</li> <li><strong>Outils d’audit SEO complets</strong> (par exemple Semrush, Ahrefs, Sistrix ou autres) : ils proposent des rapports techniques, des analyses de mots-clés, des études de concurrence, le suivi de positions et des indicateurs sur le profil de liens, utiles pour comprendre où se situent les forces et faiblesses de votre site.</li> </ul> <h3 id="ressources-educatives-pour-comprendre-les-mises-a-jour-et">Ressources éducatives pour comprendre les mises à jour et les signaux</h3> <ul> <li>La <strong>documentation officielle des moteurs</strong> (guides aux webmasters, blogs de produits, pages d’aide) explique les bonnes pratiques générales et signale les grandes orientations (par exemple : importance du contenu utile, lutte contre le spam, communication autour des Core Updates).</li> <li>Les <strong>guides pédagogiques spécialisés en SEO</strong> issus d’acteurs établis (agences expertes, blogs reconnus, communautés professionnelles) analysent les évolutions, partagent des études de cas et donnent des méthodes concrètes pour adapter sa stratégie.</li> <li>Les <strong>publications scientifiques et techniques</strong> sur la recherche d’information, le traitement du langage naturel, le ranking et le machine learning fournissent un cadre théorique pour comprendre comment des systèmes d’apprentissage automatiques peuvent combiner différents signaux et en ajuster l’importance.</li> </ul> <h2 id="faq">FAQ</h2> <h3 id="qu-est-ce-que-la-feature-importance-en-seo">Qu’est-ce que la Feature Importance en SEO ?</h3> <p>Par analogie avec le machine learning, la feature importance en SEO désigne l’<strong>importance relative de différentes caractéristiques</strong> d’une page ou d’un site dans le classement des résultats de recherche : contenu, structure, performance technique, liens, signaux d’expérience, réputation, etc. Contrairement aux modèles que l’on entraîne en interne et pour lesquels on peut mesurer précisément la contribution de chaque variable, la feature importance dans les moteurs de recherche ne peut être qu’<strong>estimée</strong> de l’extérieur, à partir de la communication officielle et de l’observation des résultats.</p> <h3 id="les-mises-a-jour-d-algorithmes-changent-elles-l-ordre-d">Les mises à jour d’algorithmes changent-elles l’ordre d’importance des caractéristiques ?</h3> <p>Oui, les <strong>mises à jour algorithmiques</strong> peuvent modifier le poids relatif des signaux. Certaines mises à jour renforcent l’importance de la qualité éditoriale, d’autres visent spécifiquement le spam de liens ou les contenus générés de faible valeur. Cependant, il reste toujours un <strong>socle stable</strong> de caractéristiques fondamentales : pertinence du contenu par rapport à la requête, accessibilité technique, expérience utilisateur décente et réputation globale du site.</p> <h3 id="peut-on-connaitre-la-ponderation-exacte-de-chaque-facteur">Peut-on connaître la pondération exacte de chaque facteur de classement ?</h3> <p>Non. Les moteurs de recherche ne publient ni la liste exhaustive des facteurs de classement, ni leur pondération. Les systèmes sont complexes, intégrant des centaines de signaux combinés par des modèles d’apprentissage automatique qui peuvent varier selon les requêtes. Les informations disponibles permettent de comprendre des <strong>principes directeurs</strong> et des familles de signaux importants, mais pas d’obtenir une « formule magique » chiffrée.</p> <h3 id="comment-adapter-sa-strategie-seo-aux-mises-a-jour-frequentes">Comment adapter sa stratégie SEO aux mises à jour fréquentes ?</h3> <p>Plutôt que de réagir à chaque mise à jour par des changements brusques et ponctuels, la meilleure approche consiste à :</p> <ul> <li>se concentrer sur les <strong>fondamentaux durables</strong> : qualité du contenu, expérience utilisateur, technique solide, popularité naturelle ;</li> <li>surveiller les <strong>tendances à long terme</strong> de son trafic organique, plutôt que de paniquer sur quelques jours ;</li> <li>analyser les <strong>pages gagnantes et perdantes</strong> lors d’une mise à jour, pour comprendre quels types de contenus semblent désormais mieux répondre aux critères de qualité ;</li> <li>intégrer la <strong>mise à jour et la consolidation régulière des contenus</strong> dans la stratégie éditoriale.</li> </ul> <h3 id="la-performance-technique-suffit-elle-a-bien-se-positionner">La performance technique suffit-elle à bien se positionner ?</h3> <p>Non. Une excellente performance technique sans contenu pertinent et de qualité ne permet pas de bien se positionner sur des requêtes concurrentielles. La technique est un <strong>facilitateur</strong> : elle permet aux moteurs d’explorer et d’indexer efficacement, et elle améliore l’expérience utilisateur. Mais les signaux de <strong>pertinence, de qualité éditoriale et de réputation</strong> restent centraux pour le classement.</p> <h3 id="les-liens-sont-ils-encore-importants-pour-le-referencement">Les liens sont-ils encore importants pour le référencement ?</h3> <p>Oui, les liens constituent toujours un <strong>signal significatif</strong> de recommandation et de popularité, surtout dans des environnements compétitifs. Toutefois, la tendance est à la <strong>prise en compte renforcée de la qualité et de la pertinence</strong> des liens, plutôt qu’à la simple quantité. Une stratégie SEO durable consiste à obtenir des liens naturels depuis des sources légitimes, plutôt qu’à recourir à des méthodes artificielles à court terme.</p> <h3 id="comment-prioriser-les-optimisations-quand-on-debute">Comment prioriser les optimisations quand on débute ?</h3> <p>Pour un site en phase de structuration ou de refonte, il est souvent pertinent de :</p> <ul> <li>commencer par une <strong>base technique saine</strong> : temps de chargement raisonnable, architecture claire, absence d’erreurs majeures ;</li> <li>puis développer des <strong>contenus de référence</strong> sur les sujets clés liés à vos offres ou à votre mission ;</li> <li>mettre en place un <strong>maillage interne logique</strong> pour relier les contenus et guider les utilisateurs ;</li> <li>enfin, travailler la <strong>visibilité et la popularité</strong> par des actions éditoriales, partenariales et de communication.</li> </ul> <h3 id="la-feature-importance-est-elle-un-outil-que-l-on-peut">La feature importance est-elle un outil que l’on peut calculer soi-même ?</h3> <p>On ne peut pas calculer directement la feature importance des signaux internes de Google, mais il est possible de <strong>modéliser ses propres données</strong> (par exemple les performances de différentes pages selon leurs caractéristiques) avec des techniques de machine learning pour identifier quels facteurs internes à votre site semblent le plus corrélés à la performance organique. Cela ne remplace pas la connaissance des bonnes pratiques SEO, mais peut aider à prioriser certaines actions spécifiques dans votre contexte.</p> <h2 id="conclusion-operationnelle">Conclusion opérationnelle</h2> <p>L’<strong>importance des caractéristiques</strong> en SEO n’est pas une liste figée de facteurs avec un poids exact, mais un cadre pour réfléchir à la manière dont les algorithmes de recherche évaluent et pondèrent différents signaux. En comprenant les familles de caractéristiques majeures – contenu, structure, expérience, technique, popularité, réputation – et en observant l’effet des mises à jour dans la durée, il est possible de construire une stratégie SEO robuste, capable de résister aux changements successifs d’algorithmes.</p> <p>Pour les professionnels comme pour les débutants, l’enjeu n’est pas de deviner au pourcentage près le poids de chaque facteur, mais de <strong>mettre en cohérence la stratégie éditoriale, technique et de marque</strong> avec ce qui constitue, de façon stable, la valeur ajoutée pour l’utilisateur final : une réponse fiable, claire, accessible et utile à ses besoins réels.</p> </body> </html> </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="algorithmes-et-mises-a-jour-feature-importance-importance"> <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 = 'algorithmes-et-mises-a-jour-feature-importance-importance'; // Charger les commentaires approuvés async function loadComments() { try { const response = await fetch(`/gestion-commentaires/get-comments.php?slug=${articleSlug}`); const data = await response.json(); const commentsList = document.getElementById('comments-list'); if (data.success && data.comments.length > 0) { commentsList.innerHTML = data.comments.map(comment => ` <div class="border-l-4 border-purple-600 pl-4 py-2"> <div class="flex items-center gap-2 mb-2"> <strong class="text-gray-900">${comment.name}</strong> <span class="text-sm text-gray-500">•</span> <span class="text-sm text-gray-500">${new Date(comment.date).toLocaleDateString('fr-FR')}</span> </div> <p class="text-gray-700">${comment.message}</p> </div> `).join(''); } else { commentsList.innerHTML = '<p class="text-gray-500 italic">Aucun commentaire pour le moment. Soyez le premier à commenter !</p>'; } } catch (error) { console.error('Erreur lors du chargement des commentaires:', error); } } // Gérer la soumission du formulaire document.getElementById('comment-form').addEventListener('submit', async function(e) { e.preventDefault(); const formData = { slug: articleSlug, name: document.getElementById('comment-name').value, email: document.getElementById('comment-email').value, message: document.getElementById('comment-message').value }; const submitBtn = this.querySelector('button[type="submit"]'); const originalText = submitBtn.innerHTML; submitBtn.disabled = true; submitBtn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Envoi en cours...'; try { const response = await fetch('/gestion-commentaires/submit-comment.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(formData) }); const result = await response.json(); const messageDiv = document.getElementById('comment-status'); if (result.success) { messageDiv.className = 'mt-4 p-4 bg-green-100 border border-green-400 text-green-700 rounded-lg'; messageDiv.textContent = 'Merci ! Votre commentaire a été soumis et sera publié après modération.'; messageDiv.classList.remove('hidden'); this.reset(); } else { messageDiv.className = 'mt-4 p-4 bg-red-100 border border-red-400 text-red-700 rounded-lg'; messageDiv.textContent = result.message || 'Une erreur est survenue. Veuillez réessayer.'; messageDiv.classList.remove('hidden'); } } catch (error) { const messageDiv = document.getElementById('comment-status'); messageDiv.className = 'mt-4 p-4 bg-red-100 border border-red-400 text-red-700 rounded-lg'; messageDiv.textContent = 'Erreur de connexion. Veuillez réessayer plus tard.'; messageDiv.classList.remove('hidden'); } finally { submitBtn.disabled = false; submitBtn.innerHTML = originalText; } }); // Charger les commentaires au chargement de la page loadComments(); </script> <footer class="bg-gray-950 text-gray-400 py-12"> <div class="container mx-auto px-6"> <div class="flex flex-col md:flex-row justify-between items-center"> <div class="mb-6 md:mb-0 flex items-start gap-4"> <img src="/images/logo.png" alt="Logo VRAIVEX" class="h-32 w-32 md:h-40 md:w-40 object-contain"> <div> <a href="#" class="text-2xl font-bold block"> <span class="gradient-text">VRAIVEX</span> </a> <p class="mt-2 text-sm">Automatisation, IA et SEO au service de la performance e-commerce</p> </div> </div> <div class="flex flex-col items-center md:items-end"> <div class="grid grid-cols-2 md:flex md:flex-wrap gap-3 md:space-x-6 mb-4 text-center md:text-right"> <a href="/#about" class="hover:text-white transition text-sm">À propos</a> <a href="/#services" class="hover:text-white transition text-sm">Services</a> <a href="/#prestations" class="hover:text-white transition text-sm">Prestations</a> <a href="/#bestsellers" class="hover:text-white transition text-sm">Best Sellers</a> <a href="/#realisations" class="hover:text-white transition text-sm">Réalisations</a> <a href="/#brands" class="hover:text-white transition text-sm">Nos Sites</a> <a href="/creation-site-ecommerce" class="hover:text-white transition text-sm">Création Sites</a> <a href="/seo-ecommerce" class="hover:text-white transition text-sm">SEO E-commerce</a> <a href="/partenaires" class="hover:text-white transition text-sm">Partenaires</a> <a href="/#contact" class="hover:text-white transition text-sm">Contact</a> </div> <p class="text-sm text-center md:text-right">© 2026 VRAIVEX. Tous droits réservés.</p> </div> </div> </div> </footer> <!-- Back to Top Button --> <button id="backToTop" class="fixed bottom-8 right-8 bg-gradient-to-r from-purple-600 to-blue-600 text-white p-4 rounded-full shadow-lg hover:shadow-xl transform hover:scale-110 transition-all duration-300 z-50 hidden"> <i class="fas fa-arrow-up text-xl"></i> </button> <script> // Header scroll effect window.addEventListener('scroll', function() { const header = document.getElementById('header'); if (window.scrollY > 100) { header.classList.add('header-scrolled'); } else { header.classList.remove('header-scrolled'); } }); // Smooth scrolling for anchor links document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function (e) { e.preventDefault(); document.querySelector(this.getAttribute('href')).scrollIntoView({ behavior: 'smooth' }); }); }); // Mobile menu toggle const mobileMenuButton = document.getElementById('mobileMenuButton'); const mobileMenu = document.getElementById('mobileMenu'); const menuIcon = document.getElementById('menuIcon'); if (mobileMenuButton && mobileMenu) { mobileMenuButton.addEventListener('click', function() { mobileMenu.classList.toggle('hidden'); // Toggle icon between bars and times if (mobileMenu.classList.contains('hidden')) { menuIcon.classList.remove('fa-times'); menuIcon.classList.add('fa-bars'); } else { menuIcon.classList.remove('fa-bars'); menuIcon.classList.add('fa-times'); } }); // Close menu when clicking on a link const mobileLinks = mobileMenu.querySelectorAll('a'); mobileLinks.forEach(link => { link.addEventListener('click', function() { mobileMenu.classList.add('hidden'); menuIcon.classList.remove('fa-times'); menuIcon.classList.add('fa-bars'); }); }); } // Brands Carousel const brandsCarousel = document.getElementById('brandsCarousel'); const brandsContainer = document.getElementById('brandsContainer'); const brandsPrevBtn = document.getElementById('brandsPrevBtn'); const brandsNextBtn = document.getElementById('brandsNextBtn'); const brandsPrevBtnMobile = document.getElementById('brandsPrevBtnMobile'); const brandsNextBtnMobile = document.getElementById('brandsNextBtnMobile'); if (brandsContainer && brandsCarousel) { let currentIndex = 0; const cards = brandsContainer.querySelectorAll('.brand-card'); const gap = 24; const cardsPerView = { mobile: 1, tablet: 2, desktop: 3, large: 4 }; function getCardsPerView() { const w = window.innerWidth; if (w >= 1280) return cardsPerView.large; if (w >= 1024) return cardsPerView.desktop; if (w >= 768) return cardsPerView.tablet; return cardsPerView.mobile; } function getCardWidth() { const cpv = getCardsPerView(); const cw = brandsCarousel.offsetWidth; return (cw - gap * (cpv - 1)) / cpv; } function updateCarousel() { const cpv = getCardsPerView(); const cardW = getCardWidth(); const maxIdx = Math.max(0, cards.length - cpv); currentIndex = Math.min(currentIndex, maxIdx); const offset = currentIndex * (cardW + gap); brandsContainer.style.transform = `translateX(-${offset}px)`; const atStart = currentIndex === 0; const atEnd = currentIndex >= maxIdx; [brandsPrevBtn, brandsPrevBtnMobile].forEach(function(btn) { if (btn) { btn.style.opacity = atStart ? '0.4' : '1'; btn.style.pointerEvents = atStart ? 'none' : 'auto'; } }); [brandsNextBtn, brandsNextBtnMobile].forEach(function(btn) { if (btn) { btn.style.opacity = atEnd ? '0.4' : '1'; btn.style.pointerEvents = atEnd ? 'none' : 'auto'; } }); if (document.getElementById('brandsCounter')) { document.getElementById('brandsCounter').textContent = (currentIndex + 1) + ' / ' + (maxIdx + 1); } } function nextSlide() { const cpv = getCardsPerView(); const maxIdx = Math.max(0, cards.length - cpv); if (currentIndex < maxIdx) { currentIndex++; updateCarousel(); } } function prevSlide() { if (currentIndex > 0) { currentIndex--; updateCarousel(); } } if (brandsNextBtn) brandsNextBtn.addEventListener('click', nextSlide); if (brandsPrevBtn) brandsPrevBtn.addEventListener('click', prevSlide); if (brandsNextBtnMobile) brandsNextBtnMobile.addEventListener('click', nextSlide); if (brandsPrevBtnMobile) brandsPrevBtnMobile.addEventListener('click', prevSlide); function setCardWidths() { const cardW = getCardWidth(); cards.forEach(function(card) { card.style.width = cardW + 'px'; card.style.minWidth = cardW + 'px'; card.style.flexShrink = '0'; }); } let touchStartX = 0; let touchEndX = 0; brandsCarousel.addEventListener('touchstart', function(e) { touchStartX = e.changedTouches[0].screenX; }, { passive: true }); brandsCarousel.addEventListener('touchend', function(e) { touchEndX = e.changedTouches[0].screenX; const diff = touchStartX - touchEndX; if (Math.abs(diff) > 50) { diff > 0 ? nextSlide() : prevSlide(); } }, { passive: true }); setCardWidths(); updateCarousel(); let resizeTimeout; window.addEventListener('resize', function() { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(function() { setCardWidths(); currentIndex = 0; updateCarousel(); }, 250); }); } </script> <script> // Header scroll effect window.addEventListener('scroll', function() { const header = document.getElementById('header'); if (window.scrollY > 50) { header.classList.add('header-scrolled'); } else { header.classList.remove('header-scrolled'); } }); // Scroll animations const observerOptions = { threshold: 0.1, rootMargin: '0px 0px -50px 0px' }; const observer = new IntersectionObserver(function(entries) { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('visible'); } }); }, observerOptions); // Observe all fade-in-up elements document.querySelectorAll('.fade-in-up').forEach(el => { observer.observe(el); }); // Smooth scroll for anchor links document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function (e) { e.preventDefault(); const target = document.querySelector(this.getAttribute('href')); if (target) { target.scrollIntoView({ behavior: 'smooth', block: 'start' }); } }); }); // Counter animation for stats function animateCounter(element, target, duration = 2000) { let start = 0; const increment = target / (duration / 16); const timer = setInterval(() => { start += increment; if (start >= target) { element.textContent = target + (element.textContent.includes('+') ? '+' : '') + (element.textContent.includes('K') ? 'K€' : ''); clearInterval(timer); } else { element.textContent = Math.floor(start) + (element.textContent.includes('+') ? '+' : '') + (element.textContent.includes('K') ? 'K€' : ''); } }, 16); } // Observe stats section const statsObserver = new IntersectionObserver(function(entries) { entries.forEach(entry => { if (entry.isIntersecting && !entry.target.classList.contains('animated')) { entry.target.classList.add('animated'); const statsCards = entry.target.querySelectorAll('.stats-card'); statsCards.forEach((card, index) => { setTimeout(() => { card.style.opacity = '0'; card.style.transform = 'translateY(20px)'; setTimeout(() => { card.style.transition = 'all 0.6s ease'; card.style.opacity = '1'; card.style.transform = 'translateY(0)'; }, 100); }, index * 100); }); } }); }, { threshold: 0.3 }); const statsSection = document.querySelector('section.bg-gradient-to-r'); if (statsSection) { statsObserver.observe(statsSection); } </script> <script> // Gestion du formulaire de contact const contactForm = document.getElementById('contact-form'); const formMessage = document.getElementById('form-message'); const submitBtn = document.getElementById('submit-btn'); if (contactForm) { contactForm.addEventListener('submit', async function(e) { e.preventDefault(); // Désactiver le bouton pendant l'envoi submitBtn.disabled = true; submitBtn.textContent = 'Envoi en cours...'; // Récupérer les données du formulaire const formData = new FormData(contactForm); try { // Vérifier que les données sont bien dans le FormData const formDataObj = { name: formData.get('name'), email: formData.get('email'), subject: formData.get('subject'), message: formData.get('message') }; console.log('Données du formulaire:', formDataObj); // Vérifier que tous les champs sont remplis if (!formDataObj.name || !formDataObj.email || !formDataObj.subject || !formDataObj.message) { formMessage.classList.remove('hidden'); formMessage.className = 'mb-6 p-4 rounded-lg bg-red-600 text-white'; formMessage.textContent = 'Veuillez remplir tous les champs du formulaire.'; submitBtn.disabled = false; submitBtn.textContent = 'Envoyer le message'; return; } // Essayer d'abord avec JSON (plus fiable) // Siça ne fonctionne pas, on essaiera avec FormData let response; try { // Méthode 1 : Envoyer en JSON (plus fiable selon les forums) response = await fetch('gestion-formulaire-contact/send-email-json.php', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(formDataObj) }); } catch (jsonError) { console.warn('Erreur avec JSON, essai avec FormData:', jsonError); // Méthode 2 : Fallback avec FormData response = await fetch('send-email.php', { method: 'POST', body: formData }); } // Lire le texte de la réponse d'abord pour déboguer const responseText = await response.text(); console.log('Réponse serveur:', responseText.substring(0, 500)); // Vérifier si la réponse est OK if (!response.ok) { // Essayer de parser le JSON d'erreur try { const errorResult = JSON.parse(responseText); // Afficher le message d'erreur du serveur directement à l'utilisateur formMessage.classList.remove('hidden'); formMessage.className = 'mb-6 p-4 rounded-lg bg-red-600 text-white'; formMessage.textContent = errorResult.message || `Erreur ${response.status}: ${response.statusText}`; submitBtn.disabled = false; submitBtn.textContent = 'Envoyer le message'; return; // Sortir de la fonction pour ne pas continuer } catch (e) { throw new Error(`Erreur HTTP ${response.status}: ${response.statusText}. Réponse: ${responseText.substring(0, 200)}`); } } // Vérifier si PHP n'est pas exécuté (le serveur renvoie le code PHP brut) if (responseText.trim().startsWith('<?php') || responseText.includes('<?php')) { console.error('ERREUR: PHP n\'est pas exécuté par le serveur. Le code PHP est renvoyé brut.'); console.error('Le serveur web n\'est pas configuré pour exécuter PHP.'); // Utiliser la solution de secours : sauvegarder dans localStorage const messageData = { name: formData.get('name'), email: formData.get('email'), subject: formData.get('subject'), message: formData.get('message'), timestamp: new Date().toISOString() }; // Sauvegarder dans localStorage comme solution de secours const savedMessages = JSON.parse(localStorage.getItem('vraivex_messages') || '[]'); savedMessages.push(messageData); localStorage.setItem('vraivex_messages', JSON.stringify(savedMessages)); // Afficher un message spécial formMessage.classList.remove('hidden'); formMessage.className = 'mb-6 p-4 rounded-lg bg-yellow-600 text-white'; formMessage.innerHTML = '⚠️ PHP n\'est pas configuré sur le serveur. Votre message aété sauvegardé localement. <br>Veuillez nous contacter directement à <strong>contact@vraivex.fr</strong> ou consulter les messages sauvegardés dans la console du navigateur.'; // Afficher les messages sauvegardés dans la console console.log('Messages sauvegardés localement:', savedMessages); console.log('Pour consulter les messages, tapez dans la console: JSON.parse(localStorage.getItem("vraivex_messages"))'); return; // Sortir de la fonction } // Essayer de parser le JSON let result; try { result = JSON.parse(responseText); } catch (parseError) { console.error('Erreur de parsing JSON:', parseError); console.error('Réponse reçue:', responseText.substring(0, 500)); throw new Error('Le serveur a renvoyé une réponse invalide. Vérifiez la console pour plus de détails.'); } // Afficher le message de résultat formMessage.classList.remove('hidden'); if (result.success) { formMessage.className = 'mb-6 p-4 rounded-lg bg-green-600 text-white'; formMessage.textContent = 'Message envoyé avec succès ! Nous vous répondrons dans les plus brefs délais.'; contactForm.reset(); } else { formMessage.className = 'mb-6 p-4 rounded-lg bg-red-600 text-white'; let errorMsg = result.message || 'Une erreur est survenue. Veuillez réessayer.'; // Afficher le message de debug en développement (à retirer en production) if (result.debug) { console.error('Erreur détaillée:', result.debug); } formMessage.textContent = errorMsg; } } catch (error) { formMessage.classList.remove('hidden'); formMessage.className = 'mb-6 p-4 rounded-lg bg-red-600 text-white'; // Message d'erreur plus détaillé pour le débogage let errorMsg = 'Une erreur est survenue lors de la communication avec le serveur. '; errorMsg += 'Veuillez réessayer plus tard ou nous contacter directement à contact@vraivex.fr'; // En mode développement, afficher plus de détails if (error.message) { console.error('Erreur détaillée:', error); console.error('Message:', error.message); console.error('Stack:', error.stack); } formMessage.textContent = errorMsg; } finally { // Réactiver le bouton submitBtn.disabled = false; submitBtn.textContent = 'Envoyer le message'; // Masquer le message après 5 secondes setTimeout(() => { formMessage.classList.add('hidden'); }, 5000); } }); } // Back to Top Button functionality const backToTopButton = document.getElementById('backToTop'); // Show/hide button based on scroll position window.addEventListener('scroll', () => { if (window.pageYOffset > 300) { backToTopButton.classList.remove('hidden'); } else { backToTopButton.classList.add('hidden'); } }); // Smooth scroll to top when clicked backToTopButton.addEventListener('click', () => { window.scrollTo({ top: 0, behavior: 'smooth' }); }); </script> </body> </html>