# Phase 0 — Fondations SEO+GEO Vault Implementation Plan

> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.

**Goal:** Bootstrap la structure SEO+GEO du vault (MOC GEO, MOC SEO mis à jour, note Dataview de péremption, taxonomie tags) sans toucher au contenu des notes — préparer le terrain pour Phases 1-6.

**Architecture:** 3 fichiers vault à créer/modifier + arborescence GEO/. Pas de tests automatisés (vault Obsidian = markdown). Vérifications = frontmatter YAML parse, wikilinks résolvent (forward-refs vers notes Phase 1+ attendues), Dataview query syntax valide.

**Tech Stack:** Markdown Obsidian-flavored, frontmatter YAML, Dataview plugin, wikilinks `[[]]`, callouts Obsidian.

**Spec source:** `/Users/humperdoo/Documents/Claude/specs/2026-05-16-seo-geo-vault-overhaul-design.md` §6 (Phase 0).

**Working dir (vault) :** `/Users/humperdoo/Library/Mobile Documents/iCloud~md~obsidian/Documents/`

---

## File Structure

| Path | Action | Responsibility |
|---|---|---|
| `Docs/inbox/`, `Docs/processed/`, `Docs/queue.md` | VERIFY (déjà bootstrappé hors vault) | Pipeline ingestion |
| `GEO/` (dossier racine) | CREATE | Top-level GEO section |
| `GEO/Fondamentaux/`, `GEO/Contenu/`, `GEO/Technique/`, `GEO/Ecommerce/` | CREATE | Sous-dossiers GEO |
| `GEO/GEO.md` | CREATE | MOC GEO (forward refs vers notes Phase 1) |
| `SEO/Stale Check.md` | CREATE | Note Dataview péremption docs Google |
| `SEO/SEO.md` | MODIFY | Ajouter sections GEO + Crawl & Indexation + Taxonomie tags |

**Pas de modification du CLAUDE.md** en Phase 0 — taxonomie tags vit dans `SEO/SEO.md` (utilisateur du vault, pas Claude config).

---

## Task 1: Verify pipeline bootstrap (no changes)

**Files:** lecture seule

