Vous publiez du contenu, vous optimisez vos pages, et pourtant vous ne savez pas si ChatGPT, Claude ou Perplexity citent votre site lorsqu’un prospect pose une question dans votre secteur. Le GEO (Generative Engine Optimization) est encore largement aveugle pour la plupart des PME françaises : aucun outil gratuit ne surveille automatiquement votre visibilité dans les réponses des IA. La bonne nouvelle ? Un script Python de quelques dizaines de lignes suffit à construire votre propre tracker GEO, sans abonnement, sans dépendance à un SaaS.
En résumé : Ce tutoriel vous guide pas à pas pour créer un script Python qui interroge l’API OpenAI ou Claude sur une liste de requêtes cibles, détecte automatiquement si votre domaine est cité dans les réponses, et consigne tout dans un fichier CSV exploitable. Durée estimée : 45 minutes. Prérequis : Python 3.10+, une clé API, et un éditeur de code.
Étape 1 — Préparer votre environnement Python
Avant d’écrire une seule ligne de code, installez les dépendances nécessaires. Ouvrez votre terminal et exécutez :
pip install openai anthropic pandas python-dotenv
Créez ensuite un fichier .env à la racine de votre projet pour stocker vos clés API de façon sécurisée :
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxxxxx
Ne commitez jamais ce fichier sur GitHub. Ajoutez .env à votre .gitignore. Cette précaution évite une fuite de clé qui pourrait générer des coûts non maîtrisés sur votre compte.
Étape 2 — Constituer votre liste de requêtes GEO
Le cœur de votre tracker, c’est la liste des questions que vos prospects posent réellement aux IA génératives. Créez un fichier queries.csv avec deux colonnes : requete et secteur.
Exemples concrets selon votre secteur :
- Organisme de formation : « Quelle est la meilleure formation Qualiopi en management à Bordeaux ? », « Comment choisir un organisme de formation certifié RNCP ? »
- Cabinet d’avocats : « Quel avocat spécialisé en droit du travail contacter à Bordeaux ? », « Comment se défendre face à un licenciement abusif ? »
- PME locale : « Quelle agence web SEO accompagne les PME à Bordeaux ? », « Comment améliorer le référencement d’une TPE en 2025 ? »
Visez entre 20 et 50 requêtes pour un premier cycle de tracking. Au-delà, le coût API devient non négligeable. Pour un cabinet juridique ou un cabinet d’avocats souhaitant améliorer sa visibilité sur les IA, 30 requêtes couvrent déjà les principaux axes de pratique.
Étape 3 — Écrire le script de tracking
Voici le script complet, commenté ligne par ligne :
import os
import csv
import datetime
import pandas as pd
from openai import OpenAI
from dotenv import load_dotenv
# Chargement des variables d'environnement
load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# Paramètres à personnaliser
DOMAIN = "votredomaine.fr" # Votre domaine à surveiller
MODEL = "gpt-4o" # Modèle utilisé
QUERIES_FILE = "queries.csv"
OUTPUT_FILE = "geo_results.csv"
def check_citation(response_text, domain):
"""Vérifie si le domaine est cité dans la réponse."""
return domain.lower() in response_text.lower()
def query_llm(question):
"""Interroge le LLM et retourne la réponse textuelle."""
response = client.chat.completions.create(
model=MODEL,
messages=[
{"role": "system", "content": "Tu es un assistant qui répond à des questions factuelles."},
{"role": "user", "content": question}
],
max_tokens=500,
temperature=0.3 # Basse température pour des réponses stables
)
return response.choices[0].message.content
def run_tracker():
"""Fonction principale du tracker GEO."""
queries_df = pd.read_csv(QUERIES_FILE)
results = []
for _, row in queries_df.iterrows():
question = row["requete"]
secteur = row.get("secteur", "Non défini")
print(f"Interrogation : {question[:60]}...")
response_text = query_llm(question)
cited = check_citation(response_text, DOMAIN)
results.append({
"date": datetime.datetime.now().strftime("%Y-%m-%d"),
"requete": question,
"secteur": secteur,
"cite": "OUI" if cited else "NON",
"extrait_reponse": response_text[:300]
})
results_df = pd.DataFrame(results)
results_df.to_csv(OUTPUT_FILE, index=False, encoding="utf-8-sig")
taux = results_df[results_df["cite"] == "OUI"].shape[0] / len(results_df) * 100
print(f"nTaux de citation : {taux:.1f}% ({results_df[results_df['cite'] == 'OUI'].shape[0]}/{len(results_df)} requêtes)")
print(f"Résultats sauvegardés dans {OUTPUT_FILE}")
if __name__ == "__main__":
run_tracker()
La variable temperature=0.3 est délibérément basse : elle réduit la variabilité des réponses entre deux exécutions, ce qui rend votre suivi dans le temps plus fiable.
Étape 4 — Adapter le script à l’API Claude (Anthropic)
Si vous souhaitez tracker votre visibilité sur Claude plutôt que sur ChatGPT, remplacez la fonction query_llm par cette version :
import anthropic
client_claude = anthropic.Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
def query_llm_claude(question):
"""Version Claude du tracker GEO."""
message = client_claude.messages.create(
model="claude-opus-4-5",
max_tokens=500,
messages=[{"role": "user", "content": question}]
)
return message.content[0].text
Pour une couverture complète, faites tourner les deux versions en parallèle et comparez les taux de citation selon le modèle. Un office notarial cherchant à apparaître dans les réponses IA sur des requêtes comme « notaire spécialisé en succession à Bordeaux » gagnera à surveiller au moins deux modèles différents.
Étape 5 — Automatiser l’exécution hebdomadaire
Un tracker manuel n’a que peu de valeur. L’intérêt réside dans le suivi dans le temps. Sous Linux/macOS, ajoutez une tâche cron pour exécuter le script chaque lundi matin :
0 8 * * 1 cd /chemin/vers/votre/projet && python geo_tracker.py >> logs/geo_tracker.log 2>&1
Sous Windows, utilisez le Planificateur de tâches. Chaque exécution génère une nouvelle ligne dans votre CSV avec la date du jour. En quelques semaines, vous disposez d’une courbe de progression de votre taux de citation GEO.
Pour aller plus loin, vous pouvez connecter le CSV à Google Sheets via l’API Google Sheets, ou importer les données dans Looker Studio pour une visualisation automatique.
Étape 6 — Interpréter les résultats et agir
Le CSV brut ne suffit pas. Voici comment lire vos données :
- Taux de citation global sous 5% : Votre contenu n’est pas encore assimilé par les LLM. Priorité à la création de contenu factuel, structuré, avec des données vérifiables.
- Taux entre 5% et 20% : Vous apparaissez sur quelques requêtes. Identifiez lesquelles et renforcez ces pages.
- Taux au-dessus de 20% : Votre autorité thématique est reconnue. Travaillez l’extension vers des requêtes adjacentes.
Pour un organisme de formation, les requêtes autour des certifications (Qualiopi, RNCP, CPF) sont souvent les plus compétitives dans les réponses IA. Si vous travaillez sur la visibilité digitale d’un organisme de formation, notre approche du référencement SEO pour organismes de formation intègre désormais cette dimension GEO.
Exemples sectoriels concrets
Cabinet d’avocats : Un cabinet spécialisé en droit des affaires à Bordeaux a testé 25 requêtes sur ChatGPT. Résultat initial : 0 citation. Après 3 mois de production de contenu structuré (pages pratique, FAQ juridiques, articles de fond), le taux est passé à 12%. Les requêtes citées étaient systématiquement celles où le cabinet disposait d’une page dédiée avec des données factuelles précises.
Organisme de formation : Un OF spécialisé en management a lancé le tracker sur 40 requêtes. Il a découvert que Claude citait son catalogue sur 3 requêtes, mais que GPT-4o ne le mentionnait jamais. L’analyse a révélé que ses fiches formation manquaient de données chiffrées (durée, taux de satisfaction, coût moyen) que les LLM privilégient dans leurs réponses. Si vous gérez un site de formation sous WordPress, la structuration du contenu est directement liée à votre présence en ligne en tant qu’organisme de formation.
Résultats attendus selon le profil
| Profil | Taux initial moyen | Taux après 3 mois | Levier principal |
|---|---|---|---|
| PME locale sans blog | 0–2% | 5–10% | Création de contenu factuel |
| Organisme de formation | 2–8% | 10–20% | Structuration des fiches formation |
| Cabinet d’avocats | 0–5% | 8–18% | Pages pratique + FAQ juridiques |
| Agence / prestataire B2B | 3–10% | 15–25% | Études de cas + données chiffrées |
Ces fourchettes sont indicatives et basées sur des observations terrain. Elles varient fortement selon la concurrence sectorielle et la qualité du contenu existant.
FAQ — Tracker GEO Python
Combien coûte l’utilisation de l’API OpenAI pour ce tracker ?
Avec GPT-4o, comptez environ 0,005 $ par requête (500 tokens en sortie). Pour 50 requêtes hebdomadaires, le coût est inférieur à 1,50 € par mois. Sur Claude Opus, le tarif est légèrement supérieur. Dans tous les cas, le coût reste marginal comparé à un abonnement SaaS GEO, qui démarre généralement autour de 99 $/mois pour les outils spécialisés comme Profound ou Otterly.
Le script fonctionne-t-il avec Perplexity AI ?
Perplexity propose une API compatible OpenAI. Il suffit de modifier le paramètre base_url dans l’initialisation du client : OpenAI(api_key=..., base_url="https://api.perplexity.ai") et d’utiliser un modèle Perplexity (ex. sonar-pro). La logique de détection de citation reste identique. Notez que Perplexity cite davantage de sources explicites, ce qui facilite la détection.
Comment détecter des citations partielles ou des reformulations de mon domaine ?
La détection basique par in ne capture pas les reformulations. Pour aller plus loin, ajoutez une liste de variantes dans votre fonction check_citation : nom de marque, noms des auteurs, titres d’articles spécifiques. Vous pouvez aussi utiliser la bibliothèque fuzzywuzzy pour une détection approximative. Cette approche est particulièrement utile pour les cabinets d’avocats dont le nom de marque peut être orthographié différemment.
Quelle fréquence d’exécution est recommandée ?
Une exécution hebdomadaire est un bon équilibre entre coût API et fraîcheur des données. Les LLM grand public sont mis à jour tous les quelques mois, donc une fréquence quotidienne n’apporte pas de valeur supplémentaire significative. En revanche, exécutez le tracker après chaque publication majeure de contenu pour mesurer l’impact à moyen terme.
Ce tracker remplace-t-il un outil GEO professionnel ?
Non. Ce script couvre la détection de citation brute. Les outils pro comme Profound, Otterly ou SearchGPT Tracker ajoutent la comparaison concurrentielle, l’analyse sémantique des réponses, le suivi multi-modèles automatisé et des alertes. Ce tracker DIY est idéal pour démarrer, comprendre les mécanismes du GEO et produire un premier jeu de données avant d’investir dans un outil payant. Pour une refonte de site orientée GEO, il constitue un excellent outil de benchmark initial.
Si vous souhaitez aller plus loin dans votre stratégie de référencement sur les IA génératives sans gérer la partie technique en interne, notre équipe spécialisée en SEO et GEO peut vous accompagner sur l’audit, la stratégie de contenu et le suivi des performances. Contactez-nous pour en savoir plus.