Explorar el Código

feat(seo/geo): CMS plugin-first + shared-file edit discipline + Bing/IndexNow mandatory

Post-review hardening of the parallel seo+geo dispatch:

- skills/seo/SKILL.md: shared-file edit discipline embedded in both dispatch prompts (Edit-only on shared templates, Write only on sole-owned files). CROSS-AGENT NOTES flow clarified — dispatcher escalates to SEO.md §11 as user action with automation options (Option B).
- agents/seo-analyzer.md: STEP 2 detects 8 CMS (WordPress/Drupal/Magento/Shopify/Joomla/PrestaShop/Ghost/Wix-Squarespace-Webflow) and presence of SEO plugins. STEP 10 emits P0 quick win "install CMS plugin" when CMS detected without plugin. STEP 5 expands topic clusters / silos sémantiques. Framework notes in STEP 12 cover all 8 CMS explicitly.
- agents/geo-analyzer.md: STEP 6 checks /faq path + FAQPage schema presence. STEP 11 mandates 3 AI-index user actions per FULL audit (Bing Webmaster Tools / GSC / IndexNow) + Apple Business Connect for local business.
- agents/resources/automation-catalog.md: new structured CMS plugin section (install links + pricing per platform). AI-index submission section rewritten with Bing Webmaster as canonical entry for ChatGPT Search/Copilot/DuckDuckGo, IndexNow protocol details, Brave Web Discovery, Apple Business Connect.
- agents/resources/llms-txt-template.md: explicit note that /ai.txt and /about-data are NOT real standards; llms.txt (Jeremy Howard) remains the only proposed one.

Rationale: third-party AI review of the skill surfaced 5 gaps — race condition on shared templates (Layout.astro holds meta + JSON-LD), ambiguous cross-agent flow, missing CMS-plugin-first logic (Gemini), under-exposed Bing Webmaster (ChatGPT Search channel), and minor accuracy items.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
bastien hace 3 semanas
padre
commit
2b4294c6de

+ 51 - 0
agents/geo-analyzer.md

@@ -263,6 +263,32 @@ For each JSON-LD block found, check:
 4. **Graph integrity** — do `@id` references connect? No orphans?
 4. **Graph integrity** — do `@id` references connect? No orphans?
 5. **sameAs coverage** — does it include the main authoritative URIs?
 5. **sameAs coverage** — does it include the main authoritative URIs?
 
 
+### FAQ page presence (universal check)
+
+ChatGPT, Gemini, Perplexity citation rates spike on sites with a
+dedicated FAQ page. Check:
+
+```bash
+# FR + EN FAQ paths
+for p in /faq /questions /questions-frequentes /aide /help /support; do
+  find . -maxdepth 3 -path "*${p}*" 2>/dev/null | head -3
+done
+
+# FAQ schema presence
+grep -rE '"@type"\s*:\s*"(FAQPage|QAPage)"' --include="*.html" --include="*.astro" --include="*.tsx" --include="*.php" --include="*.vue" . 2>/dev/null | head -10
+```
+
+Emit finding:
+```
+FAQ PAGE       : present at <path> | absent
+FAQ SCHEMA     : FAQPage (collection) | QAPage (single Q) | none
+Q&A COUNT      : <n> | not applicable
+RECOMMENDATION : CREATE /faq with 20-50 real customer questions (P0 for GEO) | ADD schema to existing page | OK
+```
+
+If absent and site is informational/service/B2B → emit as MEDIUM-term
+action (G5 batch, confirmation needed — visible page creation).
+
 ### Gaps to fix — by site type
 ### Gaps to fix — by site type
 
 
 **Content site / blog:**
 **Content site / blog:**
@@ -271,6 +297,7 @@ For each JSON-LD block found, check:
 - [ ] `dateModified` matches last content update
 - [ ] `dateModified` matches last content update
 - [ ] `speakable` on TL;DR / summary block
 - [ ] `speakable` on TL;DR / summary block
 - [ ] `BreadcrumbList` on every non-home page
 - [ ] `BreadcrumbList` on every non-home page
+- [ ] FAQ page with `FAQPage` schema — even 10 real questions lift AI citations
 
 
 **Local business:**
 **Local business:**
 - [ ] `LocalBusiness` with most specific subclass (Plumber/Dentist/etc.)
 - [ ] `LocalBusiness` with most specific subclass (Plumber/Dentist/etc.)
