Publié le 1 mars 2026 SEO Technique

Quels plugins WordPress pour optimiser votre SEO en 2025 ?

Introduction

Optimiser un site WordPress pour le référencement naturel (SEO) est une tâche essentielle pour améliorer sa visibilité sur les moteurs de recherche. Les plugins WordPress jouent un rôle crucial dans cette optique en offrant des outils spécialisés pour améliorer le contenu, la structure et la performance technique du site. Avec plus de 59 000 plugins gratuits disponibles dans le répertoire officiel, et des milliers d’extensions premium sur des places de marché tierces, il est indispensable de savoir lesquels choisir et comment les utiliser intelligemment.

Cet article explore en détail les meilleurs plugins WordPress pour le SEO, en présentant leurs fonctionnalités, leurs points forts, leurs limites, ainsi que des conseils pratiques pour les configurer et les intégrer dans une stratégie SEO globale. Vous découvrirezégalement des outils complémentaires indispensables (performance, sécurité, données structurées, maillage interne, etc.) pour bâtir unécosystème WordPress réellement optimisé pour les moteurs de recherche.

Concepts clés

Avant de plonger dans la liste des meilleurs plugins WordPress pour le SEO, il est essentiel de comprendre quelques notions fondamentales et la manière dont ces extensions contribuent à l’optimisation globale d’un site web.

Qu’est-ce qu’un plugin WordPress ?

Un plugin WordPress est un module logiciel qui ajoute des fonctionnalités spécifiques à un site WordPress sans avoir à modifier le cœur du CMS. Un plugin peutêtre très simple (ajouter un bouton de partage social) ou très avancé (gérer un site e‑commerce complet ou une optimisation SEO poussée). Les plugins peuventêtre :

  • gratuits (version de base souvent suffisante pour débuter),
  • freemium (version gratuite limitée + version Pro payante),
  • premium uniquement (licence payante, souvent avec support dédié).

Pour garder un site performant et sécurisé, il est recommandé de limiter le nombre de plugins à ceux qui sont vraiment utiles, de privilégier les extensions régulièrement mises à jour et bien notées, et d’éviter les doublons de fonctionnalités.

Rôle des plugins dans le SEO