- [ ] **Step 1.1: Vérifier structure Docs/**

```bash
ls -la "/Users/humperdoo/Documents/Claude/Docs/"
```

Expected output : `inbox/`, `processed/`, `queue.md` présents (rien à créer).

- [ ] **Step 1.2: Vérifier count inbox**

```bash
ls "/Users/humperdoo/Documents/Claude/Docs/inbox/" | wc -l
```

Expected : 58.

- [ ] **Step 1.3: Aucun commit pour Task 1**

Rien à committer — vérification seule.

---

## Task 2: Create GEO/ folder structure

**Files:**
- Create: `GEO/Fondamentaux/.gitkeep`
- Create: `GEO/Contenu/.gitkeep`
- Create: `GEO/Technique/.gitkeep`
- Create: `GEO/Ecommerce/.gitkeep`

Rationale `.gitkeep` : git ne track pas les dossiers vides. Phase 1 les remplira de notes ; les `.gitkeep` seront supprimés au premier ajout de note réel.

- [ ] **Step 2.1: Créer les 4 sous-dossiers**

```bash
cd "/Users/humperdoo/Library/Mobile Documents/iCloud~md~obsidian/Documents"
mkdir -p GEO/Fondamentaux GEO/Contenu GEO/Technique GEO/Ecommerce
touch GEO/Fondamentaux/.gitkeep GEO/Contenu/.gitkeep GEO/Technique/.gitkeep GEO/Ecommerce/.gitkeep
ls GEO/
```

Expected output (4 dossiers) :
```
Contenu
Ecommerce
Fondamentaux
Technique
```

- [ ] **Step 2.2: Vérifier `.gitkeep` présents**

```bash
find "/Users/humperdoo/Library/Mobile Documents/iCloud~md~obsidian/Documents/GEO" -name ".gitkeep" | wc -l
```

Expected : 4.

---

## Task 3: Create GEO/GEO.md (MOC)

**Files:**
- Create: `GEO/GEO.md`

- [ ] **Step 3.1: Écrire GEO.md avec frontmatter + sections**

Path : `/Users/humperdoo/Library/Mobile Documents/iCloud~md~obsidian/Documents/GEO/GEO.md`

Contenu (utiliser Write tool — pas de heredoc bash) :

````markdown
---
tags:
  - geo
  - moc
aliases:
  - GEO Index
  - AI Search Index
  - Generative Engine Optimization
date_creation: 2026-05-16
date_maj_google: 2026-05-15
---

Retour à [[SEO]]

# GEO — Map of Content

> [!info] Quoi
> Optimisation pour les expériences de recherche génératives (AI Overviews, AI Mode).
> Selon Google, **GEO = SEO** : les bonnes pratiques de search classique alimentent les réponses AI via RAG.

> [!abstract] TL;DR
> Le terme officiel reste SEO. "GEO" et "AEO" sont des termes communautaires. Le vault les regroupe ici pour traiter spécifiquement les nuances liées au search génératif.

## Fondamentaux

| Note | Description |
|------|-------------|
| [[AI Overviews & AI Mode]] | Fonctionnement des expériences AI dans Search |
| [[RAG & Query Fan-out]] | Comment Google récupère et utilise le contenu pour ses réponses AI |
| [[Mythbusting (llms.txt, chunking, AEO)]] | Ce qui ne sert à rien selon Google |

## Contenu

| Note | Description |
|------|-------------|
| [[Contenu Gen-AI & Spam Policy]] | Règles d'utilisation de l'IA pour générer du contenu |
| [[Disclosure & Contexte utilisateur]] | Signaler comment le contenu a été créé |

## Technique

| Note | Description |
|------|-------------|
| [[Bots IA & Crawlers]] | Google-Extended, GoogleOther, OAI-SearchBot, ClaudeBot |
| [[Agents Web & UCP]] | Browser agents et Universal Commerce Protocol |

## Ecommerce

| Note | Description |
|------|-------------|
| [[Merchant Center & AI Product Data]] | Règles AI-generated product data |
| [[IPTC DigitalSourceType pour images AI]] | Métadonnées IPTC TrainedAlgorithmicMedia |

## Voir aussi

- [[SEO]] — MOC SEO racine
- [[Robots]] — robots.txt et bots IA (versant technique)
- [[Frontmatter & Contenu]] — frontmatter MDX et E-E-A-T

> [!quote] Source
> Google Search Central — [Optimizing your website for generative AI features on Google Search](https://developers.google.com/search/docs/fundamentals/ai-optimization-guide) · maj 2026-05-15 · CC BY 4.0
````

- [ ] **Step 3.2: Vérifier frontmatter parse OK**

```bash
head -15 "/Users/humperdoo/Library/Mobile Documents/iCloud~md~obsidian/Documents/GEO/GEO.md"
```

Expected : frontmatter délimité par `---` en haut et bas, indentation YAML correcte (2 espaces pour items de liste).

- [ ] **Step 3.3: Vérifier nombre wikilinks forward-refs**

```bash
grep -oE '\[\[[^]]+\]\]' "/Users/humperdoo/Library/Mobile Documents/iCloud~md~obsidian/Documents/GEO/GEO.md" | wc -l
```

Expected : 12 wikilinks (1 SEO + 9 sous-notes + 3 Voir aussi - dont 1 SEO doublon = ~13). Forward-refs vers notes Phase 1+ sont attendus → Strange New Worlds les marquera comme manquants jusqu'à Phase 1, c'est OK.

---

## Task 4: Create SEO/Stale Check.md (Dataview)

**Files:**
- Create: `SEO/Stale Check.md`

- [ ] **Step 4.1: Écrire Stale Check.md**

Path : `/Users/humperdoo/Library/Mobile Documents/iCloud~md~obsidian/Documents/SEO/Stale Check.md`

Contenu (Write tool) :

````markdown
---
tags:
  - seo
  - seo/outils
  - geo
aliases:
  - Péremption
  - Stale notes
  - Doc freshness
date_creation: 2026-05-16
---

Retour à [[SEO]]

# Stale Check — Péremption des docs Google

> [!info] Quoi
> Tracker les notes SEO/GEO dont la doc Google source date de plus de 6 mois.
> Signal de re-vérification recommandée.

## Notes à re-vérifier (>6 mois)

```dataview
TABLE
  date_maj_google AS "Maj Google",
  (date(today) - date(date_maj_google)).days AS "Jours depuis maj"
FROM "SEO" OR "GEO"
WHERE date_maj_google
  AND (date(today) - date(date_maj_google)).days > 180
SORT date_maj_google ASC
```

## Toutes les notes (avec date de référence)

```dataview
TABLE
  date_maj_google AS "Maj Google",
  (date(today) - date(date_maj_google)).days AS "Jours"
FROM "SEO" OR "GEO"
WHERE date_maj_google
SORT date_maj_google ASC
```

## Notes sans `date_maj_google`

Notes sans tracking de fraîcheur — à compléter au prochain audit.

```dataview
LIST
FROM "SEO" OR "GEO"
WHERE !date_maj_google
```

## Voir aussi

- [[SEO]] — MOC SEO
- [[GEO]] — MOC GEO

> [!tip] Workflow audit
> 1. Identifier les notes >6 mois via la 1ère table
> 2. Re-scraper les URLs sources via `Docs/queue.md` + skill `obsidian-doc-ingest`
> 3. Comparer skeleton scrape vs note existante
> 4. Patcher la note + mettre à jour `date_maj_google`
````

- [ ] **Step 4.2: Vérifier syntaxe Dataview valide**

Validation manuelle (ouvrir Obsidian → naviguer à Stale Check.md) ou check via grep que les codeblocks sont bien fermés :

```bash
grep -c '^```dataview$' "/Users/humperdoo/Library/Mobile Documents/iCloud~md~obsidian/Documents/SEO/Stale Check.md"
grep -c '^```$' "/Users/humperdoo/Library/Mobile Documents/iCloud~md~obsidian/Documents/SEO/Stale Check.md"
```

Expected : `^```dataview$` → 3 ouvertures · `^```$` → 3 fermetures (égal).

- [ ] **Step 4.3: Vérifier frontmatter**

```bash
head -12 "/Users/humperdoo/Library/Mobile Documents/iCloud~md~obsidian/Documents/SEO/Stale Check.md"
```

Expected : `tags` avec 3 items (seo, seo/outils, geo), `aliases` avec 3, `date_creation: 2026-05-16`.

---

## Task 5: Update SEO/SEO.md (MOC)

**Files:**
- Modify: `SEO/SEO.md`

- [ ] **Step 5.1: Read existing SEO.md**

Read full file via Read tool : `/Users/humperdoo/Library/Mobile Documents/iCloud~md~obsidian/Documents/SEO/SEO.md`

Expected : fichier 64 lignes (vérif avant edit). Structure actuelle = frontmatter + Architecture + Techniques + Bonnes Pratiques + Netlinking + Outils + Format des notes.

- [ ] **Step 5.2: Edit — ajouter callout intro GEO sous le h1**

Trouver dans SEO.md :
```
# SEO — Map of Content

Documentation SEO complète pour le template Next.js. Chaque note couvre un sujet spécifique avec implémentation, bonnes pratiques et checklists.
```

Remplacer par :
```
# SEO — Map of Content

Documentation SEO complète pour le template Next.js. Chaque note couvre un sujet spécifique avec implémentation, bonnes pratiques et checklists.

> [!info] SEO ⊃ GEO
> Selon Google (mai 2026), optimiser pour le search génératif (AI Overviews, AI Mode) reste du SEO. Le vault dédie une section [[GEO]] pour traiter les nuances spécifiques au search AI.
```

- [ ] **Step 5.3: Edit — ajouter section "GEO / AI Search" après "Outils SEO"**

Trouver dans SEO.md :
```
## Outils SEO

| Note | Description |
|------|-------------|
| [[Bonnes Pratiques MCP GSC]] | Serveur MCP `gscServer` + Claude Code — audit indexation, positions, cannibalisation |

## Format des notes
```

Remplacer par :
```
## Outils SEO

| Note | Description |
|------|-------------|
| [[Bonnes Pratiques MCP GSC]] | Serveur MCP `gscServer` + Claude Code — audit indexation, positions, cannibalisation |
| [[Search Console (overview)]] | Vue d'ensemble Google Search Console — rapports, sitemaps, indexation |
| [[Stale Check]] | Dataview — notes dont la doc Google source date de >6 mois |

## Crawl & Indexation

| Note | Description |
|------|-------------|
| [[How Search Works]] | Théorie — découverte, exploration, indexation, classement |
| [[Liste des Googlebots]] | Tous les Googlebots (Googlebot, GoogleOther, Google-Extended…) |
| [[Reduce Crawl Rate]] | Ralentir l'exploration via Search Console |
| [[Verify Googlebot]] | Vérifier qu'un user-agent Googlebot est légitime (DNS reverse) |
| [[Ask Google to Recrawl]] | Demander un recrawl explicite (URL Inspection, sitemap ping) |
| [[Troubleshoot Crawl Errors]] | Soft 404, erreurs serveur, redirects en chaîne |
| [[Control What You Share]] | Bloquer indexation : noindex, robots.txt, auth |
| [[Page & Image Removals]] | Suppression URL/image de l'index (urgent, temporaire, refacto) |
| [[Pause Website Temporarily]] | Mettre un site en pause (maintenance, fermeture) sans dégrader SEO |
| [[A/B Testing SEO]] | Tester variantes sans pénalité SEO (cloaking, redirects, hreflang) |

## GEO / AI Search

| Note | Description |
|------|-------------|
| [[GEO]] | Map of Content GEO — optimisation pour AI Overviews, AI Mode |
| [[AI Overviews & AI Mode]] | Fonctionnement des expériences AI dans Search |
| [[RAG & Query Fan-out]] | Comment Google récupère le contenu pour ses réponses AI |
| [[Mythbusting (llms.txt, chunking, AEO)]] | Ce qui ne sert à rien selon Google |
| [[Contenu Gen-AI & Spam Policy]] | Règles d'utilisation de l'IA pour le contenu |
| [[Bots IA & Crawlers]] | Google-Extended, GoogleOther, OAI-SearchBot, ClaudeBot |

## Taxonomie des tags

Tags hiérarchiques utilisés dans toutes les notes SEO/GEO :

- `seo` (racine, sur toutes les notes SEO)
  - `seo/architecture` — siloing, structure URL, migrations
  - `seo/technique` — metadata, JSON-LD, sitemaps, robots, JS SEO, canonicals
  - `seo/bonnes-pratiques` — Core Web Vitals, helpful content, spam policies
  - `seo/crawl` — Googlebots, crawl rate, recrawl, troubleshoot
  - `seo/netlinking` — backlinks, guest post, disavow
  - `seo/outils` — Search Console, MCP GSC, Stale Check
- `geo` (racine, sur toutes les notes GEO)
  - `geo/fondamentaux` — AI Overviews, RAG, mythbusting
  - `geo/contenu` — gen-AI content rules, disclosure
  - `geo/technique` — bots IA, agents web
  - `geo/ecommerce` — Merchant Center AI, IPTC metadata
- `moc` — Maps of Content uniquement ([[SEO]], [[GEO]])

## Format des notes
```

- [ ] **Step 5.4: Vérifier modifications SEO.md**

```bash
wc -l "/Users/humperdoo/Library/Mobile Documents/iCloud~md~obsidian/Documents/SEO/SEO.md"
```

Expected : fichier passé de 64 lignes à ~120-130 lignes.

```bash
grep -c "^## " "/Users/humperdoo/Library/Mobile Documents/iCloud~md~obsidian/Documents/SEO/SEO.md"
```

Expected : **9** sections H2 (Architecture, Techniques d'implémentation, Bonnes Pratiques, Netlinking, Outils SEO, Crawl & Indexation, GEO / AI Search, Taxonomie des tags, Format des notes).

- [ ] **Step 5.5: Vérifier liens forward-refs**

```bash
grep -oE '\[\[[^]]+\]\]' "/Users/humperdoo/Library/Mobile Documents/iCloud~md~obsidian/Documents/SEO/SEO.md" | sort -u | wc -l
```

Expected : ~30 wikilinks uniques (existing notes + forward refs vers Phase 1-5 notes).

---

## Task 6: Commit Phase 0

**Files:** staging précis (jamais `git add -A`).

- [ ] **Step 6.1: git status — voir l'état**

```bash
cd "/Users/humperdoo/Library/Mobile Documents/iCloud~md~obsidian/Documents"
git status SEO/ GEO/
```

Expected : 
- `M SEO/SEO.md` (modifié)
- `?? SEO/Stale Check.md` (nouveau)
- `?? GEO/` (nouveau dossier)

- [ ] **Step 6.2: Stage spécifique (pas -A)**

```bash
cd "/Users/humperdoo/Library/Mobile Documents/iCloud~md~obsidian/Documents"
git add "SEO/SEO.md" "SEO/Stale Check.md" "GEO/GEO.md" "GEO/Fondamentaux/.gitkeep" "GEO/Contenu/.gitkeep" "GEO/Technique/.gitkeep" "GEO/Ecommerce/.gitkeep"
git status --short
```

Expected : 7 fichiers staged (`A` ou `M`), pas d'autres modifications du vault (ils restent untracked, c'est OK).

- [ ] **Step 6.3: Commit avec message conventionnel**

```bash
cd "/Users/humperdoo/Library/Mobile Documents/iCloud~md~obsidian/Documents"
git commit -m "$(cat <<'EOF'
chore(seo,geo): bootstrap structure SEO+GEO + pipeline ingestion

Phase 0 du chantier d'audit SEO + création GEO (cf. spec
2026-05-16-seo-geo-vault-overhaul-design.md).

- SEO/SEO.md (MOC): ajout callout SEO⊃GEO, sections GEO / Crawl &
  Indexation / Taxonomie tags, refs forward vers notes Phase 1-5
- SEO/Stale Check.md (NEW): Dataview tracking péremption docs Google
- GEO/GEO.md (NEW): MOC GEO avec sous-sections Fondamentaux / Contenu
  / Technique / Ecommerce (forward refs Phase 1)
- GEO/{Fondamentaux,Contenu,Technique,Ecommerce}/.gitkeep: dossiers
  vides trackés (Phase 1 remplit)

Forward references attendues (warnings Strange New Worlds normaux
jusqu'à Phase 1+).
EOF
)"
```

- [ ] **Step 6.4: Vérifier commit créé**

```bash
cd "/Users/humperdoo/Library/Mobile Documents/iCloud~md~obsidian/Documents"
git log -1 --stat
```

Expected : commit avec 7 fichiers, ~200 lignes ajoutées, message tel qu'écrit.

- [ ] **Step 6.5: git status final**

```bash
cd "/Users/humperdoo/Library/Mobile Documents/iCloud~md~obsidian/Documents"
git status --short | grep -E '^[AM] ' || echo "Phase 0 clean"
```

Expected : `Phase 0 clean` (aucun fichier Phase 0 en attente). Les autres `??` (fichiers untracked du vault préexistants) restent visibles — c'est normal.

---

## Validation gate fin de Phase 0

Avant de passer à Phase 1 (GEO/ contenu) :

- [ ] **V1: Ouvrir Obsidian sur le vault**

Vérifier visuellement :
- `SEO.md` affiche les nouvelles sections sans erreur de rendu
- `GEO.md` affiche le MOC avec callouts
- `Stale Check.md` exécute les 3 queries Dataview (la 3ème devrait lister toutes les notes existantes sans `date_maj_google`)
- Strange New Worlds plugin affiche des indicateurs `unresolved` sur les forward-refs (attendu)

- [ ] **V2: Smart Connections re-index**

Optionnel — Cmd+P → "Smart Connections: Force refresh embeddings" pour que les nouvelles notes soient indexées.

- [ ] **V3: Confirmer commit pushé (si remote)**

```bash
cd "/Users/humperdoo/Library/Mobile Documents/iCloud~md~obsidian/Documents"
git log --oneline origin/main..HEAD 2>/dev/null || git log --oneline -3
```

Expected : commit Phase 0 présent en local. Push remote = décision user (Obsidian Git auto-push généralement actif).

---

## Self-review checklist (interne au plan, déjà fait)

- [x] Spec coverage : §6 Phase 0 (3 notes) couvert par Tasks 2-5 ; pipeline §2 vérifié Task 1
- [x] No placeholders : tout le contenu markdown des notes est inline
- [x] Type consistency : noms de notes wikilinks cohérents entre SEO.md, GEO.md, Stale Check.md
- [x] Path consistency : tous les paths sont absolus avec quotes autour des espaces
- [x] Commit safety : staging explicite (pas `-A`), respect des untracked files préexistants

---

## Execution Handoff

Plan complet sauvegardé. Phases suivantes (1-6) feront chacune l'objet d'un cycle spec court → plan → exécution.

**Pour exécuter Phase 0, deux options :**

1. **Subagent-Driven (recommandé)** — `superpowers:subagent-driven-development` : 1 subagent par task, review entre tasks, fast iteration. Adapté pour Phase 0 (6 tasks indépendantes).

2. **Inline Execution** — `superpowers:executing-plans` : exécution dans cette session, checkpoints batch.

Pour Phase 0 (3 fichiers, faible complexité), **Inline est probablement suffisant** — pas de risque d'interaction entre tasks. Subagent-Driven prend tout son sens en Phase 1+ (10+ notes parallélisables).
