On a récupéré un jour un client qui découvrait, via la Search Console, une chute de 30 % de clics sur ses meilleures pages. Son outil de suivi de positions payant, lui, affichait des courbes stables depuis deux mois. La raison était simple : le suivi était paramétré sur un moteur desktop en français depuis Paris, alors que sa vraie audience venait à 70 % de mobiles en régions. L’outil ne mentait pas, il répondait à une question que personne n’avait posée. Ce jour-là, on a ressorti les vieux scripts maison, ceux qui ne cachent rien derrière une jolie UI. Parce qu’un tracker de positions dont vous ne maîtrisez pas les paramètres de collecte ne vaut pas mieux qu’un indicateur de sentiment dans un tableur.
L’approche qu’on va détailler ici est un héritage direct de feu SeoMiocheTool, un projet open-source en PHP/MySQL qui permettait de lancer ses propres audits de positionnement sans débourser un euro. À l’époque, on déposait un script sur un serveur mutualisé, on lui donnait une liste de mots-clés, et il crachait un tableau de rangs avec un code couleur. Le code est obsolète, mais la philosophie est plus pertinente que jamais : posséder son outil de suivi, c’est posséder la vérité sur ce qui se passe dans les SERP pour vos pages.
Pourquoi un outil propriétaire vous donnera toujours une vision tronquée
Les services SaaS de suivi de positions ont un business model basé sur le volume de mots-clés. Plus vous en suivez, plus vous payez. Conséquence : ils agrègent les requêtes, mutualisent les IP de scraping, et introduisent des mécanismes de cache pour limiter les coûts d’API. Résultat, ce que vous voyez dans l’interface n’est pas une position mesurée à l’instant T pour votre marché précis, mais une estimation interpolée sur un snapshot daté de plusieurs heures, parfois d’une journée, et souvent sur un datacenter standardisé. Quand on travaille sur des requêtes localisées (« plombier Lyon 3 », « coiffeur pas cher Marseille »), l’écart entre le rang mesuré par l’outil et le classement réel vu par un utilisateur physique peut dépasser dix positions.
Construire son propre tracker ne résout pas tous les problèmes de précision – Google reste Google – mais ça vous donne un contrôle total sur trois leviers que les SaaS vous imposent sans discussion : la géolocalisation exacte de la sonde, la fréquence réelle des mesures (pas de cache qui saute un relevé critique), et la transparence sur les délais entre deux crawls.
Stack moderne : on remplace le PHP/MySQL par Python et SQLite
L’original tournait avec une base MySQL, un fichier config.php et un script run.php qu’on déclenchait manuellement. En 2026, on peut faire plus léger, plus maintenable, et surtout plus facile à faire tourner dans un environnement conteneurisé. Notre choix pour le tracker qu’on utilise en interne chez Responsive Mind : Python 3.12 avec httpx pour les requêtes, et SQLite pour stocker les résultats. Pas de serveur de base, pas d’Apache, on emballe le tout dans un Dockerfile de 15 lignes.
Pourquoi c’est utile ? Parce qu’on peut lancer le tracker depuis un Raspberry Pi à la maison ou depuis un VPS à 5 € par mois, sans licence, sans limite de mots-clés. L’installation ressemble à :
- Cloner le dépôt (le projet s’appelle toujours SeoMiocheTool, nouvelle branche)
- Créer un environnement virtuel et installer les dépendances
- Définir un fichier
sites.yamlqui liste les domaines, les mots-clés, le moteur et la langue - Lancer
python -m tracker --site mon-ecommerce
L’outil boucle sur les mots-clés, interroge Google avec un délai aléatoire entre chaque requête, parse le DOM pour extraire la position et l’URL réelle, et écrit le tout dans une base SQLite horodatée. En une après-midi, on a un historique structuré exploitable. Ceux que le parsing HTML rebute peuvent accélérer le développement avec un assistant de code dans l’IDE ; on a justement comparé les deux approches dans notre retour sur Claude Code versus Cursor IDE. C’est le genre de micro-projet où un LLM bien intégré fait gagner deux heures.
Ne vous faites pas bannir avant d’avoir le premier résultat
⚠️ Attention : scraper les SERP sans précaution, c’est envoyer la même signature que les outils de scraping black hat. Google détecte les patterns en quelques dizaines de requêtes.
Il faut impérativement :
- Utiliser une IP résidentielle fixe ou une rotation limitée, pas un proxy public partagé
- Espacer les requêtes de 30 à 60 secondes, avec un jitter aléatoire
- Simuler un User-Agent récent et cohérent (mobile ou desktop selon le suivi souhaité)
- Ne jamais dépasser 200 requêtes par jour depuis une même IP sur le même domaine Google
On intègre ces règles dans un middleware léger au sein du script. En cas de CAPTCHA, le tracker interrompt la session et logge l’erreur. On préfère une analyse partielle qui s’arrête proprement qu’une IP blacklistée pour 24 heures.
Dernier point critique : le tracker n’a strictement rien à voir avec les Core Web Vitals, mais l’infrastructure qui l’héberge, elle, doit répondre vite. Si votre dashboard de suivi met trois secondes à charger, vous allez le délaisser. On a couvert les leviers pour y remédier dans notre guide d’optimisation des Core Web Vitals. Un outil interne qui rame, c’est un outil qu’on n’utilise plus.
Interpréter les résultats sans se faire piéger par le bruit
Le tableau de positions que génère le tracker est un point de départ, pas une fin. La tentation, c’est de scruter les variations quotidiennes et de s’alarmer dès qu’on passe de la 3e à la 5e place. Erreur. Sur des requêtes à fort volume, la volatilité à court terme est normale : les tests A/B, les flux d’actualité, les changements de datacenter introduisent un bruit qui peut atteindre trois ou quatre positions d’un jour sur l’autre.
Ce qu’on regarde, ce sont les tendances sur sept jours glissants, croisées avec les dates de déploiement du site. Si le LCP d’une page produit passe de 1,8 s à 3,2 s le 3 mai et que la position médiane chute de 4 à 11 le 6 mai, le lien de cause à effet est assez clair. On a systématisé ce croisement en important les données de notre outil de suivi dans un dashboard React ; pour gérer proprement les flux de données sans faire sauter l’état à chaque mise à jour, on a adopté Zustand. Le détail de ce choix est dans notre article sur le state management avec Zustand. Un store léger, des sélecteurs performants, et on peut afficher la corrélation positions/LCP sans ralentir l’interface.
Un piège classique : confondre l’URL trackée avec la page qui rank. Le tracker remonte souvent des pages secondaires pour une requête donnée, surtout si le site a une pagination ou des facettes. On filtre les résultats avec un diff automatique qui alerte si l’URL classée sort du périmètre attendu. Une fiche produit orpheline qui se met à ranker sur une requête stratégique, c’est une opportunité à exploiter, mais aussi un signal que votre maillage interne dysfonctionne.
Pourquoi le suivi de positions reste indispensable en 2026, malgré les critiques
Certains disent que le ranking n’est plus une métrique fiable parce que la SERP est devenue un millefeuille de résultats enrichis, de PAA, de featured snippets. C’est juste, mais c’est exactement pour ça que le suivi brut est encore plus nécessaire. Si vous ne mesurez pas la présence de vos pages dans cet espace de plus en plus fragmenté, vous ne pouvez pas quantifier l’effet d’un déploiement technique sur votre visibilité réelle.
Notre tracker enregistre, en plus de la position, le type de résultat SERP (classic, snippet, video, image, local pack). On peut ainsi mesurer l’évolution de la part de clics potentiels au-delà du simple rang. Une position 1 en lien bleu ne vaut pas la même chose qu’une position 1 volée par un carrousel de vidéos. Avec des données historiques, on peut objectiver des décisions de netlinking ou de restructuration de contenu.
Les outils gratuits ou maison ne remplacent pas une analyse stratégique, mais ils évitent de naviguer à l’aveugle en se fiant à des moyennes fournies par des tiers. La première fois qu’on a vu notre script maison détecter une chute de 40 positions sur un mot-clé clé suite à un deploiement en staging oublié, on a su que l’investissement initial d’une demi-journée de dev valait largement un abonnement mensuel.
Questions fréquentes
Le suivi de positions en local pack nécessite-t-il une approche différente ?
Oui, et c’est un excellent cas d’usage pour un tracker maison. Les outils généralistes peinent à restituer le classement dans le pack de 3 résultats sur une géolocalisation fine. En paramétrant la sonde avec des coordonnées GPS précises et un rayon cohérent avec votre zone de chalandise, vous obtenez une mesure fiable que peu de SaaS livrent sans surcoût.
Est-ce que l’automatisation du suivi ne risque pas de déclencher une pénalité Google ?
Le suivi de positions n’a aucun impact sur le classement du site que vous auditez. Google ne pénalise pas les sites cibles d’un scraping externe. En revanche, c’est votre IP de scraping qui peut être bloquée ou servir des CAPTCHA. D’où l’importance des contraintes de fréquence et de signature réseau détaillées plus haut.
Faut-il enregistrer aussi les données de rich snippets et de PAA dans la base de données ?
Oui, c’est même une extension que nous recommandons après la première version fonctionnelle. Un champ JSON par relevé permet de stocker la présence d’un featured snippet à votre contenu, ou le classement dans les questions « Les internautes demandent aussi ». Ces informations, croisées avec vos performances dans la Search Console, donnent une vision beaucoup plus dense de votre occupation SERP réelle.