Les plugins WordPress pour le SEO ont pour objectif d’aider les propriétaires de sites et les rédacteurs à respecter les bonnes pratiques recommandées par les moteurs de recherche. Ils ne remplacent pas une stratégie de contenu solide, mais ils facilitent la mise en œuvre de nombreux aspects techniques etéditoriaux, comme :

  • l’optimisation des balises </code> et des méta‑descriptions pour chaque page,</li> <li>la génération de sitemaps XML et parfois HTML,</li> <li>la gestion des balises canoniques,</li> <li>l’optimisation des balises Open Graph et Twitter Cards pour le partage social,</li> <li>la création de redirections 301 et la gestion des erreurs 404,</li> <li>l’analyse de lisibilité et d’optimisation des mots‑clés dans le contenu,</li> <li>l’intégration de données structurées (schema.org),</li> <li>le pilotage des fichiers <code>robots.txt</code> et <code>.htaccess</code> (pour certains).</li> </ul> <p>En complément, d’autres plugins — non strictement « SEO » — contribuent fortement au référencement naturel, par exemple les extensions de cache, de compression d’images, de sécurité, ou encore les constructeurs de pages qui permettent de créer une architecture claire et ergonomique.</p> <h3 id="seo-technique-seo-de-contenu-et-seo-off-page">SEO technique, SEO de contenu et SEO off‑page</h3> <p>Les plugins WordPress interviennent principalement sur :</p> <ul> <li><strong>le SEO technique</strong> : structure du site, indexation, temps de chargement, mobile‑friendly, données structurées, gestion des erreurs,</li> <li><strong>le SEO on‑page (contenu)</strong> : choix des mots‑clés, optimisation des titres, intertitres, densité de mots‑clés, maillage interne, balises ALT,</li> <li><strong>le SEO off‑page</strong> de manière indirecte : rendu plus partageable, amélioration de l’expérience utilisateur, ce qui favorise les liens naturels.</li> </ul> <p>Un bon plugin SEO vous accompagne dans la plupart de ces dimensions, mais aucun outil ne peut compenser un contenu pauvre ou une stratégie inexistante. Les extensions sont des leviers, pas une solution magique.</p> <h2 id="les-meilleurs-plugins-wordpress-pour-le-seo-en-2025">Les meilleurs plugins WordPress pour le SEO en 2025</h2> <p>Il existe aujourd’hui un grand nombre de plugins SEO populaires, installés chacun sur plusieurs millions de sites WordPress. Voici une sélection détaillée des principaux outils à envisager, avec leurs forces et leurs cas d’usage.</p> <h3 id="yoast-seo">Yoast SEO</h3> <p><strong>Yoast SEO</strong> est l’un des plugins SEO les plus connus et les plus utilisés au monde. Il est particulièrement adapté aux débutants comme aux utilisateurs intermédiaires grâce à son interface claire et à ses assistants d’optimisation.</p> <p>Fonctionnalités principales :</p> <ul> <li>édition des balises <strong>title</strong> et <strong>meta description</strong> pour chaque page et article,</li> <li>prévisualisation de l’extrait dans les résultats Google,</li> <li>analyse de lisibilité (phrases trop longues, voix passive, structure de paragraphes),</li> <li>analyse de l’optimisation d’un mot‑clé cible par contenu (occurrences, titre, H1, URL, méta description),</li> <li>génération automatique d’un <strong>sitemap XML</strong>,</li> <li>gestion des balises canoniques,</li> <li>intégration des données de base pour les réseaux sociaux (Open Graph, Twitter Cards),</li> <li>gestion avancée des taxonomies et des archives (catégories, tags, auteur, date).</li> </ul> <p>Yoast SEO existe en version gratuite très complète et en version premium, qui ajoute notamment la gestion de redirections, l’optimisation pour plusieurs mots‑clés, et des suggestions automatiques de liens internes.</p> <h3 id="all-in-one-seo-aioseo">All in One SEO (AIOSEO)</h3> <p><strong>All in One SEO</strong> est une alternative robuste à Yoast SEO, souvent choisie pour son interface simple et son approche orientée « checklist ».</p> <p>Fonctionnalités clés :</p> <ul> <li>configuration de base guidée via un assistant d’installation,</li> <li>édition des balises SEO pour chaque type de contenu,</li> <li>génération de sitemaps XML (classiques, images, vidéos),</li> <li>intégration simplifiée avec Google Analytics et consoles de recherche,</li> <li>outils de redirections et détection des erreurs 404 (en version Pro),</li> <li>gestion des données structurées pour les articles, produits, FAQ, etc.</li> </ul> <p>AIOSEO est particulièrement intéressant pour les sites qui souhaitent une configuration rapide, tout en conservant la possibilité d’affiner les réglages plus tard.</p> <h3 id="rank-math">Rank Math</h3> <p><strong>Rank Math</strong> s’impose comme l’un des plugins SEO les plus complets pour WordPress. Il met l’accent sur l’automatisation et l’intégration avec des fonctionnalités avancées dès la version gratuite.</p> <p>Parmi ses atouts :</p> <ul> <li>interface moderne avec configuration guidée,</li> <li>gestion très fine des balises <code>title</code> et <code>meta</code>,</li> <li>optimisation pour plusieurs mots‑clés dès la version gratuite,</li> <li>module de <strong>données structurées</strong> (schema) pour les articles, produits, FAQ, How‑To, recettes, événements, etc.,</li> <li>intégration de la Search Console et suivi des positions pour certains mots‑clés (dans les plans adaptés),</li> <li>compatibilité avec WooCommerce (SEO pour fiches produits, catégories, etc.),</li> <li>modules optionnels pour activer uniquement les fonctionnalités nécessaires et alléger le site.</li> </ul> <p>Rank Math convient bien aux utilisateurs qui ont déj à quelques notions de SEO et souhaitent disposer d’un seul plugin central couvrant la majorité des besoins.</p> <h3 id="seo-press">SEO Press</h3> <p><strong>SEO Press</strong> est un plugin de référencement d’origine française, très apprécié pour sa combinaison de simplicité, de performance et de prix compétitif.</p> <p>Points forts :</p> <ul> <li>version gratuite déj à très complète (titles, metas, sitemaps, Open Graph, etc.),</li> <li>version Pro plus abordable que certains concurrents,</li> <li>intégration des données structurées préconfigurées,</li> <li>gestion des redirections et des erreurs 404,</li> <li>pas de publicité intrusive dans le back‑office,</li> <li>souci de performance et de légèreté du code.</li> </ul> <p>Pour les utilisateurs francophones ou les agences qui gèrent de nombreux sites, SEO Press est une excellente alternative aux solutions historiques.</p> <h3 id="the-seo-framework">The SEO Framework</h3> <p><strong>The SEO Framework</strong> est un plugin plus discret mais très performant, orienté vers l’automatisation et le respect des consignes des moteurs de recherche.</p> <p>Caractéristiques principales :</p> <ul> <li>configuration très rapide grâce à des réglages par défaut bien pensés,</li> <li>performance optimisée, avec un code léger,</li> <li>fonctionnalités avancées via des extensions (modules pour mots‑clés, redirections, etc.),</li> <li>version gratuite suffisante pour beaucoup de projets,</li> <li>mise en avant des bonnes pratiques « white hat ».</li> </ul> <p>Ce plugin convient aux utilisateurs techniques qui souhaitent un outil efficace, peu bavard, sanséléments superflus.</p> <h2 id="bonnes-pratiques-pour-utiliser-les-plugins-seo-wordpress">Bonnes pratiques pour utiliser les plugins SEO WordPress</h2> <p>Avoir un bon plugin ne suffit pas : c’est la manière dont il est configuré et utilisé qui fera réellement la différence sur le long terme. Voici les principales bonnes pratiques à suivre.</p> <h3 id="1-ne-pas-multiplier-les-plugins-seo-concurrents">1. Ne pas multiplier les plugins SEO concurrents</h3> <p>Il est fortement déconseillé d’installer plusieurs plugins qui remplissent exactement le même rôle principal (par exemple Yoast SEO et Rank Math en même temps). Cela peut entraîner :</p> <ul> <li>des <strong>conflits</strong> de balises (plusieurs <code>title</code> ou méta‑descriptions),</li> <li>des sitemaps en doublon,</li> <li>des problématiques de performances,</li> <li>des difficultés de maintenance à long terme.</li> </ul> <p>Choisissez un plugin SEO principal, configurez‑le correctement, puis désactivez les fonctions en doublon dans les autres extensions (constructeurs de pages, thèmes, plugins sociaux, etc.).</p> <h3 id="2-optimiser-le-contenu-avec-l-aide-des-plugins">2. Optimiser le contenu avec l’aide des plugins</h3> <p>L’optimisation du contenu reste l’élément central du référencement naturel. Les plugins SEO vous aident, mais ne décident pas à votre place. Pour chaque article ou page stratégique :</p> <ul> <li>définissez un <strong>mot‑clé principal</strong> et des expressions secondaires associées,</li> <li>rédigez un <strong>titre accrocheur</strong> intégrant le mot‑clé de façon naturelle,</li> <li>utilisez une <strong>méta‑description</strong> claire, orientée bénéfices pour l’utilisateur,</li> <li>structurez le contenu avec des <strong>sous‑titres H2, H3</strong> contenant vos expressions clés,</li> <li>rédigez des paragraphes lisibles, aérés, avec des phrases ni trop longues ni trop complexes,</li> <li>ajoutez des <strong>liens internes</strong> vers vos autres contenus pertinents.</li> </ul> <p>Les indicateurs fournis par des plugins comme Yoast SEO ou Rank Math (pastilles vertes, scores, recommandations) doiventêtre vus comme des guides, non comme des objectifs absolus. L’expérience de lecture de l’utilisateur doit rester prioritaire.</p> <h3 id="3-ameliorer-la-structure-du-site">3. Améliorer la structure du site</h3> <p>Une structure de site web claire et logique facilite le crawl des robots et l’expérience utilisateur. Les plugins peuvent vous aider à :</p> <ul> <li>générer une <strong>carte de site (sitemap XML)</strong> et s’assurer qu’elle est bien accessible,</li> <li>contrôler quelles taxonomies (catégories, étiquettes, archives) sont indexées,</li> <li>gérer les <strong>liens permanents</strong> (permalinks) de manière cohérente,</li> <li>mettre en place un <strong>fil d’Ariane</strong> (breadcrumbs), souvent proposé par les plugins SEO.</li> </ul> <p>Une arborescence simple, hiérarchisée (rubriques > sous‑rubriques > contenus) combinée à un bon maillage interne aide les moteurs de recherche à comprendre quels contenus sont les plus importants.</p> <h3 id="4-creer-du-contenu-de-qualite-et-regulier">4. Créer du contenu de qualité et régulier</h3> <p>Les plugins peuvent faciliter la publication, la mise en forme et le partage du contenu, mais la <strong>qualitééditoriale</strong> reste le facteur clé :</p> <ul> <li>contenu original, utile, qui répond à une intention de recherche claire,</li> <li>articles suffisamment longs lorsque le sujet le justifie,</li> <li>mise à jour régulière des contenus obsolètes,</li> <li>intégration d’images, de vidéos, de schémas pour enrichir l’expérience de lecture.</li> </ul> <p>En complément, certains plugins de blocs Gutenberg (par exemple, pour les tableaux, les FAQ, les tableaux de prix) permettent d’améliorer la lisibilité et la structure, ce qui peut favoriser les extraits enrichis (rich snippets) dans les résultats de recherche.</p> <h3 id="5-surveiller-les-performances-et-la-compatibilite">5. Surveiller les performances et la compatibilité</h3> <p>Chaque plugin ajoute du code à votre site. Un excès d’extensions ou une mauvaise configuration peut ralentir le chargement, ce qui est défavorable au SEO. Il est donc important de :</p> <ul> <li>tester le temps de chargement avant et après l’installation de plugins,</li> <li>désinstaller les extensions inutilisées,</li> <li>éviter les plugins dupliquant des fonctionnalités déj à intégrées au thème ou au constructeur de pages,</li> <li>mettre à jour régulièrement tous les plugins pour bénéficier des optimisations et correctifs de sécurité.</li> </ul> <h2 id="plugins-complementaires-indispensables-pour-un-bon-seo">Plugins complémentaires indispensables pour un bon SEO</h2> <p>En plus des plugins dédiés au SEO « éditorial », certains types d’extensions sont devenus quasi indispensables pour maximiser les performances et la sécurité d’un site WordPress, deuxéléments qui influencent directement ou indirectement le référencement.</p> <h3 id="plugins-de-cache-et-d-optimisation-des-performances">Plugins de cache et d’optimisation des performances</h3> <p>La <strong>vitesse de chargement</strong> est un critère important pour les moteurs de recherche et pour les utilisateurs. Plusieurs plugins WordPress permettent d’améliorer significativement les performances :</p> <ul> <li><strong>WP Rocket</strong> (premium) : plugin de cache très complet et simple à configurer. Il gère la mise en cache des pages, la minification des fichiers CSS/JS, le préchargement du cache, la compression GZIP, le lazy load des images et vidéos, et diverses optimisations pour améliorer les scores Core Web Vitals.</li> <li><strong>W3 Total Cache</strong> (gratuit + options Pro) : solution de cache avancée, très configurable, adaptée aux sites plus techniques ou aux environnements complexes.</li> <li><strong>LiteSpeed Cache</strong> : excellent choix si votre hébergeur utilise un serveur LiteSpeed. Il combine cache serveur et nombreuses optimisations front‑end.</li> </ul> <p>Un plugin de cache bien configuré, associé à un hébergement de qualité, peut réduire de manière spectaculaire le temps de chargement de vos pages et améliorer les signaux envoyés aux moteurs de recherche.</p> <h3 id="plugins-d-optimisation-d-images">Plugins d’optimisation d’images</h3> <p>Les images non optimisées sont souvent responsables d’un poids de page tropélevé. Les plugins dédiés à la <strong>compression et au redimensionnement automatique</strong> des images sont donc précieux.</p> <ul> <li><strong>Imagify</strong> : permet de compresser automatiquement les images au moment de leur upload, de convertir en WebP, et de redimensionner les fichiers trop volumineux.</li> <li><strong>Smush</strong> : autre solution populaire pour compresser les images et activer le lazy load.</li> </ul> <p>En combinant un plugin d’optimisation d’images avec un bon système de cache, vous améliorez l’expérience utilisateur et donc vos chances de mieux vous positionner.</p> <h3 id="plugins-de-redirection-et-gestion-des-erreurs-404">Plugins de redirection et gestion des erreurs 404</h3> <p>Les erreurs 404 fréquentes ou des changements d’URL non gérés peuvent nuire au SEO. Il est donc important de mettre en place des <strong>redirections 301</strong> lorsque vous supprimez ou renommez des contenus.</p> <ul> <li><strong>Redirection</strong> : plugin gratuit très répandu pour gérer les redirections 301, suivre les erreurs 404 et organiser les règles par groupes.</li> <li>Certains plugins SEO premium (Yoast, AIOSEO, SEO Press, Rank Math) intègrentégalement des modules de redirection avancés.</li> </ul> <p>Un bon suivi des erreurs 404 permet de corriger rapidement les liens cassés et d’éviter de perdre du trafic ou du PageRank interne.</p> <h3 id="plugins-pour-le-maillage-interne-et-la-navigation">Plugins pour le maillage interne et la navigation</h3> <p>Le <strong>maillage interne</strong> est un levier très puissant et parfois sous‑exploité pour le SEO. Plusieurs plugins aident à l’automatiser ou à mieux l’organiser :</p> <ul> <li>modules de suggestions de liens internes intégrés à certains plugins SEO (par exemple Yoast SEO Premium),</li> <li>plugins de <strong>table des matières</strong> (TOC) qui ajoutent des ancres internes sur les longs articles, améliorant ainsi la navigation et parfois l’affichage dans Google,</li> <li>plugins de fil d’Ariane (ou intégrés au thème) pour clarifier la structure des pages.</li> </ul> <p>Un bon maillage interne renforce la pertinence des pages importantes et aide les robots à explorer votre site plus efficacement.</p> <h3 id="plugins-de-securite">Plugins de sécurité</h3> <p>La sécurité n’est pas directement un critère SEO, mais un site piraté, infecté par des malwares ou redirigeant les visiteurs vers du contenu malveillant peut perdre rapidement sa visibilité. Des extensions comme Wordfence, iThemes Security ou d’autres solutions de sécurité aident à :</p> <ul> <li>bloquer les tentatives de connexion malveillantes,</li> <li>scanner le site à la recherche de fichiers infectés,</li> <li>durcir certains réglages (mots de passe, permissions, etc.).</li> </ul> <p>Un site sain, fiable et disponible est une base indispensable pour une stratégie SEO durable.</p> <h2 id="outils-et-ressources-externes-indispensables">Outils et ressources externes indispensables</h2> <p>Les plugins WordPress ne suffisent pas pour piloter votre stratégie SEO. Certains outils fournis par les moteurs de recherche ou des services tiers sont incontournables.</p> <h3 id="google-search-console">Google Search Console</h3> <p><strong>Google Search Console</strong> est un outil gratuit qui permet de surveiller et d’optimiser la présence de votre site dans les résultats de Google. Ses principales fonctionnalités incluent :</p> <ul> <li>suivi des performances (clics, impressions, CTR, position moyenne) par page et par requête,</li> <li>inspection d’URL pour vérifier l’indexation et détecter d’éventuels problèmes,</li> <li>gestion et envoi du <strong>sitemap XML</strong> généré par votre plugin SEO,</li> <li>signalement des problèmes de couverture (pages exclues, erreurs d’exploration),</li> <li>rapports sur l’ergonomie mobile, les Core Web Vitals et les données structurées,</li> <li>détection d’actions manuelles ou de problèmes de sécurité.</li> </ul> <p>Certains plugins SEO proposent une intégration directe avec Google Search Console pour récupérer des données et les afficher dans le tableau de bord WordPress.</p> <h3 id="google-analytics-outils-d-analytique">Google Analytics / outils d’analytique</h3> <p><strong>Google Analytics</strong> et d’autres solutions d’analytique (Matomo, Plausible, etc.) vous permettent de comprendre comment les visiteurs interagissent avec votre site :</p> <ul> <li>trafic global et par source (référencement naturel, réseaux sociaux, liens externes, etc.),</li> <li>comportement sur le site (pages vues, temps passé, taux de rebond, conversions),</li> <li>performances par page ou par groupe de contenus.</li> </ul> <p>Des plugins dédiés facilitent l’intégration du code de suivi sur WordPress, mais il est souvent préférable de limiter les fonctionnalités superflues pour préserver les performances.</p> <h3 id="outils-de-test-de-performance-et-d-ergonomie">Outils de test de performance et d’ergonomie</h3> <p>Pour aller plus loin dans l’optimisation, vous pouvez utiliser :</p> <ul> <li>des outils de test de vitesse pour analyser le temps de chargement,</li> <li>des outils d’audit SEO permettant de détecter des problèmes techniques,</li> <li>des validateurs de données structurées pour vérifier que vos balises schema.org sont correctement implémentées (souvent mises en place via vos plugins SEO).</li> </ul> <h2 id="faq">FAQ</h2> <h3 id="quels-sont-les-meilleurs-plugins-wordpress-pour-le-seo-nbsp">Quels sont les meilleurs plugins WordPress pour le SEO ?</h3> <p>Les meilleurs plugins WordPress pour le SEO en 2025 incluent notamment :</p> <ul> <li><strong>Yoast SEO</strong> : idéal pour débuter, interface pédagogique, analyse de lisibilité et de mots‑clés.</li> <li><strong>All in One SEO (AIOSEO)</strong> : très complet et simple à configurer, intégration avec de nombreux services.</li> <li><strong>Rank Math</strong> : riche en fonctionnalités avancées, gestion fine des données structurées, bonne intégration avec WooCommerce.</li> <li><strong>SEO Press</strong> : solution légère et puissante, particulièrement appréciée dans l’écosystème francophone.</li> <li><strong>The SEO Framework</strong> : performant, discret, orienté automatisation et bonnes pratiques.</li> </ul> <h3 id="pourquoi-utiliser-un-plugin-wordpress-pour-le-seo-nbsp">Pourquoi utiliser un plugin WordPress pour le SEO ?</h3> <p>Un plugin WordPress pour le SEO permet de centraliser et de simplifier de nombreuses tâches :</p> <ul> <li>configurer facilement les balises SEO pour chaque page,</li> <li>générer automatiquement un sitemap XML correctement formaté,</li> <li>gérer les redirections etéviter les erreurs 404,</li> <li>contrôler l’indexation de certaines sections du site,</li> <li>améliorer l’affichage des pages lors du partage sur les réseaux sociaux.</li> </ul> <p>Sans plugin, toutes ces opérations devraientêtre réalisées manuellement via des fichiers de configuration ou des développements sur‑mesure, ce qui serait beaucoup plus complexe et chronophage.</p> <h3 id="comment-choisir-un-plugin-wordpress-pour-le-seo-nbsp">Comment choisir un plugin WordPress pour le SEO ?</h3> <p>Pour choisir un plugin SEO adapté à votre site, prenez en compte les critères suivants :</p> <ul> <li><strong>niveau d’expérience</strong> : certains plugins sont pensés pour les débutants (assistant de configuration, guides intégrés), d’autres pour des utilisateurs plus techniques,</li> <li><strong>fonctionnalités nécessaires</strong> : gestion des données structurées avancées, redirections, intégration WooCommerce, multisite, etc.,</li> <li><strong>performance</strong> : impact limité sur le temps de chargement, code optimisé,</li> <li><strong>fréquence des mises à jour</strong> et réputation du développeur,</li> <li><strong>support</strong> : documentation claire, assistance réactive en cas de problème,</li> <li><strong>coût</strong> : comparer les versions gratuites et payantes, ainsi que le modèle d’abonnement.</li> </ul> <p>L’important est de choisir un outil que vous comprenez, que vousêtes capable de configurer correctement et que vous pourrez maintenir sereinement sur la durée.</p> <h3 id="combien-de-plugins-wordpress-peut-on-installer-sans-risque-pour-le-seo-nbsp">Combien de plugins WordPress peut‑on installer sans risque pour le SEO ?</h3> <p>Il n’existe pas de nombre maximum de plugins universellement valable. Certains sites fonctionnent très bien avec plus de 40 plugins, d’autres commencent à montrer des signes de ralentissement avec seulement une dizaine d’extensions lourdes. Le plus important est de :</p> <ul> <li>éviter les doublons de fonctionnalités,</li> <li>désinstaller les plugins inutilisés,</li> <li>choisir des extensions fiables, bien codées, régulièrement mises à jour,</li> <li>tester régulièrement les performances et l’impact de chaque nouvelle extension.</li> </ul> <h3 id="les-plugins-suffisent-ils-pour-etre-bien-reference-nbsp">Les plugins suffisent‑ils pourêtre bien référencé ?</h3> <p>Non, les plugins ne suffisent pas. Ils sont des <strong>facilitateurs techniques</strong> etéditoriaux, mais le cœur du référencement reste :</p> <ul> <li>une stratégie de contenu pertinente,</li> <li>une réelle valeur ajoutée pour l’utilisateur,</li> <li>une bonne expérience de navigation (mobile, vitesse, ergonomie),</li> <li>un profil de liens naturels de qualité.</li> </ul> <p>Les plugins vous aident à appliquer les bonnes pratiques, à gagner du temps et à limiter les erreurs techniques, mais ils ne remplaceront jamais un travailéditorial et marketing solide.</p> <h2 id="conclusion">Conclusion</h2> <p>L’utilisation de <strong>plugins WordPress pour le SEO</strong> est une stratégie efficace pour améliorer la visibilité d’un site web sur les moteurs de recherche, à condition de les sélectionner et de les configurer avec soin. Des extensions comme Yoast SEO, All in One SEO, Rank Math, SEO Press ou The SEO Framework fournissent une base solide pour gérer les aspects essentiels du référencement : balises, sitemaps, données structurées, redirections, intégration avec les outils de mesure.</p> <p>Cependant, les plugins SEO ne représentent qu’un pilier d’unécosystème plus large. Les outils de performance (WP Rocket, LiteSpeed Cache, plugins d’optimisation d’images), de sécurité, de maillage interne et d’analytique jouent un rôle complémentaire majeur. Combinés à une stratégie de contenu claire, à une structure de site logique et à une attention constante portée à l’expérience utilisateur, ils permettent de tirer pleinement parti du potentiel de WordPress pour le référencement naturel.</p> <p>En résumé, choisissez un <strong>plugin SEO principal</strong> adapté à vos besoins, entourez‑le de quelques extensions clés pour la performance et la sécurité, et concentrez le reste de vos efforts sur la qualité de vos contenus et de votre site. C’est cette combinaisonéquilibrée qui fera réellement la différence dans vos positions sur les moteurs de recherche.</p> </div> <!-- Articles similaires --> <div class="mt-12 pt-8 border-t border-gray-200"> <h2 class="text-2xl font-bold text-gray-900 mb-6 flex items-center gap-2"> <i class="fas fa-newspaper text-purple-600"></i> Articles similaires </h2> <div class="grid gap-4"> <a href="/blog/quels-plugins-wordpress-pour-optimiser-votre-site-en-2025/" class="block p-4 bg-white rounded-lg border border-gray-200 hover:border-purple-300 hover:shadow-md transition"> <span class="text-purple-600 font-semibold hover:text-purple-800">Quels Plugins WordPress pour Optimiser Votre Site en 2025 ?</span> </a> <a href="/blog/top-plugins-wordpress-ia-pour-le-seo-et-la-creation-de-contenu-en-2025/" class="block p-4 bg-white rounded-lg border border-gray-200 hover:border-purple-300 hover:shadow-md transition"> <span class="text-purple-600 font-semibold hover:text-purple-800">Top plugins WordPress IA pour le SEO et la création de contenu en 2025</span> </a> <a href="/blog/seo-wordpress-avec-l-ia-guide-complet-2025/" class="block p-4 bg-white rounded-lg border border-gray-200 hover:border-purple-300 hover:shadow-md transition"> <span class="text-purple-600 font-semibold hover:text-purple-800">SEO WordPress avec l’IA : guide complet 2025</span> </a> </div> </div> <!-- CTA Section --> <div class="mt-12 pt-8 border-t border-gray-200"> <div class="bg-gradient-to-r from-purple-600 to-blue-600 rounded-xl p-8 text-center text-white"> <h3 class="text-2xl font-bold mb-4">Besoin d'aide avec votre SEO ?</h3> <p class="mb-6 text-purple-100">Notreéquipe d'experts peut vous aider à optimiser votre site e-commerce</p> <div class="flex flex-col sm:flex-row gap-4 justify-center"> <a href="/seo-ecommerce" class="bg-white text-purple-600 px-8 py-3 rounded-lg font-semibold hover:bg-purple-50 transition inline-block"> Découvrir nos services SEO </a> <a href="/#contact" class="bg-purple-800 text-white px-8 py-3 rounded-lg font-semibold hover:bg-purple-900 transition inline-block"> Nous contacter </a> </div> </div> </div> </article> <!-- Section Commentaires --> <div class="mt-12 max-w-4xl mx-auto bg-white rounded-2xl shadow-xl p-8 md:p-12"> <h2 class="text-3xl font-bold text-gray-900 mb-6 flex items-center gap-3"> <i class="fas fa-comments text-purple-600"></i> Commentaires </h2> <!-- Liste des commentaires approuvés --> <div id="comments-list" class="mb-8 space-y-6"> <!-- Les commentaires approuvés seront chargés ici via JavaScript --> </div> <!-- Formulaire de commentaire --> <div class="border-t border-gray-200 pt-8"> <h3 class="text-xl font-semibold text-gray-900 mb-4">Laisser un commentaire</h3> <form id="comment-form" class="space-y-4"> <input type="hidden" id="article-slug" value="quels-plugins-wordpress-pour-optimiser-votre-seo-en-2025"> <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 = 'quels-plugins-wordpress-pour-optimiser-votre-seo-en-2025'; // 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>