# Déployer un site statique

Un site statique est un dossier de fichiers déjà prêts : HTML, CSS, JavaScript et images. Aucun build n’est nécessaire. Une seule commande suffit.

**Résultat attendu** : une adresse de production qui sert ton dossier, avec une page 404 personnalisée si tu en fournis une.

**Avant de commencer** : une clé d’API dans `VERCEL_TOKEN`, et un dossier qui contient un `index.html` à sa racine.

## Déployer le dossier

```bash
cd mon-site
vercel --api https://api.host.hgdc.ch deploy --prod
```

Le premier déploiement crée le projet, sous le nom du dossier, et relie le dossier au projet. Les suivants republient ce qui a changé : un fichier déjà connu de l’organisation n’est jamais renvoyé.

**Vérification** : l’adresse de production répond avec `index.html`.

## Structure attendue

```text
mon-site/
├── index.html
├── a-propos.html
├── 404.html
├── styles.css
└── images/
    └── logo.svg
```

- Le dossier doit contenir un `index.html` à sa racine.
- Un dossier qui ressemble à des sources, avec un `package.json` mais sans `index.html`, est refusé. Construis-le avec `vercel build` et envoie-le avec `--prebuilt`. Voir [Déployer un framework](/docs/guides/deployer-un-framework/).
- Les fichiers et dossiers cachés, comme `.env` ou `.git`, ne sont jamais servis.
- `404.html` sert de page d’erreur.

## Servir un sous-dossier

Si les fichiers à publier sont dans un sous-dossier, comme `public/` ou `dist/`, lance la commande depuis ce sous-dossier (`cd dist`, puis `deploy`). Avec un projet relié à GitHub, indique le dossier de sortie dans les réglages de build du projet.

## URL propres et redirections

Ajoute un `vercel.json` à la racine du dossier pour servir `/a-propos` sans `.html`, ou pour rediriger une ancienne adresse :

```json
{
  "cleanUrls": true,
  "redirects": [
    { "source": "/ancienne-page", "destination": "/a-propos", "permanent": true }
  ]
}
```

Toutes les options sont dans [vercel.json](/docs/reference/vercel-json/).

## Si ça ne marche pas

- Le site répond `404` : le dossier envoyé n’a pas d’`index.html` à sa racine. Voir [Dépannage](/docs/guides/depannage/#mon-site-affiche-404).
- `/a-propos` répond `404` alors que `a-propos.html` existe : active `cleanUrls` dans `vercel.json`.
