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>
This commit is contained in:
bastien 2026-04-21 16:57:32 +02:00
parent 95347d2e47
commit 476195978e
5 changed files with 386 additions and 13 deletions

View File

@ -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.

View File

@ -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 ### Submit to AI indexes directly (MANDATORY user action on FULL audit)
- **Bing Webmaster Tools** → submits to Bing + Copilot + ChatGPT Search (which uses Bing index) AI engines read from these indexes:
- **IndexNow protocol** (indexnow.org) → proactive ping to Bing/Yandex - ChatGPT Search, Copilot, DuckDuckGo, Ecosia → **Bing index**
- **Google Search Console + URL Inspection** → request indexing (no ChatGPT index direct submit exists in 2026) - 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

View File

@ -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,

View File

@ -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.

View File

@ -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 a "CROSS-AGENT NOTE" in its envelope. The dispatcher does NOT re-spawn
the owning agent at merge time. No direct cross-agent fix. 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:" them in your envelope under "CROSS-AGENT NOTES TO geo-analyzer:".
— the dispatcher forwards. 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:" them in your envelope under "CROSS-AGENT NOTES TO seo-analyzer:".
— the dispatcher forwards. 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
``` ```