@@ -513,6 +540,23 @@ High-impact, low-effort. For each:
 - Expected impact (high/medium/low)
 - Expected impact (high/medium/low)
 - AUTO (executed in STEP 13) or USER (documented in §11 of SEO.md)
 - AUTO (executed in STEP 13) or USER (documented in §11 of SEO.md)
 
 
+**MANDATORY user action — AI index submission**: every FULL audit
+MUST emit these 3 user actions (they are the entry points for AI
+search engines into your site):
+
+1. **Bing Webmaster Tools** — submit + verify sitemap. Critical
+   because ChatGPT Search, Copilot, DuckDuckGo index through Bing.
+2. **Google Search Console** — submit + request indexing for key
+   pages. Google AI Overviews ground on this index.
+3. **IndexNow** — enable via plugin (RankMath, Yoast, Cloudflare) or
+   custom endpoint. Proactive push to Bing/Yandex/Seznam.
+
+See `~/.claude/agents/resources/automation-catalog.md` →
+"Submit to AI indexes directly" for URLs + automation tools.
+
+Additionally, if business is local: **Apple Business Connect**
+(feeds Apple Maps + Apple Intelligence local discovery).
+
 ### Medium term (1-3 months)
 ### Medium term (1-3 months)
 
 
 - Entity SEO campaigns (Wikidata creation with source gathering)
 - Entity SEO campaigns (Wikidata creation with source gathering)
@@ -764,6 +808,13 @@ PROCHAINE ETAPE : <highest-priority>
 - **Focus on GEO, not classical SEO.** Overlapping concerns (meta
 - **Focus on GEO, not classical SEO.** Overlapping concerns (meta
   title, sitemap, Core Web Vitals) belong to `seo-analyzer`. Do not
   title, sitemap, Core Web Vitals) belong to `seo-analyzer`. Do not
   duplicate. Reference them in §13 as "see SEO section" if needed.
   duplicate. Reference them in §13 as "see SEO section" if needed.
+- **Shared-file edit discipline.** On template files shared with
+  `seo-analyzer` (Layout.astro, index.html, base.html.twig, etc.),
+  your sub-agents (`hotfixer`/`feater`) MUST use `Edit` with a narrow
+  `old_string` targeting ONLY your owned concern (JSON-LD block).
+  NEVER `Write` on shared templates. `Write` is reserved for files
+  you solely own: robots.txt, llms.txt, llms-full.txt. Full-template
+  refactor → escalate as user action in §11.
 - **Respect PERMISSIVE/RESTRICTIVE choice.** Per user CLAUDE.md,
 - **Respect PERMISSIVE/RESTRICTIVE choice.** Per user CLAUDE.md,
   default is PERMISSIVE. Only switch if client explicitly flags
   default is PERMISSIVE. Only switch if client explicitly flags
   premium/regulated content.
   premium/regulated content.

+ 142 - 6
agents/resources/automation-catalog.md

@@ -52,11 +52,38 @@ See `ai-visibility-tools.md`. Summary:
 - **OtterlyAI, Peec AI, Trendos, ZipTie, HubSpot AEO, SE Ranking** — commercial
 - **OtterlyAI, Peec AI, Trendos, ZipTie, HubSpot AEO, SE Ranking** — commercial
 - **Manual spreadsheet + 20 queries/mois** — free, ~1h/mois
 - **Manual spreadsheet + 20 queries/mois** — free, ~1h/mois
 
 
-### Submit to AI indexes directly
-
-- **Bing Webmaster Tools** → submits to Bing + Copilot + ChatGPT Search (which uses Bing index)
-- **IndexNow protocol** (indexnow.org) → proactive ping to Bing/Yandex
-- **Google Search Console + URL Inspection** → request indexing (no ChatGPT index direct submit exists in 2026)
+### Submit to AI indexes directly (MANDATORY user action on FULL audit)
+
+AI engines read from these indexes:
+- ChatGPT Search, Copilot, DuckDuckGo, Ecosia → **Bing index**
+- Google AI Overviews, Gemini (grounding mode) → **Google index**
+- Perplexity, Brave AI → **own crawlers + Bing fallback**
+
+Therefore: submit to GSC + Bing Webmaster minimum on every FULL audit.
+
+- **Bing Webmaster Tools** (FREE) — https://www.bing.com/webmasters
+  Critical because ChatGPT Search, Copilot, DuckDuckGo all use Bing.
+  Features: URL inspection, sitemap submission, keyword research, SEO
+  reports, IndexNow API integration. Plugin for WordPress available.
+  Setup: 10 min (verify domain via meta tag or DNS).
+- **Google Search Console** (FREE) — https://search.google.com/search-console
+  Covers Google search + AI Overviews grounding. URL inspection tool
+  requests live re-indexing (faster than waiting for crawl).
+- **IndexNow protocol** (FREE) — https://www.indexnow.org
+  Proactive ping to Bing + Yandex + Seznam + DuckDuckGo. One-line
+  API call per URL change. Plugins: Yoast (built-in), RankMath,
+  Cloudflare (zone-level), Cloudflare Workers snippet. For custom
+  sites: `curl` POST to `https://api.indexnow.org/indexnow`.
+- **Brave Web Discovery** (FREE) — enable in Brave browser settings
+  → "Aider Brave Search à découvrir du contenu". Visit your site in
+  Brave browser to help its indexation. Brave Search uses this for
+  index discovery, and Brave AI answers pull from Brave Search.
+- **Kagi submit** (requires Kagi account) — smaller audience but
+  growing for privacy-focused search.
+- **Apple Business Connect** → Apple Maps + Apple Intelligence local
+  discovery. Free but requires Apple ID. https://businessconnect.apple.com
+- No direct "submit to ChatGPT" exists in 2026 — submission to Bing
+  is the canonical path.
 
 
 ### Maintain llms.txt / llms-full.txt
 ### Maintain llms.txt / llms-full.txt
 
 
