# 05 — Header HTTP `Link` de découverte absent

> **Spec** : HTTP Link headers for discovery — tier **recommended**
> **Verdict** : 🔴 **FAIL** · **Priorité : P3** · **Effort estimé** : 15 min (config Vercel)

## Constat

Headers de réponse de `/` énumérés via fetch (observation fiable — `Link` n'est pas un header filtré par CORS) :

```
access-control-allow-origin, age, alt-svc, cache-control, cf-cache-status, cf-ray,
content-disposition, content-encoding, content-type, date, last-modified, nel,
priority, referrer-policy, report-to, server, server-timing, vary,
x-content-type-options, x-vercel-cache, x-vercel-id
```

**Aucun header `Link`.** Les ressources machine-readable du site (`/llms.txt`, `/sitemap-index.xml`, et demain le RSS) ne sont découvrables qu'en parsant le HTML ou en devinant les chemins.

## Pourquoi ça compte

Un agent qui fait un simple `HEAD /` (sans télécharger ni parser 240 Ko de HTML) doit pouvoir découvrir les surfaces machine-readable. C'est le point d'entrée le moins cher pour tout consommateur non-navigateur — et le site a justement de bonnes ressources à annoncer (llms.txt déjà en place).

## Correctif

Sur Vercel — `vercel.json` (ou `vercel.ts` avec `routes.…`) :

```json
{
  "headers": [
    {
      "source": "/(.*)",
      "headers": [
        {
          "key": "Link",
          "value": "</llms.txt>; rel=\"describedby\"; type=\"text/markdown\"; title=\"Site index for LLMs\", </sitemap-index.xml>; rel=\"sitemap\"; type=\"application/xml\""
        }
      ]
    }
  ]
}
```

Quand le flux RSS existera ([issue 03](03-machine-readable-formats.md)), ajouter : `</rss.xml>; rel="alternate"; type="application/rss+xml"`.

⚠️ Cloudflare est devant Vercel : vérifier que le header traverse le proxy (il le fait par défaut ; ne pas le dupliquer dans une règle Cloudflare).

## Vérification

```bash
curl -sI https://www.abc-guepes.com/ | grep -i '^link:'
# attendu : Link: </llms.txt>; rel="describedby"; …, </sitemap-index.xml>; rel="sitemap"; …
```
- Tester aussi sur une page interne (`/tarifs`) — le header doit être présent sur toutes les routes (source `/(.*)`).
