From b6bde8f4ee77a678c5b777488dd39446f5c343b5 Mon Sep 17 00:00:00 2001 From: Bastien Chanot Date: Fri, 10 Jul 2026 17:03:53 +0200 Subject: [PATCH 1/3] feat(seo): NAP guardrails + audit-end deliverables MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - STEP 0 collects user-confirmed CANONICAL NAP (LRN-032 zenquality: duplicated-seed trap — source majority is not truth) - Both dispatch prompts carry the canonical NAP + no-majority rule; seo-analyzer spec forbids directional NAP fix without confirmation - STEP 2 now emits .claude/audits/HUMAN-ACTIONS.md (checklist from §11) and NAP-KIT.md (local business) in BOTH modes — audit-only runs leave the user immediately actionable; /client-handover §4 consumes NAP-KIT --- agents/seo-analyzer.md | 13 +++++++++ skills/seo/SKILL.md | 62 ++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 73 insertions(+), 2 deletions(-) diff --git a/agents/seo-analyzer.md b/agents/seo-analyzer.md index 21246ad..f7f03b8 100644 --- a/agents/seo-analyzer.md +++ b/agents/seo-analyzer.md @@ -481,12 +481,25 @@ web_search: "" "" site:google.com/maps Or use provided URL. Extract: - Name, address, phone, hours, rating, review count, categories, photos - Compare NAP with: + - The CANONICAL NAP from the dispatch context (user-confirmed) — the + only source of truth when present - LocalBusiness JSON-LD on site - HTML visible content - Other citations below **NAP inconsistencies = critical finding.** +**NAP mismatch direction rule (LRN-032).** NEVER infer the correct value +from source majority: on-site sources (JSON-LD, footer, settings DB, +legal pages) usually descend from ONE seed and can all carry the same +wrong value — the single diverging source may be the only one a human +actually corrected. Direction of fix: +- Diverging from a CONFIRMED canonical field → fix the diverging source. +- Canonical field UNCONFIRMED or absent → report the divergence WITHOUT + a directional fix; escalate as a user question ("which value is + correct?") in the envelope (§11 user action). No bundle item may + rewrite a NAP value that no confirmed canonical backs. + ### Social media verification For each provided URL: diff --git a/skills/seo/SKILL.md b/skills/seo/SKILL.md index 2cdea78..34e22b0 100644 --- a/skills/seo/SKILL.md +++ b/skills/seo/SKILL.md @@ -159,6 +159,29 @@ GSC PROPERTY: | none Skip questions already answered in `$ARGUMENTS`. +### NAP canonique (both depths — local-business projects) + +If the project shows local-business signals (LocalBusiness JSON-LD, GMB, +phone/address in content), collect and get the user to CONFIRM the +canonical NAP — name, street address, postal code + city, phone, email, +opening hours. A previous audit's values or the code's values are NOT a +substitute for user confirmation (duplicated-seed trap — see LRN-032 +zenquality: 3 on-site sources shared one wrong seeded phone; the single +diverging source was the only correct one). + +Record in the shared context block: +``` +CANONICAL NAP: |
| | | +``` +Fields the user cannot confirm → mark `UNCONFIRMED`. + +This user-confirmed NAP is the single source of truth for BOTH agents: +- A source diverging from a CONFIRMED field = finding with KNOWN + direction (fix the diverging source). +- A divergence on an UNCONFIRMED field = finding WITHOUT direction — + escalate as a user question ("which value is correct?"), NEVER pick + a side from source majority. + ### Plugin check (FULL only) For FULL depth, verify `WebFetch` and `WebSearch` are available. @@ -248,9 +271,17 @@ BUSINESS CONTEXT: Known citations: ... Known competitors: ... Time budget: ... + Canonical NAP: | none GSC account: