# 01 — Redirection apex → www manquante

> **Spec** : Redirects (301/302/308) — tier **required**
> **Verdict** : 🔴 **FAIL** · **Priorité : P1** — seul item *required* en échec franc de tout l'audit
> **Effort estimé** : ~15 min (configuration hébergeur/DNS, zéro code applicatif)

## Problème

`https://abc-guepes.com/` (domaine apex, sans `www`) **sert l'intégralité du site en HTTP 200** au lieu de rediriger en 301 vers `https://www.abc-guepes.com/`.

## Preuves

- Deux sondes indépendantes sur l'apex ont retourné du contenu complet, sans redirection :
  - `https://abc-guepes.com/` → 200, homepage complète (`Destruction nid de guêpes et frelons en Île-de-France | ABC Guêpes`)
  - `https://abc-guepes.com/robots.txt` → 200, fichier robots complet
- Le robots.txt tente de compenser avec une directive `Host: https://www.abc-guepes.com` — **non standard, ignorée par tous les moteurs** (directive legacy Yandex, dépréciée en 2018). Voir [issue 10](10-robots-sitemap.md).
- Atténuation partielle existante : les `rel=canonical` de toutes les pages pointent bien vers l'hôte `www`. Mais un canonical est un **hint**, pas une directive — la spec exige que la canonicalisation d'hôte soit faite par **301 au niveau serveur/edge**.

## Impact

- Le site existe en **double sur deux hôtes** : chaque URL a un doublon crawlable. Les signaux (liens externes, mentions) qui pointent vers l'apex se diluent au lieu de se consolider sur `www`.
- Google peut choisir d'indexer des URLs apex, fragmentant l'historique de ranking.
- Budget de crawl gaspillé sur 665 × 2 URLs.

## Correctif

Configurer au niveau hébergeur/CDN (pas dans Gatsby) une redirection **301 permanente, en un seul saut**, qui préserve le chemin :

```
http://abc-guepes.com/*    → 301 → https://www.abc-guepes.com/*   (direct, pas via https://abc-guepes.com)
https://abc-guepes.com/*   → 301 → https://www.abc-guepes.com/*
http://www.abc-guepes.com/* → 301 → https://www.abc-guepes.com/*
```

Exemples selon l'hébergeur :

**Netlify** (`netlify.toml`) :
```toml
[[redirects]]
  from = "https://abc-guepes.com/*"
  to = "https://www.abc-guepes.com/:splat"
  status = 301
  force = true
```

**Vercel** : ajouter `abc-guepes.com` comme domaine et cocher « Redirect to www.abc-guepes.com » (308).

**Cloudflare** : Bulk Redirects ou Redirect Rule — `(http.host eq "abc-guepes.com")` → `concat("https://www.abc-guepes.com", http.request.uri.path)`, 301, preserve query string.

**Apache/Nginx** : vhost dédié à l'apex avec `return 301 https://www.abc-guepes.com$request_uri;`.

Ensuite : supprimer la ligne `Host:` du robots.txt (devenue doublement inutile).

## Vérification

```bash
curl -sI https://abc-guepes.com/            # attendu : 301 + Location: https://www.abc-guepes.com/
curl -sI http://abc-guepes.com/tarifs       # attendu : 301 direct vers https://www.abc-guepes.com/tarifs (1 saut)
curl -sI https://abc-guepes.com/contact     # attendu : 301, chemin préservé
curl -sI https://www.abc-guepes.com/        # attendu : 200
```

⚠️ Le chaînage `http apex → https apex → www` (2 sauts) est un anti-pattern : vérifier que chaque variante atteint la cible finale **en un seul saut**.

Note : les redirections `http→https` n'ont **pas pu être observées** pendant l'audit (l'outillage force l'upgrade https). Les vérifier avec les curl ci-dessus par la même occasion.
