seo-aeo-audit — audit de la visibilité moteur de recherche + moteur de réponse, puis livre un plan
Une seule mission : examiner un site réel, prouver ce qui ne va pas avec des preuves, et remettre un plan priorisé de modifications qui couvre la recherche classique (Google, Yandex, Bing) et les moteurs de réponse (AI Overviews / AI Mode, ChatGPT, Perplexity, Claude, Copilot, Gemini, Alice AI).
Ce que cette compétence ne fait pas : rédiger le contenu, construire les pages, acheter des liens. Elle s'arrête à un diagnostic vérifié et à un plan exécutable.
Non-négociables
- Preuve ou silence. Chaque constatation porte : ce que vous avez observé, où (
URL,fichier:ligne, nom du rapport), la valeur observée et la date. Ne signalez jamais une constatation que vous n'avez pas vérifiée sur ce site. "Les bonnes pratiques disent" n'est pas une preuve. - Étiquetez le niveau de preuve de chaque recommandation (voir references/evidence-tiers.md) :
CONFIRMÉ(documenté par le moteur ou reproduit sur ce site) ·ÉTUDE(données multisites publiées) ·TERRAIN(rapport de cas unique) ·HYPOTHÈSE. Ne laissez jamais une HYPOTHÈSE surpasser un blocage CONFIRMÉ. - Diagnostiquez avant de prescrire. Aucune correction n'entre dans le plan tant que sa cause n'est pas localisée. "Ajouter un schéma" n'est pas un diagnostic.
- Refusez la liste des mythes. Voir "Garde des mythes" ci-dessous — recommander ceux-ci gaspille le budget du client et est un défaut, pas une attention.
- Ne recommandez jamais de tactiques trompeuses. Le cloaking, les réseaux de consensus fabriqués, la manipulation des avis, l'abus de déréférencement de concurrents et l'usurpation de signaux de clic restent hors du plan. Ils n'apparaissent dans cette compétence que dans references/threats-and-defense.md, en tant qu'éléments à détecter et contre lesquels se défendre.
- Indiquez ce que vous n'avez pas pu vérifier. Une connexion GSC manquante est une lacune dans le rapport, pas une omission silencieuse.
- Ne mélangez jamais mesuré et supposé. Lorsqu'un livrable contient les deux — un CSV de netlinking le fait toujours — une colonne
sourceles sépare et les cellules de volume d'une ligne non mesurée restent vides, pas à zéro. Un0se lit "mesuré, pas de demande" ; un vide se lit "personne n'a vérifié". La distinction est cruciale dans un travail exécuté par quelqu'un d'autre sur un budget. - Connaissez l'angle mort de chaque instrument, et mentionnez-le dans le résultat. Les règles 1 et 7 régissent ce que vous écrivez ; elles ne voient pas un outil qui mélange ou omet avant même que vous regardiez. Deux arrivent constamment. Une récupération statique ne peut pas voir le JSON-LD que le CMS injecte avec JavaScript, donc "aucun schéma trouvé" est une constatation fausse sur tout site Yoast/RankMath/AIOSEO —
scripts/page_audit.pyimprime l'avertissement à côté de chaque inventaire de schéma, et l'absence n'est signalable qu'après une vérification de rendu. GA4 avec modélisation du consentement renvoie un comportement observé et estimé dans un seul nombre — voir references/measurement.md J1 pour les trois conditions d'activation, l'indicateur visible et la solution de repli basée sur l'observation seule. La règle se généralise : avant que le silence d'un instrument devienne une constatation, établissez que l'instrument aurait pu voir la chose.
Étape 0 — Détecter le mode, ne jamais demander deux fois
Inspectez d'abord, puis agissez. Dans l'ordre :
- Lisez
docs/seo/(ou le chemin nommé par l'utilisateur). Si un audit précédent existe, cette exécution est un ré-audit : faites la différence avec lui et commencez par ce qui a changé. - Établissez ce que vous pouvez atteindre : le site en direct, une URL de préproduction,
robots.txt,sitemap.xml, l'accès à Search Console / Bing Webmaster / analytics, une exportation de crawl (Screaming Frog, Sitebulb), les journaux serveur, tous les outils MCP connectés (Ahrefs, GSC, analytics, un crawler MCP, ou le Prowl MCP pour les données concurrentielles et de demande en masse sans abonnement par fournisseur). Testez l'accès, ne le présumez pas. Un serveur connecté ne signifie pas qu'il fonctionne : les niveaux d'API limitent les points de terminaison, et les jetons ont des portées plus étroites que le tableau de bord ne le suggère. Sondez l'appel que chaque source est censée fournir avant de planifier autour d'elle, et enregistrez ce qui est revenu — "connecté mais renvoiePlan insuffisant" est une constatation dont le prochain audit a besoin. - Choisissez le périmètre avec l'utilisateur uniquement si la réponse change le travail : site entier, un modèle/section, une question ("pourquoi le trafic a-t-il chuté en mai"), ou une extraction de netlinking — cibles, mots-clés et ancres pour un prestataire. Celle-ci est un livrable plutôt qu'un diagnostic : lisez references/linkbuilding.md quand c'est la demande. Cela fonctionne avec ou sans Search Console.
- Rapportez l'état en trois lignes — entrées disponibles, entrées manquantes, périmètre — puis commencez. Suggérez exactement une action suivante à la fin de chaque exécution.
scripts/preflight.py effectue la moitié automatisable de cette étape et signale quelle porte indépendante une défaillance a touchée — Search Console, l'API GSC et PageSpeed renvoient toutes 403 pour des raisons différentes. Lisez references/preflight.md pour savoir exactement ce qu'il sonde et ce qu'il vous laisse (Bing/Yandex, analytics, journaux serveur, exportations de crawl et chaque outil MCP). Un pré-contrôle vert n'est pas une étape couverte.
# Plugin Claude Code : ${CLAUDE_PLUGIN_ROOT} se développe dans le contenu de la compétence.
SKILL_DIR="${CLAUDE_PLUGIN_ROOT}/skills/seo-aeo-audit"
# Tout autre canal : le répertoire de base que le harnais nomme lorsqu'il charge cette
# compétence — le répertoire dans lequel se trouve ce SKILL.md. Confirmez avant de vous y fier :
ls "$SKILL_DIR/scripts/preflight.py"
Aucun fichier ou répertoire de ce type ici n'est pas une fonctionnalité manquante et pas une raison pour continuer en silence. Cela signifie que les six instruments sont inaccessibles, donc chaque vérification qu'ils auraient faite tombe au barreau le plus bas de l'échelle de preuve — et le barreau d'une constatation plafonne son niveau. Dites-le dans le statut en trois lignes ; un audit qui devient silencieusement manuel a changé la valeur de ses conclusions (non-négociable #6).
python3 "$SKILL_DIR/scripts/preflight.py" --site sc-domain:example.com --origin https://example.com
Règles d'accès : lecture seule par défaut. Ne soumettez jamais de formulaires, ne demandez jamais d'indexation, ne désavouez jamais de liens et ne modifiez jamais une propriété en direct sans approbation explicite dans cette session ; ce sont des actions tournées vers l'extérieur.
Étape 1 — Référence avant les opinions
Enregistrez, avec les dates, pour que toute affirmation ultérieure puisse être mesurée par rapport à elle :
- clics organiques / impressions / position moyenne par pays et appareil, 12 mois (GSC + Bing), et la fenêtre de baisse ou de plateau si elle existe ;
- nombre d'URL indexées vs publiées par modèle (
site:est un test de fumée, le rapport Pages GSC est le nombre) ; - pages des 20 meilleurs revenus ou conversions et leurs positions actuelles ;
- référence de surface IA : exécutez l'ensemble de prompts de marque et de catégorie de references/aeo-geo.md sur chaque moteur que vous pouvez atteindre, et enregistrez les réponses textuellement ;
- quels crawlers IA récupèrent réellement le site (journaux serveur ; DNS inversé à confirmation directe pour filtrer les usurpateurs) et quels référents IA apparaissent dans les analytics ;
- la chronologie des mises à jour : alignez les dates de chaque changement dans la courbe avec references/algorithm-updates.md avant de former une hypothèse sur une cause.
Quand il n'y a aucun accès propriétaire, dites-le dans le statut en trois lignes et rabattez-vous sur ce qu'un index tiers peut établir : pour quoi le domaine se classe aujourd'hui, quelle est la taille de son profil de liens par rapport à un ensemble concurrentiel dimensionné, et si ses expressions cibles ont une demande mesurable (references/prowl-mcp.md). Cette référence est plafonnée à ÉTUDE et ne peut pas répondre "pourquoi cette page n'est-elle pas indexée" — mais elle suffit pour distinguer un démarrage à froid d'un déclin, et ceux-ci nécessitent des plans opposés.
Si le site revendique une baisse de trafic, séparez d'abord l'échec de rapport de l'échec de classement : un rapport GSC figé épingle les clics à une date tandis qu'un véritable coup continue de produire de nouveaux points en baisse. Recoupez les sessions GA4, les journaux serveur et un tracker de classement indépendant avant de diagnostiquer une cause algorithmique.
Étape 2 — Les dix pistes
Exécutez chaque piste qui est dans le périmètre. Chacune a son propre fichier de référence avec les vérifications concrètes, les pièges actuels de 2026 et les preuves à capturer.
| # | Piste | Répond à | Référence |
|---|---|---|---|
| A | Accès et économie d'indexation | Les bots peuvent-ils récupérer, rendre et se permettre ceci ? Où le budget de crawl est-il brûlé ? | technical-checks.md |
| B | Canonicalisation et duplication | Quelle URL est canonique, et le moteur est-il d'accord — hreflang inclus ? | technical-checks.md |
| C | Architecture et équité des liens | Les pages monétisées reçoivent-elles de l'autorité, de la profondeur et de la fréquence de crawl ? | architecture-and-equity.md |
| D | Intention et adéquation SERP | Chaque page correspond-elle à la SERP, et les pages se cannibalisent-elles ? | intent-and-content.md + onpage-checks.md |
| E | Valeur du contenu | Une raison de se classer que l'IA ne peut pas reproduire ? | intent-and-content.md + ranking-model.md |
| F | Extractibilité et AEO/GEO | Un moteur de réponse peut-il le récupérer, le lire et le citer ? | aeo-geo.md |
| G | Consensus d'entité et de marque | Les modèles connaissent-ils la marque, de manière cohérente, et la nomment-ils ? | entity-and-brand.md |
| H | Expérience, conversion et attribution | Tâche terminée ici ou renvoyée ? Convertie, et mesurée ? | experience-signals.md + demand-and-conversion.md |
| I | Risque et menaces | Pénalités, détournements, injections, déréférencements. | threats-and-defense.md |
| J | Mesure | Quelqu'un pourra-t-il dire si le plan a fonctionné ? | measurement.md |
Discover ne fait pas partie des dix pistes, et ce n'est pas non plus une partie de la piste A. Il a son propre passage de classement, sa propre porte (deux métabalises, sans lesquelles aucune carte ne s'affiche du tout) et sa propre courbe de fraîcheur, donc un site pour lequel Discover est une source de trafic importante a besoin de references/discover.md exécuté comme onzième passage — et un site pour lequel ce n'est pas le cas peut l'ignorer complètement. Vérifiez le rapport GSC Discover avant de décider : la référence a été expédiée accessible uniquement depuis la liste en bas de ce fichier, ce qui signifie qu'un agent travaillant les pistes dans l'ordre ne l'a jamais ouverte.
Avant tout diagnostic de déclin, exécutez le protocole d'alignement des dates et de réponse aux mises à jour dans references/algorithm-updates.md — "une mise à jour principale nous a touchés" n'est pas une constatation, et la moitié des pannes GSC documentées ont coïncidé avec des déploiements.
Chaque piste a deux moitiés : le travail de diagnostic (ce qui ne va pas et pourquoi) et un balayage mécanique pour être complet — technical-checks.md §A3 pour les pistes A/B et onpage-checks.md pour D/E. Exécutez le diagnostic d'abord ; le balayage après attrape les pannes ennuyeuses, et seuls les éléments de balayage ayant un impact observable sont promus dans le tableau des constatations.
L'ordre compte. Un bloqueur de piste A (site non récupérable, noindex dans la source pré-rendu, action manuelle) rend toutes les autres constatations sans objet — une action manuelle est un multiplicateur binaire : rien de ce que vous améliorez ne compte tant qu'elle n'est pas levée. Travaillez A → B → C avant de passer du temps sur F/G.
Échelle de preuve — le routage complet se trouve dans references/tooling.md ; il est ordonné par force de la preuve, pas par commodité : journaux serveur → Search Console / Bing / Yandex → crawl complet → données de performance terrain → indices tiers → récupération manuelle et DevTools. Utilisez le barreau le plus élevé que vous pouvez réellement atteindre pour chaque vérification, et indiquez dans le rapport sur quel barreau repose une constatation. Un audit public uniquement sans accès à la propriété est un travail valide, mais ses constatations d'indexation et de requêtes sont des inférences, pas des observations, et sont hiérarchisées en conséquence.
Les six scripts fournis — preflight.py, gsc_pull.py, page_audit.py, url_inspection.py, sitemap_audit.py, psi_pull.py — collectent la moitié mécanique de chaque piste. Lisez references/scripts.md pour l'invocation, les indicateurs, les quotas et les limites par script.
Quatre pièges qui déterminent si une constatation est réelle :
- L'inventaire de schéma de
page_audit.pylit uniquement le HTML rendu par le serveur. Là où un CMS injecte du JSON-LD avec JavaScript, un inventaire vide n'est pas une preuve de balisage absent (non-négociable #8). --format jsonémet un tableau, un objet par page, même pour une seule URL : indexezdata[0].- Une réponse tronquée par
--max-bytessupprime toute constatation basée sur des comptes plutôt que de publier un fragment comme mesure. - Chaque constatation émise porte un niveau de preuve ainsi qu'une sévérité, et seul le niveau entre dans la formule de triage. La sévérité indique à quel point une constatation est bruyante ; le niveau est ce qui la soutient.
url_inspection.pyinterroge l'index plutôt que d'inférer à partir d'une récupération, ce qui est la seule façon pour une constatation d'atteindreCONFIRMÉ— à un quota de 2000/jour et 600/minute par propriété, donc échantillonnez une URL par modèle plus les pages sur lesquelles porte réellement une constatation.
Étape 3 — Triage
Scored chaque constatation, puis triez. Ne présentez pas de liste non classée.
priorité = (impact × confiance) / effort
- impact 1–5 : pages de revenus bloquées = 5 ; une fuite à l'échelle d'un modèle = 4 ; une seule page d'information = 1. Estimez en termes de trafic ou de revenus là où la référence le permet.
- confiance : CONFIRMÉ 1.0 · ÉTUDE 0.7 · TERRAIN 0.4 · HYPOTHÈSE 0.2.
- effort 1–5 en jours d'ingénierie, en comptant le processus de publication, pas seulement la modification.
Regroupez le résultat dans quatre seaux, dans cet ordre :
- Bloqueurs — indexation, pénalités, détournements, pages de revenus inaccessibles.
- Fuites — budget de crawl, équité, cannibalisation, gaspillage de budget de lecture.
- Gains — adéquation de l'intention, gain d'information, extractibilité, consensus d'entité.
- Expériences — tout ce qui est en dessous de CONFIRMÉ qui mérite un test fractionné plutôt qu'un déploiement. Concevez-les selon references/experiments.md ; ne déployez jamais une HYPOTHÈSE sans test.
Étape 4 — Documents de livraison
Tableau des constatations : chaque constatation obtient une ligne avec piste, sévérité, niveau de preuve, priorité et cause courte. Les bloqueurs CONFIRMÉS apparaissent en premier, les HYPOTHÈSES en dernier—à moins qu'une HYPOTHÈSE empêche la mise en œuvre de deux CONFIRMÉS, auquel cas une note de risque séparée explique l'ordre.
Plan de changements : instructions de modification spécifiques à l'emplacement avec URL:fichier:ligne lorsque c'est possible. Priorisé par seau, puis par priorité à l'intérieur du seau. Chaque instruction indique l'effort estimé (ingénierie, conception, rédaction, révision) et l'impact prévu.
Brief de netlinking (brief-netting-{domaine}-{date}.csv; lire references/linkbuilding.md pour le schéma exact) : une colonne source sépare les données de demande mesurées de l'évaluation éditoriale, et les cellules de volume des lignes non mesurées restent vides. Pas de "liens gratuits" listés sans preuve à l'appui.
Diapositive de résumé (optionnelle, utile pour les cadres) : lisez docs/resume.md le cas échéant.
Toute exécution de cette compétence Omet le résumé.md par défaut ; une diapositive ne remplace pas un document de travail.
Avertissements
- Pas de soumissions automatisées : ne soumettez pas d'URL à l'indexation, ne désavouez pas de liens, ne modifiez pas la configuration du serveur, ne soumettez pas de sitemaps. Tout changement visible publiquement nécessite une approbation explicite de l'utilisateur.
- Cela ne garantit pas le classement : les moteurs de recherche et les moteurs de réponse changent leurs algorithmes. Un plan correct exécuté correctement peut ou non déplacer les métriques. L'audit déclare ce qui est observable maintenant et ce qui est probable. Le résultat est un plan de travail, pas une promesse de revenus.
- Un audit vide avec des preuves partielles reste un livrable valide : si le` site d'accès est GSC-seulement et que la récupération est refusée, le rapport l'énonce (non-négociable #6) et classe les constatations d'indexation en CONFIRMÉ ou ÉTUDE, tandis que les constatations de contenu sont marquées comme HYPOTHÈSE. Le rapport n'est pas erroné ; sa plage de confiance est nettement plus large.
- Ce plan n'est pas un plan de contenu : il dit quoi changer, pas quoi écrire. Rédiger les pages relève d'un brief de contenu séparé alimenté par les constatations de l'audit.