RGPD et sites web : guide de conformité pour entreprises belges 2025
Le RGPD (Règlement Général sur la Protection des Données) s'applique à **toute entreprise belge collectant des données personnelles** en ligne. Les amendes peuvent atteindre **20 millions d'euros ou 4% du chiffre d'affaires**. Ce guide vous aide à mettre votre site en conformité.
Obligations légales pour sites belges
Qu'est-ce qu'une donnée personnelle ?
Selon le RGPD, une donnée personnelle est toute information permettant d'identifier une personne :
- Nom, prénom, email, téléphone
- Adresse IP, cookies
- Numéro de carte bancaire
- Photos, vidéos
- Données de navigation
Les 7 principes du RGPD
- **Licéité** : Base légale claire (consentement, contrat, intérêt légitime)
- **Finalité** : Objectifs définis et explicites
- **Minimisation** : Collecter uniquement le nécessaire
- **Exactitude** : Données à jour et correctes
- **Conservation limitée** : Durées définies
- **Intégrité** : Sécurité et confidentialité
- **Responsabilité** : Documenter la conformité
Pages légales obligatoires
1. Politique de confidentialité
**Contenu minimal :**
# Politique de confidentialité
## Responsable du traitement
[Nom entreprise]
[Adresse]
Numéro BCE : [...]
Email : [...]
## Données collectées
- Formulaire de contact : nom, email, téléphone, message
- Analytics : pages visitées, durée, appareil (anonymisé)
- Cookies : préférences utilisateur, session
## Finalités
- Répondre à vos demandes
- Améliorer le site web
- Statistiques de fréquentation
## Base légale
- Consentement (formulaires)
- Intérêt légitime (analytics anonyme)
## Durée de conservation
- Données contact : 3 ans après dernier échange
- Analytics : 26 mois
- Cookies : 13 mois maximum
## Vos droits RGPD
- Droit d'accès
- Droit de rectification
- Droit à l'effacement
- Droit à la portabilité
- Droit d'opposition
- Droit à la limitation
Contact DPO : [email]
## Sous-traitants
- Hébergeur : [nom] (localisation UE)
- Email : [nom] (localisation UE)
- Analytics : [nom]
## Sécurité
- HTTPS activé
- Accès restreints
- Backups chiffrés
- Audit régulier
## Modifications
Dernière mise à jour : [date]
2. Politique de cookies
**Template implémentation :**
// components/CookieBanner.tsx
'use client';
import { useState, useEffect } from 'react';
type ConsentType = 'all' | 'essential' | null;
export function CookieBanner() {
const [show, setShow] = useState(false);
const [showDetails, setShowDetails] = useState(false);
useEffect(() => {
const consent = localStorage.getItem('cookie-consent');
if (!consent) setShow(true);
}, []);
const saveConsent = (type: ConsentType) => {
localStorage.setItem('cookie-consent', type);
// Activer Google Analytics seulement si consentement complet
if (type === 'all' && window.gtag) {
window.gtag('consent', 'update', {
analytics_storage: 'granted',
ad_storage: 'denied', // Pas de pub
});
}
setShow(false);
};
if (!show) return null;
return (
<div className="cookie-banner">
<div className="cookie-content">
<h3>Respect de votre vie privée</h3>
<p>
Nous utilisons des cookies essentiels pour le fonctionnement du site
et des cookies analytiques (anonymes) pour améliorer votre expérience.
</p>
{showDetails && (
<div className="cookie-details">
<h4>Cookies essentiels (obligatoires)</h4>
<ul>
<li>Session utilisateur</li>
<li>Panier d'achat</li>
<li>Sécurité CSRF</li>
</ul>
<h4>Cookies analytiques (optionnels)</h4>
<ul>
<li>Google Analytics (anonymisé)</li>
<li>Pages visitées</li>
<li>Temps de visite</li>
</ul>
</div>
)}
<div className="cookie-actions">
<button onClick={() => setShowDetails(!showDetails)}>
{showDetails ? 'Masquer' : 'En savoir plus'}
</button>
<button onClick={() => saveConsent('essential')}>
Essentiel uniquement
</button>
<button onClick={() => saveConsent('all')} className="primary">
Accepter tout
</button>
</div>
<a href="/politique-confidentialite">Politique de confidentialité complète</a>
</div>
</div>
);
}
Formulaires conformes RGPD
Checklist formulaire de contact
// components/ContactForm.tsx
'use client';
import { useState } from 'react';
export function ContactForm() {
const [consent, setConsent] = useState(false);
const [newsletter, setNewsletter] = useState(false);
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
if (!consent) {
alert('Veuillez accepter la politique de confidentialité');
return;
}
// Envoi formulaire...
};
return (
<form onSubmit={handleSubmit}>
<input type="text" name="name" required placeholder="Nom *" />
<input type="email" name="email" required placeholder="Email *" />
<textarea name="message" required placeholder="Message *" />
{/* Consentement obligatoire */}
<label>
<input
type="checkbox"
checked={consent}
onChange={(e) => setConsent(e.target.checked)}
required
/>
J'accepte que mes données soient utilisées pour répondre à ma demande
conformément à la <a href="/politique-confidentialite">politique de confidentialité</a> *
</label>
{/* Consentement optionnel séparé */}
<label>
<input
type="checkbox"
checked={newsletter}
onChange={(e) => setNewsletter(e.target.checked)}
/>
J'accepte de recevoir des actualités par email (optionnel)
</label>
<button type="submit" disabled={!consent}>
Envoyer
</button>
</form>
);
}
**Points clés :**
- ✓ Consentement actif (case à cocher)
- ✓ Finalité claire
- ✓ Lien vers politique de confidentialité
- ✓ Consentement newsletter séparé
- ✓ Champs obligatoires marqués (*)
Droits des utilisateurs
Mise en œuvre des droits RGPD
**1. Droit d'accès**
Créez une page /mes-donnees avec authentification :
// app/mes-donnees/page.tsx
export default async function MyDataPage() {
const user = await getCurrentUser();
return (
<div>
<h1>Mes données personnelles</h1>
<section>
<h2>Informations de compte</h2>
<p>Nom : {user.name}</p>
<p>Email : {user.email}</p>
<p>Créé le : {user.createdAt}</p>
</section>
<section>
<h2>Historique</h2>
{/* Afficher commandes, messages, etc. */}
</section>
<section>
<h2>Actions disponibles</h2>
<button>Télécharger mes données (JSON)</button>
<button>Modifier mes informations</button>
<button className="danger">Supprimer mon compte</button>
</section>
</div>
);
}
**2. Droit à l'effacement**
// app/api/account/delete/route.ts
import { NextRequest, NextResponse } from 'next/server';
export async function POST(request: NextRequest) {
const user = await getCurrentUser(request);
if (!user) {
return NextResponse.json({ error: 'Non authentifié' }, { status: 401 });
}
// Anonymiser plutôt que supprimer (pour historique comptable)
await prisma.user.update({
where: { id: user.id },
data: {
name: 'Utilisateur supprimé',
email: `deleted-${user.id}@anonymized.local`,
phone: null,
deletedAt: new Date(),
},
});
// Supprimer données annexes non obligatoires
await prisma.userPreferences.deleteMany({ where: { userId: user.id } });
return NextResponse.json({ success: true });
}
Registre des traitements
**Template Excel/Notion :**
| Traitement | Finalité | Base légale | Données | Durée | Destinataires |
|---|---|---|---|---|---|
| Contact client | Répondre demandes | Consentement | Nom, email, tel, message | 3 ans | Équipe commerciale |
| Newsletter | Communication marketing | Consentement | Jusqu'à désinscription | Plateforme email | |
| Analytics | Statistiques site | Intérêt légitime | IP anonyme, pages | 26 mois | Google (USA) |
| E-commerce | Traitement commandes | Contrat | Nom, adresse, paiement | 10 ans (compta) | Stripe, transporteur |
Sanctions et contrôles
Exemples d'amendes belges
- **2024** : E-commerce belge — 150 000€ (absence politique cookies)
- **2023** : Plateforme SaaS — 85 000€ (fuite données non notifiée)
- **2023** : Site vitrine PME — 5 000€ (pas de consentement cookies)
Si contrôle de l'APD (Autorité Protection Données)
**Procédure :**
- Notification par courrier recommandé
- Demande de documents (30 jours pour répondre)
- Inspection possible sur site ou en ligne
- Rapport avec recommandations
- Mise en demeure si non-conformité
- Sanction si non-régularisation
**Documents à préparer :**
- Registre des traitements
- Politiques de confidentialité/cookies
- Preuve consentements
- Contrats sous-traitants (DPA)
- Procédures sécurité
- Analyse d'impact (si nécessaire)
Checklist conformité RGPD
Niveau 1 : Obligatoire
- ✓ Politique de confidentialité accessible
- ✓ Bannière cookies avec consentement
- ✓ Formulaires avec cases à cocher actives
- ✓ HTTPS activé sur tout le site
- ✓ Registre des traitements tenu à jour
- ✓ Droits utilisateurs implémentés (accès, suppression)
- ✓ Contrats sous-traitants (DPA)
- ✓ Procédure notification violations
Niveau 2 : Recommandé
- ✓ DPO désigné (obligatoire si > 250 employés ou données sensibles)
- ✓ Analyse d'impact (AIPD) si traitement à risque
- ✓ Pseudonymisation/chiffrement données sensibles
- ✓ Tests intrusion réguliers
- ✓ Formation équipe au RGPD
- ✓ Audit externe annuel
Outils pratiques
**Générateurs :**
- **CNIL** : Modèles gratuits politique confidentialité
- **iubenda** : Générateur cookies/privacy (payant)
- **Cookiebot** : Scan cookies + bannière conforme
**Gestion consentements :**
- **Axeptio** (français)
- **Cookiebot**
- **OneTrust**
**DPO externe :**
- AvocatsGDPR.be
- DPO-Belgique.be
**Besoin d'aide pour la conformité RGPD ?** Smidjan audite votre site et vous accompagne dans la mise en conformité complète.
Besoin d'accompagnement ?
Smidjan vous aide à mettre en place ces solutions pour votre entreprise en Belgique.
Discutons de votre projet →