# Workflow pages SEO locales

## Objectif

Les pages locales doivent rester générées en masse, mais éviter l'effet "copier-coller" entre villes et départements.
Le workflow est centralisé dans `src/lib/localSeoWorkflow.ts` et dans `src/content/seo/generate.ts`.

## Images stock gratuites

- Source actuelle : Unsplash, photos gratuites utilisables en commercial selon la licence Unsplash.
- Les crédits et pages sources sont versionnés dans `GEO_HERO_IMAGES` et `STOCK_IMAGES` (`src/lib/localSeoWorkflow.ts`).
- Le site n'utilise pas de tirage aléatoire : la photo est choisie par hash du slug, donc une page garde toujours le même visuel.
- Le hero choisit d'abord une photo géographique : slug exact, puis département, puis région.
- Toutes les régions présentes dans `zonesGenerated.json` doivent avoir une entrée `GEO_HERO_IMAGES` : cela garantit une image géographique pour chaque ville, zone, département et région.
- La section "Activités principales" choisit une image métier différente par carte secteur (`Logistique`, `Portuaire`, `Aéroportuaire`, `Industriel`, etc.).
- Les photos métier ne sont utilisées en hero qu'en dernier recours technique, si aucune photo géographique n'existe.
- Une image peut toujours être forcée côté data via `zoneData.content.secteurs[].image`.

## Titles SEO

Le `<title>` est généré par `buildLocalMetaTitle()` :

- Ville : `Cool roof Lyon : application de peinture réfléchissante haut de gamme à Lyon`
- Département : `Cool roof Rhône : application de peinture réfléchissante haut de gamme dans le Rhône`
- Région : `Cool roof Auvergne-Rhône-Alpes : peinture réfléchissante haut de gamme en Auvergne-Rhône-Alpes`

## Différenciation ville / département

Le workflow sépare volontairement les angles :

- Page ville : diagnostic local, bâtiment ou zone d'activité précise, action sur une toiture identifiée.
- Page département : plan de déploiement, priorisation des zones d'activité, portefeuille de bâtiments, réseau d'applicateurs.

Les textes générés suivent cette séparation dans :

- le hero (`buildLocalHeroCopy`)
- les meta descriptions (`buildLocalMetaDescription`)
- les blocs visibles "Activités / Problème / Solution / Preuve" (`buildZoneContent`)
- le contenu SEO long (`buildSeoContent`)

Le rendu du dossier SEO (`SEOContentSection`) ajoute ensuite :

- un paragraphe territorial différencié selon ville, département ou région
- du gras sur les termes techniques et chiffres clés
- de l'italique sur les bénéfices ou points de méthode
- un paragraphe de maillage interne dense qui reprend toutes les pages disponibles dans `zoneData.maillage`, plus le département et la région quand ils existent

## Accords géographiques

Les prépositions sont centralisées dans `src/lib/zoneGeo.ts`.
Les villes classiques utilisent `à`, `au` ou `aux`, mais les zones d'activité peuvent avoir une formulation dédiée :

- `Lyon` → `à Lyon`
- `Couloir de la chimie` → `dans la Vallée de la chimie`
- `Garonor` → `sur la plateforme Garonor`
- `Courtabœuf` → `dans la zone de Courtabœuf`

Les titles, H1, alt d'images et blocs locaux utilisent ces helpers pour éviter les accords faux.

## Ajouter des images

1. Choisir une photo gratuite, sans marque visible si possible.
2. Ajouter une entrée `STOCK_IMAGES` avec `key`, `categories`, `photo`, `alt`, `credit`, `source`.
3. Pour un hero, ajouter plutôt une entrée `GEO_HERO_IMAGES` avec `slugs`, `departements` ou `regions`.
4. Utiliser une catégorie existante ou en ajouter une dans `sectorCategory()` pour les cartes d'activités.
5. Vérifier une page ville et une page département avec Playwright.