@@ -113,12 +140,121 @@ typically batch D (structural change, user approval needed).
 - **SEOClarity** (enterprise) → content decay tracking
 - **SEOClarity** (enterprise) → content decay tracking
 - **Manual** — spreadsheet of top 50 pages + quarterly review cycle
 - **Manual** — spreadsheet of top 50 pages + quarterly review cycle
 
 
+## CMS plugin-first — install before editing templates
+
+**Rule**: when the site runs on a CMS, the highest-priority SEO action
+is to install/configure the SEO plugin. Manual template edits
+duplicate the plugin's output and create maintenance debt.
+
+### WordPress (2026 recommendations)
+
+- **RankMath Free** — default recommendation. Most features in free
+  tier, including Schema.org (Article, LocalBusiness, FAQ, HowTo,
+  Product), breadcrumbs, sitemap, redirect manager, GSC integration,
+  GEO-aware (content AI score).
+  Install: Plugins → Add New → "Rank Math SEO" → Install → Activate.
+  Setup wizard: ~10 min.
+- **Yoast SEO Free** — most popular. Strong for meta + sitemap +
+  readability. Schema.org basic in free, extended in Premium (99 USD/an).
+- **Yoast SEO Premium** (99 USD/an) — redirect manager, internal
+  linking suggestions, multiple focus keywords.
+- **SEOPress Free** — French origin, GDPR-friendly, good Schema.org
+  coverage.
+- **SEOPress Pro** (49-99 EUR/an) — white-label, WooCommerce Schema,
+  Google Analytics integration.
+- **AIOSEO (All-in-One SEO)** — older player, solid baseline.
+- **Slim SEO** — minimalist, auto-configuration, good for sites that
+  need SEO without admin complexity.
+
+Recommendation if unsure: **RankMath Free** → upgrade to RankMath Pro
+(59 USD/an) only if Analytics integration or Schema Pro needed.
+
+### Shopify
+
+- **Plug in SEO** (free + 20 USD/mois) — scans store for SEO issues,
+  suggests fixes, handles meta templates for products/collections.
+- **Smart SEO** (10-30 USD/mois) — auto-generates alt tags, meta
+  tags, JSON-LD (Product, Organization, Breadcrumbs).
+- **SEO Manager** (20 USD/mois) — image SEO, structured data, 404
+  redirects.
+- **Avada SEO** — newer, good GEO-aware features.
+- Shopify native: configure via Admin → Online Store → Preferences
+  (title, meta description, homepage), + per-product meta fields.
+
+### Drupal (7/8/9/10)
+
+Core SEO stack (install as modules, free):
+- **Metatag** — meta tags (OG, Twitter Card, canonical)
+- **Simple XML Sitemap** — sitemap generation
+- **Pathauto** — clean URLs
+- **Schema.org Metatag** — JSON-LD Schema.org output
+- **Yoast SEO Drupal** — on-page readability + focus keyword analysis
+- **Redirect** — 301 redirects
+- **Google Analytics** — GA4 integration
+
+### Magento 1 / 2
+
+Native Magento SEO is decent but limited. Paid extensions dominate:
+- **SEO Suite Ultimate (Mageworx)** — canonical, URL rewrites, rich
+  snippets, meta templates (~250-500 EUR one-time)
+- **Mirasvit SEO Suite** — similar scope, 149-399 USD
+- **Amasty SEO Toolkit** — HTML sitemap, rich snippets, meta
+  templates
+- Free basics: configure native URL rewrites + meta defaults in
+  System → Configuration → Catalog → SEO
+
+### PrestaShop
+
+- **PrestaShop SEO Expert** (free + paid) — meta templates, rich
+  snippets, image alt rules
+- **JMarket SEO Pack** — structured data + breadcrumbs
+- **Advanced SEO** module — meta per category/product with
+  placeholders
+- Native: Configure → Shop Parameters → Traffic & SEO
+
+### Joomla
+
+- **JoomSEF** — URL rewriting + meta management
+- **sh404SEF** — commercial (~60 EUR/year), full SEO suite
+- **4SEO** — native integration, comprehensive
+- **OSMap** — sitemap generator (free)
+
+### Ghost
+
+Native SEO is strong (meta + OG + Twitter Card + JSON-LD Article/Author
+out of box). Customization via theme `default.hbs` + routes.yaml.
+Plugins unnecessary for most sites.
+
+### Wix / Squarespace / Webflow (hosted CMS)
+
+**No theme file access.** All SEO changes happen in the admin UI:
+- **Wix** — SEO panel per page; Wix SEO Wiz for guided setup;
+  redirects in Settings → Custom Domain → URL Redirects.
+- **Squarespace** — Per-page SEO tab (title, description, image);
+  sitewide in Settings → Marketing → SEO; URL slugs editable.
+- **Webflow** — Page Settings per page (meta title, description,
+  OG image); sitemap at `/sitemap.xml` (auto); robots.txt in Project
+  Settings → SEO.
+
+Agent cannot auto-apply anything on these platforms — emit detailed
+USER action list per panel.
+
+### Extension of this catalog for NEW CMS
+
+If detected CMS not listed above, agent runs WebSearch:
+```
+web_search: <CMS name> best SEO plugin 2026
+```
+and emits findings with pricing in the report.
+
+---
+
 ## Technical SEO actions
 ## Technical SEO actions
 
 
 ### Generate sitemaps
 ### Generate sitemaps
 
 
 - **Framework plugin** — `@astrojs/sitemap`, `next-sitemap`, `@nuxtjs/sitemap`, `rails-sitemap-generator`, etc.
 - **Framework plugin** — `@astrojs/sitemap`, `next-sitemap`, `@nuxtjs/sitemap`, `rails-sitemap-generator`, etc.
