Dossier A-2026-014 · Audit technique
Site vitrine d'un cabinet de conseil
Diagnostic de performance, de sécurité et de visibilité d'un site de 48 pages, suivi d'un plan d'intervention chiffré. Le site perdait la moitié de ses visiteurs mobiles avant l'affichage du premier texte.
- Périmètre et méthode
- Ce qu'il faut retenir
- Performance : où partent les secondes
- Le JavaScript, poste par poste
- Sécurité de surface
- Référencement et lecture par les IA
- Accessibilité
- Préconisations détaillées
- Plan d'intervention et arbitrage
- Références et normes appliquées
- Annexe : ce qui n'a pas été mesuré
- Transparence : coût, temps, accompagnement
Section 1Périmètre et méthode
Quarante-huit pages ont été découvertes par le plan de site. Quinze ont été retenues pour l'analyse détaillée, choisies par gabarit plutôt qu'au hasard : trois pages d'un même modèle suffisent à savoir si un défaut se répète, quinze pages d'un seul modèle n'apprennent rien de plus.
| Famille | Outil | Ce qui est mesuré | Limite |
|---|---|---|---|
| Performance laboratoire | Lighthouse 12.2 | Profil mobile, réseau bridé, 5 passages | Simulation, pas le réel |
| Performance terrain | CrUX p75 | Visiteurs réels, 28 jours glissants | Absent sous ~1000 visites/mois |
| Sécurité de surface | Observatory | En-têtes HTTP publics | Aucun test actif |
| Référencement | 65 contrôles | Méta, structure, balisage, robots | Pas de données de position |
| Accessibilité | axe-core 4.10 | Règles automatiques | Couvre ~40 % des critères |
Ce que cette méthode ne dit pas. Un audit automatique ne remplace ni un test d'intrusion, ni un audit d'accessibilité conforme au RGAA, ni une analyse de positionnement. Les règles automatiques d'accessibilité couvrent environ 40 % des critères : le reste demande un passage humain au clavier et au lecteur d'écran.
Section 2Ce qu'il faut retenir
Le site est correctement construit sur le fond. Son problème est un problème de livraison : il envoie au navigateur beaucoup plus de code que la page n'en utilise, et il l'envoie avant d'afficher quoi que ce soit.
critiqueLe visiteur mobile attend 6,8 secondes
L'affichage du contenu principal (LCP) est mesuré à 6,8 s en laboratoire, 5,2 s au 75e centile des visiteurs réels. Le seuil recommandé par Google est de 2,5 s. Au-delà de trois secondes, plus de la moitié des visiteurs mobiles abandonnent.
critiqueAucun en-tête de sécurité
Le serveur n'envoie ni politique de sécurité du contenu, ni transport forcé en HTTPS, ni protection contre l'inclusion dans un cadre tiers. Cinq en-têtes attendus sur cinq sont absents.
majeureTrente-huit pages sans description
Sur les 48 pages publiées, 38 n'ont pas de méta-description. Google en fabrique une à partir du texte, souvent mal, et le taux de clic s'en ressent.
Section 3Performance : où partent les secondes
Les mesures de laboratoire et de terrain concordent, ce qui écarte l'hypothèse d'un incident ponctuel. Le terrain est systématiquement meilleur que le laboratoire parce que les visiteurs réels ont de meilleures connexions que le profil bridé.
| Signal | Laboratoire | Terrain p75 | Seuil | Verdict |
|---|---|---|---|---|
| Affichage du contenu principal (LCP) | 6,80 s | 5,20 s | 2,50 s | insuffisant |
| Réaction après un clic (INP) | — | 412 ms | 200 ms | insuffisant |
| Stabilité visuelle (CLS) | 0,34 | 0,28 | 0,10 | insuffisant |
| Premier affichage (FCP) | 2,90 s | 2,10 s | 1,80 s | à surveiller |
| Réponse du serveur (TTFB) | 0,64 s | 0,58 s | 0,80 s | correct |
| Blocage du fil principal (TBT) | 1 240 ms | — | 200 ms | insuffisant |
Le temps de réponse du serveur est bon : l'hébergement n'est pas en cause. Tout le retard se joue après l'arrivée du document, dans le navigateur.
La cascade de chargement
Section 4Le JavaScript, poste par poste
Le site expédie 1,01 Mo de JavaScript compressé sur la page d'accueil. L'analyse de couverture montre que 712 Ko ne sont jamais exécutés lors d'une visite normale : du code chargé pour rien.
| Paquet | Transféré | Inutilisé | Cause |
|---|---|---|---|
| Bundle applicatif | 684 Ko | 441 Ko | Aucun découpage par route |
| Bibliothèque de dates | 188 Ko | 184 Ko | Import global pour un seul formatage |
| Carrousel | 142 Ko | 87 Ko | Chargé même sans carrousel sur la page |
| Mesure d'audience | 182 Ko | — | Chargée avant le contenu |
Le défaut le plus coûteux, et le moins visible
Le carrousel et l'assistant de conversation sont déclarés en chargement différé. Le code semble donc correct. Mais un repli temporel les monte malgré tout, sans aucune action du visiteur :
Le correctif ne supprime rien : il retire le repli temporel et garde les écouteurs d'interaction. Un visiteur qui descend jusqu'au carrousel le charge ; celui qui ne descend jamais ne le télécharge plus.
Effet attendu, mesuré sur un site comparable
JavaScript transféré 400 Ko → 173 Ko. Code inutilisé 271 Ko → 70 Ko. Blocage du fil principal 22 ms → 0 ms. Aucune fonction retirée, aucun composant supprimé.
La stabilité visuelle
Le décalage cumulé de 0,34 vient de deux causes identifiées : les images n'ont pas de dimensions déclarées, et la police de titre remplace la police de repli avec des métriques différentes, ce qui fait sauter le texte.
Section 5Sécurité de surface
Cet examen porte sur ce que le serveur annonce publiquement. Aucun test actif n'a été conduit : il faudrait une autorisation écrite et un périmètre contractuel.
| En-tête | État | Ce que son absence permet | Gravité |
|---|---|---|---|
| Strict-Transport-Security | absent | Rétrogradation vers HTTP sur un réseau hostile | haute |
| Content-Security-Policy | absent | Exécution de scripts injectés | haute |
| X-Frame-Options | absent | Inclusion dans un cadre tiers, détournement de clic | moyenne |
| X-Content-Type-Options | absent | Interprétation d'un fichier selon son contenu | moyenne |
| Referrer-Policy | absent | Fuite de l'adresse d'origine vers des tiers | basse |
| Certificat TLS | valide | — | — |
Ces cinq en-têtes se posent au niveau du serveur, sans toucher au code du site. C'est le meilleur rapport entre l'effort et le résultat de tout ce rapport : une demi-journée, et la note de sécurité passe de 25 à 95.
Une précaution. La politique de sécurité du contenu doit être posée en mode observation d'abord. Une politique trop stricte appliquée d'emblée casse silencieusement les scripts tiers légitimes, sans message d'erreur visible.
Section 6Référencement et lecture par les IA
Soixante-cinq contrôles ont été exécutés. Le contenu est bon, la mécanique l'est moins.
| Constat | Pages touchées | Effet | Effort |
|---|---|---|---|
| Méta-description absente | 38 / 48 | Extrait fabriqué par Google | 1 j |
| Même titre sur plusieurs pages | 11 / 48 | Les pages se concurrencent | 0,5 j |
| Contenu lisible sans JavaScript | 0 / 48 | Les IA lisent rarement le JS | 3 j |
| Données structurées | absentes | Pas d'entité déclarée | 0,5 j |
| Fichier llms.txt | absent | Rien ne guide les assistants | 0,2 j |
| Deux pages du plan de site en erreur 404 | 2 / 48 | Budget d'exploration gaspillé | 0,1 j |
Le point qui engage l'avenir
Le site est rendu entièrement côté client : le document HTML servi contient une div vide et un script. Google sait l'exécuter, au prix d'un délai. Les assistants conversationnels, eux, lisent rarement le JavaScript.
Aucun balisage ne garantit d'être cité par une IA, et personne ne devrait le promettre. Mais un site dont le contenu n'est pas lisible sans exécuter du code se prive de toute chance de l'être.
Section 7Accessibilité
Les règles automatiques couvrent environ 40 % des critères. Elles ont relevé 73 occurrences réparties sur 6 types de défauts.
| Défaut | Occurrences | Qui est empêché |
|---|---|---|
| Contraste insuffisant | 31 | Lecture difficile en plein jour, daltonisme |
| Image sans texte alternatif | 18 | Lecteur d'écran |
| Champ de formulaire sans étiquette | 9 | Lecteur d'écran, saisie vocale |
| Ordre des titres rompu | 8 | Navigation par structure |
| Lien sans intitulé explicite | 5 | Navigation par liste de liens |
| Langue du document non déclarée | 2 | Prononciation par synthèse vocale |
Le contraste domine, et c'est une bonne nouvelle : il se corrige dans la feuille de style, sans toucher au contenu. Les 31 occurrences se ramènent à quatre couleurs à ajuster dans la palette.
Section 8Préconisations détaillées
Chaque préconisation porte son critère d'acceptation : la mesure qui dira, après intervention, si elle a produit l'effet attendu. Une recommandation sans critère vérifiable n'est qu'un avis.
Retirer les replis temporels qui chargent le code non demandé
- Constat
- Deux composants déclarés en chargement différé se montent malgré tout après 4 secondes, par un repli requestIdleCallback. 229 Ko sont téléchargés et exécutés sans qu'aucun visiteur ne les demande.
- Préconisation
- Supprimer le repli temporel. Conserver les écouteurs pointerdown, keydown, touchstart et scroll en { once: true, passive: true }.
- Mise en œuvre
- Deux fichiers, une ligne retirée dans chacun. Aucune fonctionnalité supprimée : le composant se monte au premier geste du visiteur.
- Critère d'acceptation
- JavaScript transféré sur l'accueil inférieur à 450 Ko, mesuré par l'onglet Réseau en cache vide, profil mobile. Les deux composants restent fonctionnels après un défilement.
- Risque de régression
- Faible. Un visiteur qui n'interagit jamais ne verra pas le carrousel monter : c'est l'effet recherché. Vérifier que les lecteurs d'écran déclenchent bien l'écouteur clavier.
- Effort · Gain
- 0,5 jour · −229 Ko, −1,2 s sur l'affichage
Poser les cinq en-têtes de sécurité, la politique de contenu en observation
- Constat
- Aucun en-tête de sécurité n'est émis. Le site est exposé à la rétrogradation de protocole, à l'injection de scripts et au détournement de clic.
- Préconisation
- Poser les cinq en-têtes au niveau du serveur. Déployer la politique de sécurité du contenu d'abord en Content-Security-Policy-Report-Only pendant deux semaines, relever les violations, puis basculer en mode appliqué.
- Mise en œuvre
- Bloc server de nginx, aucune modification du code du site. Rechargement de la configuration sans interruption.
- Critère d'acceptation
- Note Mozilla Observatory supérieure ou égale à 90. curl -I renvoie les cinq en-têtes. Zéro violation de politique dans le journal après deux semaines d'observation.
- Risque de régression
- Réel si la politique est appliquée d'emblée : elle casse silencieusement les scripts tiers légitimes, sans message visible. D'où les deux semaines d'observation obligatoires.
- Effort · Gain
- 0,5 jour + 2 semaines d'observation · sécurité 25 → 95
Déclarer les dimensions des images et poser un repli métrique de police
- Constat
- Décalage cumulé de 0,34, soit plus de trois fois le seuil. Deux causes : images sans dimensions et substitution de police aux métriques différentes.
- Préconisation
- Ajouter width et height sur chaque image, ou un conteneur en aspect-ratio. Déclarer un repli métrique avec size-adjust, ascent-override et descent-override calculés sur la fonte réelle.
- Mise en œuvre
- Les valeurs se calculent à partir des métriques de la police (unités par em, ascendante, descendante, hauteur d'x). Elles ne se devinent pas : une valeur approximative déplace le texte au lieu de le stabiliser.
- Critère d'acceptation
- CLS terrain inférieur à 0,10 au 75e centile, après 28 jours de collecte. Aucun saut visible à l'arrivée de la police, vérifié par enregistrement vidéo du chargement.
- Risque de régression
- Faible. Un repli mal calculé se voit immédiatement : le texte change de taille au lieu de rester en place.
- Effort · Gain
- 1 jour · CLS 0,34 → moins de 0,05
Corriger quatre couleurs plutôt que trente et une occurrences
- Constat
- 31 occurrences de contraste insuffisant, qui se ramènent à quatre couleurs de la palette employées à plusieurs endroits.
- Préconisation
- Ajuster les quatre valeurs dans la palette, au lieu de traiter chaque occurrence. Viser un rapport de 4,5:1 pour le texte courant et 3:1 pour les textes de grande taille et les éléments d'interface.
- Mise en œuvre
- Assombrir les teintes de 8 à 14 % suffit dans les quatre cas sans altérer l'identité visuelle. Le gris de légende est le plus éloigné du seuil.
- Critère d'acceptation
- Zéro violation de contraste signalée par axe-core sur les quinze pages échantillonnées. Vérification manuelle de la lisibilité en plein soleil sur un écran de téléphone.
- Risque de régression
- Nul sur le plan technique. À faire valider par la direction si la charte graphique est contractuelle.
- Effort · Gain
- 0,5 jour · 31 défauts corrigés, accessibilité 72 → environ 88
Écrire 38 méta-descriptions et lever 11 titres dupliqués
- Constat
- 38 pages sur 48 n'ont pas de description, 11 partagent leur titre avec une autre page. Google fabrique alors l'extrait, souvent mal, et les pages au même titre se concurrencent.
- Préconisation
- Rédiger une description de 120 à 160 caractères par page, qui annonce le contenu et porte une raison de cliquer. Rendre chaque titre unique, en 30 à 60 caractères, en plaçant le terme distinctif en tête.
- Mise en œuvre
- Travail éditorial, non technique. Le gabarit du site accepte déjà les deux champs : aucun développement n'est nécessaire.
- Critère d'acceptation
- 48 pages sur 48 avec une description unique de 120 à 160 caractères. Zéro titre dupliqué, vérifié par un nouveau passage du crawl.
- Risque de régression
- Aucun risque technique. L'effet sur le taux de clic ne se mesure qu'après plusieurs semaines d'indexation, et dépend de la concurrence.
- Effort · Gain
- 2 jours · référencement 84 → environ 98
Rendre le contenu lisible sans exécuter de JavaScript
- Constat
- Le document servi contient une div vide et un script. Aucune des 48 pages n'est lisible sans exécution de code.
- Préconisation
- Deux voies. Le pré-rendu à la construction convient à un site dont le contenu change peu : il génère un fichier HTML complet par page, sans serveur supplémentaire. Le rendu côté serveur convient si le contenu devient dynamique, au prix d'une infrastructure Node à maintenir.
- Mise en œuvre
- Pour 48 pages stables, le pré-rendu suffit et coûte trois fois moins cher. Il s'ajoute à la chaîne de construction existante sans changer l'hébergement.
- Critère d'acceptation
- curl sur chaque page renvoie le titre, les sous-titres et le corps de texte. Le premier affichage descend sous 1,8 seconde.
- Risque de régression
- Modéré. Le pré-rendu fige l'état au moment de la construction : tout contenu réellement dynamique doit être identifié avant, sous peine de servir une version périmée.
- Effort · Gain
- 6 à 10 jours · condition nécessaire pour être cité par les assistants conversationnels, sans qu'aucun balisage ne le garantisse
Section 9Plan d'intervention et arbitrage
Classé par rapport entre l'effort et le résultat, pas par difficulté technique.
| Lot | Contenu | Effort | Effet attendu |
|---|---|---|---|
| 1 · Immédiat | Les cinq en-têtes de sécurité, en mode observation pour la politique de contenu | 0,5 j | Sécurité 25 → 95 |
| 2 · Semaine 1 | Retrait des replis temporels, découpage par route, import ciblé des dates | 2 j | JS 1,01 Mo → ~310 Ko |
| 3 · Semaine 2 | Dimensions d'images, repli métrique de police, image du hero préchargée | 1 j | CLS 0,34 → < 0,05 |
| 4 · Semaine 3 | Quatre couleurs de la palette, 18 textes alternatifs, 9 étiquettes | 1,5 j | Accessibilité 72 → ~96 |
| 5 · Semaine 4 | 38 méta-descriptions, 11 titres, données structurées, llms.txt | 2 j | Référencement 84 → ~98 |
| 6 · À arbitrer | Rendu serveur ou pré-rendu des 48 pages | 6 à 10 j | Contenu lisible sans JavaScript |
Sept jours pour les lots 1 à 5. Le lot 6 change l'architecture du site et se décide à part : il ne se justifie que si la lecture par les assistants conversationnels devient un objectif commercial.
Section 11Annexe : ce qui n'a pas été mesuré
Un rapport qui ne dit pas ses limites laisse croire qu'il a tout vu.
- Positions dans Google. Aucune donnée de position n'a été relevée : cela demande un accès à la Search Console du site.
- Trafic et conversions. Aucun accès analytique n'a été fourni. Les recommandations portent sur la mécanique, pas sur le rendement.
- Sécurité applicative. Aucun test actif, aucune tentative d'authentification, aucune analyse des dépendances côté serveur. Cela relève d'un test d'intrusion contractualisé.
- Accessibilité réglementaire. Les règles automatiques ne permettent pas de déclarer une conformité RGAA. Un audit déclaratoire demande un passage humain sur chaque critère.
- Les 33 pages non échantillonnées. Quinze pages sur 48 ont été analysées en détail. Les défauts relevés se répètent probablement ailleurs, mais cela reste une hypothèse.
PrestationTransparence : ce que coûte cette intervention
Nous publions le détail de nos prestations parce qu'un audit dont on ne connaît ni le temps ni le prix se juge mal. Les montants ci-dessous sont des ordres de grandeur indicatifs pour une intervention de ce calibre ; seul un devis nominatif engage.
| Poste | Temps | Ce qui est fait | Montant indicatif HT |
|---|---|---|---|
| Audit et diagnostic | 3 j | Relevés sur 2 semaines, rapprochements, entretiens, rédaction du présent rapport | 1 440 € |
| Mise en œuvre | 7 j | Les lots du plan d'intervention, du premier au dernier, avec leurs critères d'acceptation | 3 360 € |
| Accompagnement et transfert | 1 j | Ateliers, documentation, formation de l'équipe, reprise en main sans nous | 480 € |
| Total | 11 j | Taux journalier unique de 480 € HT, sans forfait caché ni frais de dossier | 5 280 € |
Ce qui est compris, et ce qui ne l'est pas
| Compris dans le montant | Hors prestation |
|---|---|
| Le rapport complet, remis en main propre et commenté | Hébergement, noms de domaine, abonnements tiers, facturés au réel par le fournisseur |
| Les ateliers et la formation de l'équipe | Licences logicielles et services d'intelligence artificielle, à la consommation |
| La documentation et les procédures laissées en place | Création de contenu éditorial, photographies, traductions |
| Les points de suivi : 2 points de 45 min à 1 et 3 mois, inclus | Demandes hors périmètre, chiffrées séparément avant d'être engagées |
| Les correctifs sur ce que nous avons livré, sans limite de durée | Évolutions fonctionnelles nouvelles, qui font l'objet d'un devis |
Accompagnement, pédagogie et ressources
Pédagogie
Une séance de 2 h sur la lecture des indicateurs de performance, pour que l'équipe puisse mesurer sans nous. Notre critère de réussite est que l'équipe sache faire sans nous : un client qui dépend de son prestataire pour comprendre son propre outil a été mal servi.
Ressources mises à disposition
Accès à l'outil de mesure interne, jeu de relevés horodatés, grille de contrôle réutilisable. Tout cela reste au client, dans un format lisible et sans nous.
Rendu
Rapport de 18 pages, 1 atelier de restitution, 3 fiches de procédure. Chaque chiffre du rapport renvoie à son relevé horodaté, et chaque préconisation porte son critère d'acceptation : vous pouvez vérifier vous-même que le travail est fait, y compris contre nous.
Ce que nous ne promettons pas
Les gains annoncés par préconisation sont des hypothèses sauf mention contraire explicite, et ils sont présentés comme telles. Nous nous engageons sur les critères d'acceptation, qui sont vérifiables, pas sur un résultat commercial qui dépend aussi de ce que fait le marché.