## Résumé

Construction du **système de SEO programmatique** Covalba (cool roof / peinture réflective CovaTherm) : un template unique (`LocalSEO.tsx`, routé par slug) alimenté par un pipeline de données, qui génère l'ensemble des pages locales.

Pipeline : `public/documents/covalba-zones-seo-DEMO.xlsx` → `scripts/generate-zones.py` → `src/data/zonesGenerated.json` → registry `src/data/zones.ts` → composants.

### Couverture — **349 zones, 100 % rédigées-main** au format riche

| Type | Volume | Détail |
|---|---|---|
| **Villes FR** | 224 | format riche (intro 2 paragraphes + 6 sections, ~700 mots) |
| **Départements** | 93 | panorama départemental : agrège pôles/villes-filles + 2 secteurs dominants, sans dupliquer les villes |
| **Régions/pays FR** | 13 | vue d'ensemble régionale, maillage = leurs départements |
| **Suisse** | 1 région + 8 villes | romandes : Genève, Lausanne, Sion, Fribourg, Neuchâtel, La Chaux-de-Fonds, Yverdon, Vevey |
| **Belgique** | 1 région + 8 villes | wallonnes/Bxl : Bruxelles, Liège, Charleroi, Namur, Mons, La Louvière, Tournai, Verviers |

Restent hardcodées : seulement les 3 démos premium (Roissy, Lyon, Marseille).

### Points clés

- **Format riche rétro-compatible** : `generate-zones.py` lit jusqu'à 8 sections ; `SEOContentSection.tsx` découpe le contenu en paragraphes sur ligne vide (`\n\n`).
- **Anti-duplication SEO** : départements et régions adoptent un angle « vue d'ensemble » distinct des pages villes (panorama, agrégation de secteurs, maillage interne).
- **Climat** : zones H1/H2/H3 par ville (Météo-France DRIAS, horizon 2046). Pour la Suisse et la Belgique, **pas de DRIAS** (données FR uniquement) → cadrage climatique descriptif (Plateau lémanique, Valais, Arc jurassien, océanique belge).
- **Dispositifs franco-français** (Décret tertiaire / Prime CEE) automatiquement **masqués** pour `pays != FR` ; les pages CH/BE ont une section 6 « Accompagnement Covalba » dédiée. Fix d'un faux positif du filtre `\bprime` (« priment » → « prévalent »).
- **Suisse dé-hardcodée** : `zoneSuisseDemo` supprimé de `zones.ts`, basculée dans le pipeline xlsx comme la Belgique.

## Test plan

- [x] `npx tsc --noEmit` sans erreur
- [x] `scripts/generate-zones.py` → 349 zones, maillage villes FR = 16 partout
- [x] Conformité JSON par lot : 6 sections, intro 2 paragraphes, sections multi-paragraphes
- [x] Rendu headless Playwright : section « Dossier » à 6 h3 / 15 p, 0 erreur page
- [x] Masquage CEE/Décret vérifié sur CH/BE (`mentionsCEE=false`), 6 sections rendues
- [ ] Bandes 15 %/45 % & disclaimers à valider côté client (hors scope de cette PR)

🤖 Generated with [Claude Code](https://claude.com/claude-code)
