Boussole : piloter son référencement et ses avis Google
Boussole est un SaaS de pilotage SEO que je conçois et développe : il relie Google Search Console et les avis Google à un éditeur d’articles qui explique quoi corriger, au même endroit.
État : version 0.13.0, développée et validée en interne sur des données de démonstration. L’application n’est pas encore ouverte au public : aucun lien d’accès n’est donc proposé.
Contexte et problème résolu
Google Search Console fournit des chiffres bruts, difficiles à exploiter seuls. Les avis Google sont dispersés établissement par établissement. Et l’on rédige souvent des articles sans savoir précisément quoi corriger pour être mieux vu.
Boussole répond à ces trois besoins dans un même outil : sur quoi agir en premier pour gagner du trafic, où répondre aux avis, et comment mieux écrire ses articles. Elle s’adresse à une entreprise ou à une agence qui suit un ou plusieurs sites et établissements.
Comment ça fonctionne
- Module SEO : synchronisation quotidienne de Search Console avec jusqu’à 16 mois d’historique, comparaison dans le temps et indicateurs que la console ne calcule pas : « Quick Wins » (mots-clés en positions 4 à 8), « Quasi-podium » (positions 2 à 3), cannibalisation entre pages, opportunités non travaillées, marque et hors-marque. Exports CSV.
- Module Avis Google : avis de tous les établissements dans une boîte de réception, réponse publiée chez Google depuis l’outil, taux et délai de réponse, modèles de réponse, complétude des fiches, mise à jour en masse et publications.
- Module Éditeur SEO : rédaction ou amélioration d’un article avant publication, avec un score sur 100 détaillé par critère, un aperçu de l’extrait Google, les mots répétés et leurs synonymes, et une alerte si deux brouillons visent le même mot-clé. Boussole ne publie rien : le HTML se copie dans le CMS de son choix.
- Options d’interconnexion : webhooks sortants signés, API de lecture des statistiques (clé d’accès valable un an, lecture seule), export SFTP programmé et rapports par e-mail programmés.
Le score de l’éditeur est celui de Boussole, calculé par des règles lisibles : ce n’est ni une note de Google ni une promesse de classement. Aucune intelligence artificielle n’intervient dans les analyses.
Choix techniques et architecture
- Stack : API en Python 3.13 (FastAPI, SQLAlchemy et migrations Alembic) sur PostgreSQL, avec la table des données Search Console partitionnée par mois ; tâches asynchrones (Celery, Redis) pour la synchronisation quotidienne ; interface en Next.js 16 (Server Components), Tailwind CSS, shadcn/ui et Recharts.
- Isolation : chaque organisation ne voit que ses propres données. La règle est garantie côté serveur (jeton de session et couche d’accès aux données), jamais par l’interface, et vérifiée par des tests d’isolation entre deux organisations.
- Sécurité : mots de passe hachés, secrets chiffrés (jetons Google, identifiants SFTP), cookies de session stricts, import d’une page par adresse protégé contre les requêtes serveur détournées, serveur SFTP vérifié par son empreinte, webhooks signés, détection de secrets avant chaque commit.
- Déploiement par conteneurs : Docker Compose (proxy, base de données, cache, API, tâches planifiées, interface), reverse proxy Traefik ; en production, bases non exposées, réseaux séparés, limites de ressources, sauvegarde quotidienne avec rotation.
- Tests et qualité : tests unitaires, tests d’intégration sur PostgreSQL et Redis réels, tests de l’interface, parcours complet et audit d’accessibilité à 320 px dans un navigateur ; lint et typage stricts ; commits normalisés vérifiés automatiquement.
- Sobriété des dépendances : chaque dépendance est justifiée et auditée. Un audit des dépendances a ramené les paquets npm de 747 à 488 (de 105 à 78 en production), sans faille connue en production.
- API documentée : contrat OpenAPI versionné et vérifié par un test, avec Swagger UI et ReDoc.
Difficultés et enseignements
- Des données qui arrivent en retard : Google publie les données de Search Console avec deux à trois jours de décalage. La période par défaut se termine donc au dernier jour réellement disponible, pour éviter des courbes trompeuses.
- Des adresses qui ne passent pas dans un chemin : l’adresse d’une page contient des « / » que le proxy refuse lorsqu’ils sont encodés dans un chemin. Les paramètres passent donc dans la chaîne de requête.
- Des analyses lourdes : les calculs sont faits en SQL plutôt qu’avec une bibliothèque de traitement de données (retirée), et mesurés jusqu’à 100 000 mots-clés. Le suivi note déjà la piste suivante : des cumuls journaliers précalculés.
- Rester honnête sur ce qu’un score peut dire : l’éditeur affiche le score de Boussole, explique chaque critère et ne promet aucun classement.
- Le cycle de vie des données : suppression en cascade d’une organisation, avertissement puis suppression en cas d’inactivité prolongée, pour respecter le RGPD.
- Enseignement principal : écrire la spécification d’abord, puis les tests d’isolation dès les premières fonctionnalités, plutôt que de les ajouter après coup.
État d’avancement honnête
À ce jour, les trois modules (SEO, Avis Google, Éditeur SEO) et les options d’interconnexion sont réalisés et validés en interne.
Ce qui reste à faire avant une ouverture : valider la connexion avec de vrais comptes Google et un compte de paiement de test, tester la mesure de pages publiées avec une vraie clé, brancher le service d’envoi d’e-mails, faire valider juridiquement la politique de confidentialité et choisir le serveur. Aucune date n’est annoncée.
Ce que ça montre de mon travail
- Concevoir un SaaS multi-organisation de la spécification à l’exploitation, avec une isolation des données testée.
- Intégrer des API tierces (Google Search Console et Business Profile) en gérant les contraintes réelles : retards, quotas, consentements.
- Soigner la sécurité, le RGPD et l’accessibilité dès la conception.
- Documenter : guide d’utilisation, spécification, documentation technique et contrat d’API.
Un outil de pilotage à construire ?
Décrivez votre besoin en quelques lignes : je vous dis comment je peux vous aider.
