# SEO et partage social

Les pages publiques SALSABIL Madrassas génèrent leurs balises SEO depuis les templates Twig publics.

## Balises générées

Le partial `templates/public/_seo.html.twig` centralise :

- `title`
- `meta description`
- `link rel="canonical"`
- `meta robots`
- Open Graph : `og:title`, `og:description`, `og:type`, `og:url`, `og:image`, `og:site_name`, `og:locale`
- Twitter Card : `twitter:card`, `twitter:title`, `twitter:description`, `twitter:image`

Les layouts publics exposent les blocs suivants :

- `seo_title`
- `seo_description`
- `seo_canonical`
- `seo_image`
- `seo_type`
- `seo_robots`
- `seo_extra`

Si une page ne surcharge pas ces blocs, le layout utilise les valeurs de l’école.

## Plateforme

La page plateforme utilise :

```txt
https://madrassas.salsabil.cm/
```

avec une description globale de la plateforme et une image de partage par défaut.

## Écoles

Les pages écoles utilisent toujours le domaine canonique généré par `PublicUrlGenerator`.

Exemples :

```txt
https://alqamar.salsabil.cm/
https://darulilm.salsabil.cm/
```

Un alias comme `daroulilm.salsabil.cm` ne doit pas apparaître dans `canonical`, `og:url` ou le sitemap. Il redirige d’abord en 301 vers `darulilm.salsabil.cm`, puis la page canonique est rendue.

## Image de partage

Pour une école, l’image Open Graph est choisie dans cet ordre :

1. image hero de l’école ;
2. logo de l’école ;
3. image de marque par défaut `assets/brand/logo-salmad-dark.png`.

Les URLs d’images sont toujours absolues, par exemple :

```txt
https://darulilm.salsabil.cm/uploads/ecoles/daroul-ilm-hero.jpg
```

## Personnaliser le SEO d’une école

Pour l’instant, le MVP réutilise les champs existants :

- `nom`
- `description`
- `logo`
- `heroImage`
- `slogan`

Si un besoin éditorial plus fin apparaît, on pourra ajouter plus tard des champs dédiés comme `seoTitle`, `seoDescription` et `seoImage`. Ce n’est pas nécessaire pour le MVP actuel.

## Sitemap

Le sitemap dynamique est disponible ici :

```txt
https://madrassas.salsabil.cm/sitemap.xml
```

Il inclut :

- la page plateforme ;
- la page de connexion ;
- la page publique de chaque école active ;
- la page inscription de chaque école active.

Il n’inclut pas les alias de domaines.

## Robots.txt

Le fichier robots est disponible ici :

```txt
https://madrassas.salsabil.cm/robots.txt
```

Il autorise les pages publiques, bloque les espaces internes et référence le sitemap central.

Espaces bloqués :

```txt
/platform
/school
/admin
/dashboard
```

Les layouts admin ajoutent aussi :

```html
<meta name="robots" content="noindex,nofollow">
```

## Tester les aperçus sociaux

Après déploiement et migration, vérifier le HTML source des pages :

```txt
https://madrassas.salsabil.cm/
https://alqamar.salsabil.cm/
https://alqamar.salsabil.cm/inscription
https://darulilm.salsabil.cm/
https://darulilm.salsabil.cm/inscription
```

À vérifier :

- `title` correct ;
- `meta description` présente ;
- `canonical` sur le domaine canonique ;
- `og:title` et `og:description` ;
- `og:image` absolue ;
- `og:url` canonique ;
- `twitter:card` à `summary_large_image`.

Outils utiles :

- Facebook Sharing Debugger ;
- LinkedIn Post Inspector ;
- Telegram ou WhatsApp en collant directement l’URL dans une conversation de test.

Les plateformes sociales peuvent mettre les aperçus en cache. Après un changement d’image ou de description, utiliser leurs outils de debug pour forcer un nouveau scrape.