-- **Yoast / RankMath** (WordPress) → auto-generate
+- **Yoast / RankMath / SEOPress** (WordPress) → auto-generate (see CMS plugins section above)
 - **Screaming Frog** (200 GBP/an) → crawler-based generation
 - **Screaming Frog** (200 GBP/an) → crawler-based generation
 - Manual: only as last resort, hand-maintained sitemaps go stale fast
 - Manual: only as last resort, hand-maintained sitemaps go stale fast
 
 

+ 6 - 0
agents/resources/llms-txt-template.md

@@ -7,6 +7,12 @@
 extract content via `/llms.txt`. A Search Engine Land study (2025) found
 extract content via `/llms.txt`. A Search Engine Land study (2025) found
 8 of 9 sites saw no measurable traffic change after adoption.
 8 of 9 sites saw no measurable traffic change after adoption.
 
 
+**Not to be confused with `/ai.txt`**: some blog posts and AI-generated
+articles recommend a file named `/ai.txt` or `/about-data`. These are
+NOT real standards — no spec exists, no AI engine reads them. If someone
+asks about `/ai.txt`, the correct answer is "use `llms.txt` instead, it
+is the only emerging proposed standard (Jeremy Howard, Sept 2024)".
+
 **Why include it anyway**:
 **Why include it anyway**:
 - Low cost (small static file).
 - Low cost (small static file).
 - Real value for developer-facing sites — AI coding assistants (Cursor,
 - Real value for developer-facing sites — AI coding assistants (Cursor,

+ 105 - 2
agents/seo-analyzer.md

@@ -95,6 +95,57 @@ Rails, Django, other.
 
 
 Record rendering: **SSR / SSG / SPA / hybrid / ISR**.
 Record rendering: **SSR / SSG / SPA / hybrid / ISR**.
 
 
+### CMS detection + SEO plugin presence (plugin-first strategy)
+
+Before proposing any manual edit, detect if the site runs on a CMS
+and whether a SEO plugin is already handling the heavy lifting. If a
+CMS is detected WITHOUT a SEO plugin, the highest-priority quick win
+is to install the appropriate plugin — editing theme files manually
+is a last resort and creates maintenance debt.
+
+```bash
+# WordPress signals
+[ -f wp-config.php ] && echo "CMS: WordPress"
+ls wp-content/plugins 2>/dev/null | head -20
+# Common SEO plugins
+ls wp-content/plugins 2>/dev/null | grep -iE "yoast|wordpress-seo|seo-by-rank-math|rank-math|seopress|all-in-one-seo|aioseo|squirrly|slim-seo"
+
+# Drupal signals
+[ -f core/CHANGELOG.txt ] && echo "CMS: Drupal"
+find . -maxdepth 3 -name "*.info.yml" 2>/dev/null | xargs -I{} grep -l "yoast_seo\|metatag\|pathauto\|simple_sitemap" {} 2>/dev/null | head -5
+
+# Magento / Shopify / PrestaShop / Joomla signals
+[ -f composer.json ] && grep -iE "magento|shopify|prestashop|joomla" composer.json 2>/dev/null
+[ -f config.xml ] && echo "CMS: Magento (likely)"
+[ -f configuration.php ] && grep -q "JConfig" configuration.php 2>/dev/null && echo "CMS: Joomla"
+# Shopify: detected via theme files (shopify.theme.toml, config/settings_data.json)
+[ -f config/settings_data.json ] && [ -d sections ] && echo "CMS: Shopify (theme source)"
+
+# Ghost signals
+[ -f config.production.json ] && grep -q "ghost" config.production.json 2>/dev/null && echo "CMS: Ghost"
+
+# Webflow / Wix / Squarespace: usually hosted — detected only via live HTML
+# (FULL depth check: curl home page and look for meta generator tag)
+```
+
+Record:
+```
+CMS CONTEXT
+CMS              : WordPress | Drupal | Magento | Shopify | Joomla | PrestaShop | Ghost | Webflow | Wix | Squarespace | none (custom)
+SEO PLUGIN       : <name + version> | ABSENT | N/A (not CMS)
+PLUGIN COVERAGE  : meta | sitemap | OG | JSON-LD | breadcrumbs | redirects | <list>
+GAP              : <what the plugin does NOT cover — the agent will touch that>
+RECOMMENDATION   : KEEP & CONFIGURE plugin | INSTALL <plugin> (P0 quick win) | MANUAL EDITS (no CMS)
+```
+
+**Decision rule**:
+- CMS + SEO plugin present → CONFIGURE it via admin UI (settings). Do
+  NOT duplicate its output by editing theme files.
+- CMS + no SEO plugin → emit P0 quick win in STEP 10: "Install
+  <recommended plugin>" with direct link + automation catalog refs.
+  Manual theme edits only on concerns the plugin does not cover.
+- No CMS (custom code) → full manual edit via hotfixer/feater as usual.
+
 ### Infrastructure signals
 ### Infrastructure signals
 
 
 ```bash
 ```bash
@@ -329,7 +380,7 @@ Each embedded or self-hosted video should have:
 - `<track kind="captions">` if self-hosted
 - `<track kind="captions">` if self-hosted
 - Thumbnail with OG image or structured data
 - Thumbnail with OG image or structured data
 
 
-### Internal linking
+### Internal linking + topic clusters (silos sémantiques)
 
 
 Sample critical pages. Check:
 Sample critical pages. Check:
 - Every important page reachable within 3 clicks from homepage?
 - Every important page reachable within 3 clicks from homepage?
@@ -337,6 +388,29 @@ Sample critical pages. Check:
 - Footer has key legal + service links?
 - Footer has key legal + service links?
 - Orphan pages (no inbound internal links)?
 - Orphan pages (no inbound internal links)?
 
 
+**Topic clusters (silos sémantiques)** — beyond basic navigation,
+evaluate whether the site organises content into topical silos:
+- **Pillar page** (broad topic, e.g. "Guide complet SEO local") —
+  authoritative, long-form, targets head keyword.
+- **Cluster pages** (narrow sub-topics, e.g. "Comment optimiser GMB",
+  "NAP cohérent") — each links TO the pillar + back is linked FROM
+  the pillar.
+- **Cross-cluster links** — minimized; each silo should be internally
+  cohesive.
+
+Why this matters for both classical SEO and GEO:
+- Classical: Google uses topical authority as ranking signal (2024+
+  Helpful Content + E-E-A-T). Clustered sites rank entire clusters,
+  not just individual pages.
+- GEO: AI engines extract the whole cluster when answering a query
+  — a well-linked cluster gets cited more often than isolated pages.
+
+Flag:
+- Pages listed in nav but not linked from related content (orphans
+  within their topic)
+- Pillar pages lacking inbound links from their clusters
+- Excessive cross-cluster linking (dilutes topical authority)
+
 ### Accessibility signals (a11y contributes to ranking)
 ### Accessibility signals (a11y contributes to ranking)
 
 
 ```bash
 ```bash
@@ -543,6 +617,21 @@ For each:
 
 
 AUTO items are a commitment, not a suggestion.
 AUTO items are a commitment, not a suggestion.
 
 
+**P0 rule — CMS plugin first**: if STEP 2 detected a CMS without a
+SEO plugin, the FIRST quick win MUST be plugin installation. Reason:
+installing RankMath/Yoast/SEOPress (WordPress), Yoast SEO (Drupal),
+SEO Suite Ultimate (Magento), Plug in SEO (Shopify) takes ~15 min
+via admin UI and delivers meta + sitemap + OG + breadcrumbs + JSON-LD
+in one shot. Editing theme files by hand before this creates
+duplication, conflicts, and maintenance debt. See
+`~/.claude/agents/resources/automation-catalog.md` CMS plugins
+section for the exact install path per CMS.
+
+**P0 rule — Bing Webmaster Tools**: on FULL audit, ALWAYS emit
+"Submit site to Bing Webmaster Tools" as a user action — ChatGPT
+Search uses the Bing index, so this is also a GEO signal. See
+automation-catalog.md for IndexNow + Bing.
+
 ### Medium term (1-3 months)
 ### Medium term (1-3 months)
 City/service pages (30/70 rule: 30% shared, 70% unique per city),
 City/service pages (30/70 rule: 30% shared, 70% unique per city),
 blog launch, review campaigns, citation cleanup, image optimization
 blog launch, review campaigns, citation cleanup, image optimization
@@ -682,7 +771,14 @@ Include in every sub-agent prompt:
 - **SvelteKit** — `<svelte:head>` or `+layout.server.ts` load. Custom sitemap endpoint.
 - **SvelteKit** — `<svelte:head>` or `+layout.server.ts` load. Custom sitemap endpoint.
 - **Static HTML / PHP** — edit `<head>` directly. `.htaccess` for redirects.
 - **Static HTML / PHP** — edit `<head>` directly. `.htaccess` for redirects.
 - **React SPA** — flag SEO severely limited without SSR. `react-helmet` helps metadata but content indexation breaks. Recommend migration to Next.js/Astro. Note this in §0 (major alerts).
 - **React SPA** — flag SEO severely limited without SSR. `react-helmet` helps metadata but content indexation breaks. Recommend migration to Next.js/Astro. Note this in §0 (major alerts).
-- **WordPress** — Yoast/RankMath/SEOPress handle meta + sitemap. Do not duplicate.
+- **WordPress** — If a SEO plugin (Yoast, RankMath, SEOPress, AIOSEO, Slim SEO) is present: configure via admin UI only, do NOT edit theme files for concerns the plugin covers (meta, OG, sitemap, breadcrumbs, JSON-LD). If ABSENT: P0 quick win = install plugin before any manual edit. Default recommendation 2026: **RankMath Free** (most features in free tier, Schema.org and GEO-aware).
+- **Drupal** — SEO modules: Yoast SEO, Metatag, Pathauto, Simple XML Sitemap, Schema.org Metatag. If present: configure modules. If absent: P0 = enable Metatag + Simple XML Sitemap + Pathauto (core SEO stack).
+- **Magento (1/2)** — Native SEO decent but limited. Recommended: **SEO Suite Ultimate (Mageworx)** or **Mirasvit SEO Suite**. Configure URL rewrites, meta templates, rich snippets in admin.
+- **Shopify** — Editing: theme files (`theme.liquid`, `product.liquid`, `article.liquid`). Plugins: **Plug in SEO**, **SEO Manager**, **Smart SEO** auto-handle most items. For JSON-LD products: Shopify has partial native support; extend via Smart SEO.
+- **PrestaShop** — Native SEO OK. Modules: **PrestaShop SEO Expert**, **JMarket SEO**, built-in meta editors. Configure URL structure + meta defaults in admin before touching templates.
+- **Joomla** — SEO extensions: **JoomSEF**, **sh404SEF**, **4SEO**. Configure in admin.
+- **Ghost** — Native SEO strong (meta + OG + JSON-LD out of box). Usually no plugin needed; handle gaps via `default.hbs` edits.
+- **Wix / Squarespace / Webflow (hosted CMS)** — No theme file access. ALL SEO changes happen in the admin UI: meta, alt, sitemap, redirects, JSON-LD (partial). Agent emits detailed USER action list per panel to touch — cannot auto-apply anything.
 
 
 ### Landing page rule
 ### Landing page rule
 
 
@@ -858,6 +954,13 @@ PROCHAINE ETAPE : <highest-priority>
 ### Scope
 ### Scope
 - **Autonomous fixes = markup, assets, config, legal pages.** Never
 - **Autonomous fixes = markup, assets, config, legal pages.** Never
   change business logic, layout, styles, routing unless confirmed.
   change business logic, layout, styles, routing unless confirmed.
+- **Shared-file edit discipline.** On template files shared with
+  `geo-analyzer` (Layout.astro, index.html, base.html.twig, etc.),
+  your sub-agents (`hotfixer`/`feater`) MUST use `Edit` with a narrow
+  `old_string` targeting ONLY your owned concern (meta tags). NEVER
+  `Write` on shared templates. `Write` is reserved for files you
+  solely own: sitemap.xml, .htaccess, legal pages, new city/service
+  pages. Full-template refactor → escalate as user action in §11.
 - **Landing page protection.** Zero visible change except meta tags,
 - **Landing page protection.** Zero visible change except meta tags,
   footer links, JSON-LD, image optimization.
   footer links, JSON-LD, image optimization.
 - **Preserve existing valid SEO.** Don't rewrite correct tags.
 - **Preserve existing valid SEO.** Don't rewrite correct tags.

+ 83 - 6
skills/seo/SKILL.md

@@ -120,8 +120,38 @@ their dispatch prompts:
 | Video transcripts | **seo-analyzer** (user action) | |
 | Video transcripts | **seo-analyzer** (user action) | |
 
 
 If either agent detects a finding in a file it doesn't own, it emits
 If either agent detects a finding in a file it doesn't own, it emits
-a "CROSS-AGENT NOTE" in its envelope; the dispatcher forwards it to
-the owning agent at merge time. No direct cross-agent fix.
+a "CROSS-AGENT NOTE" in its envelope. The dispatcher does NOT re-spawn
+the owning agent (both have finished by merge time). Instead, cross-agent
+findings are escalated into `SEO.md §11 — Actions utilisateur requises`
+with an explicit "Automatisation possible avec: ..." block pulled from
+`automation-catalog.md`. This is the Option B resolution (chosen by
+user): simpler than a coordinator agent, aligns with the "every user
+action lists automation" rule, and avoids architectural complexity.
+
+### Shared-file edit discipline (prevents last-writer-wins)
+
+Ownership is by *concern*, not by *file*. A single template
+(`Layout.astro`, `index.html`, `base.html.twig`, `_document.tsx`…)
+typically contains BOTH concerns simultaneously:
+  - meta tags (seo-analyzer)
+  - JSON-LD blocks (geo-analyzer)
+
+When the agents' sub-agents (hotfixer/feater) run in parallel they
+could both target the same physical file. To avoid a `Write`-based
+last-writer-wins scenario:
+
+**Rule** (embedded in both agent dispatch prompts below):
+
+> On any shared template file (anything containing multiple owned
+> concerns), use the `Edit` tool with a **narrow, targeted** `old_string`
+> that encloses ONLY your owned concern. NEVER use `Write` (full-file
+> rewrite) on a shared template. `Write` is reserved for files you
+> are the sole owner of (sitemap.xml, robots.txt, llms.txt, legal
+> pages, new city pages, .htaccess).
+
+If a sub-agent determines `Edit` is insufficient (e.g. full template
+refactor needed), it must STOP and escalate as a cross-agent note —
+the dispatcher handles via §11 user action instead.
 
 
 ## STEP 1 — Spawn both agents IN PARALLEL
 ## STEP 1 — Spawn both agents IN PARALLEL
 
 
@@ -161,8 +191,20 @@ FILE OWNERSHIP (authoritative, prevents parallel-edit conflicts):
 - YOU READ-ONLY: robots.txt (geo-analyzer owns), JSON-LD blocks
 - YOU READ-ONLY: robots.txt (geo-analyzer owns), JSON-LD blocks
   (geo-analyzer owns structure; you flag NAP inconsistencies), llms.txt.
   (geo-analyzer owns structure; you flag NAP inconsistencies), llms.txt.
 - CROSS-AGENT NOTES: if you find issues in files you don't own, emit
 - CROSS-AGENT NOTES: if you find issues in files you don't own, emit
-  them in your envelope under "CROSS-AGENT NOTES TO geo-analyzer:"
-  — the dispatcher forwards.
+  them in your envelope under "CROSS-AGENT NOTES TO geo-analyzer:".
+  Dispatcher escalates each note to SEO.md §11 as user action (with
+  automation options). Do NOT attempt direct cross-agent fix.
+
+SHARED-FILE EDIT DISCIPLINE (last-writer-wins prevention):
+- On shared templates (Layout.astro, index.html, base.html.twig, etc.)
+  where meta tags + JSON-LD coexist, your sub-agents (hotfixer/feater)
+  MUST use `Edit` with a targeted `old_string` enclosing ONLY your
+  concern (meta tags). NEVER use `Write` (full-file rewrite) on shared
+  templates.
+- `Write` is allowed only on files where you are the sole owner:
+  sitemap.xml, .htaccess, legal pages, new city/service pages.
+- If full-template refactor is needed, STOP and emit as a cross-agent
+  note → user action in §11.
 
 
 Execute your agent spec at ~/.claude/agents/seo-analyzer.md starting
 Execute your agent spec at ~/.claude/agents/seo-analyzer.md starting
 at STEP 2 (skip STEP 0 and STEP 1 — context is provided above).
 at STEP 2 (skip STEP 0 and STEP 1 — context is provided above).
@@ -196,8 +238,20 @@ FILE OWNERSHIP (authoritative, prevents parallel-edit conflicts):
 - YOU READ-ONLY: sitemap.xml, .htaccess, meta tags, heading structure
 - YOU READ-ONLY: sitemap.xml, .htaccess, meta tags, heading structure
   (seo-analyzer owns structure), legal pages, images, hreflang.
   (seo-analyzer owns structure), legal pages, images, hreflang.
 - CROSS-AGENT NOTES: if you find issues in files you don't own, emit
 - CROSS-AGENT NOTES: if you find issues in files you don't own, emit
-  them in your envelope under "CROSS-AGENT NOTES TO seo-analyzer:"
-  — the dispatcher forwards.
+  them in your envelope under "CROSS-AGENT NOTES TO seo-analyzer:".
+  Dispatcher escalates each note to SEO.md §11 as user action (with
+  automation options). Do NOT attempt direct cross-agent fix.
+
+SHARED-FILE EDIT DISCIPLINE (last-writer-wins prevention):
+- On shared templates (Layout.astro, index.html, base.html.twig, etc.)
+  where meta tags + JSON-LD coexist, your sub-agents (hotfixer/feater)
+  MUST use `Edit` with a targeted `old_string` enclosing ONLY your
+  concern (JSON-LD block). NEVER use `Write` (full-file rewrite) on
+  shared templates.
+- `Write` is allowed only on files where you are the sole owner:
+  robots.txt, llms.txt, llms-full.txt.
+- If full-template refactor is needed, STOP and emit as a cross-agent
+  note → user action in §11.
 
 
 Execute your agent spec at ~/.claude/agents/geo-analyzer.md starting
 Execute your agent spec at ~/.claude/agents/geo-analyzer.md starting
 at STEP 2 (skip STEP 0 and STEP 1 — context is provided above).
 at STEP 2 (skip STEP 0 and STEP 1 — context is provided above).
@@ -312,6 +366,29 @@ Legal compliance). Merge rule:
   and the other says "keep schema X", flag explicitly in §0 and let
   and the other says "keep schema X", flag explicitly in §0 and let
   the user decide
   the user decide
 
 
+### CROSS-AGENT NOTES handling (Option B — §11 escalation)
+
+When an envelope contains a `CROSS-AGENT NOTES TO <other-agent>:`
+block, the dispatcher:
+
+1. Does NOT re-spawn the target agent (it has finished).
+2. Converts each note into a §11 user action entry with the format:
+   ```
+   ### <action title> (cross-agent note from <source-agent>)
+
+   **Contexte:** <source-agent> a détecté ce point dans un fichier
+   appartenant à <target-agent>, mais l'audit parallèle s'est terminé
+   avant échange.
+
+   **Action:** <what to do>
+
+   **Automatisation possible avec:** <pull from automation-catalog.md>
+
+   **Effort manuel:** <estimate>
+   ```
+3. Tags it visibly in §0 if it's a legal/compliance blocker.
+4. Keeps these notes visible on re-run — they don't silently vanish.
+
 ## STEP 3 — Console summary
 ## STEP 3 — Console summary
 
 
 ```
 ```