| Métrique | Valeur Actuelle | Cible |
|---|---|---|
| First Contentful Paint (FCP) | 4.2s | < 1.8s |
| Largest Contentful Paint (LCP) | 5.6s | < 2.5s |
| Speed Index | 4.8s | < 3.0s |
| Total Blocking Time | 0ms | ✅ |
| Cumulative Layout Shift | 0 | ✅ |
assets/css/styles.cssfonts.googleapis.com/css?family=...État actuel:
Lato:100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i
Open+Sans:100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i
Indie+Flower:100,100i,200,200i...
Oswald:100,100i,200,200i...
Poids réellement utilisés (basé sur l'analyse du CSS):
Raleway: 500 (normal), 500 (italic)Open Sans: 400, 700Montserrat: 400, 700PT Sans: 400 (intégré dans styles.css)Recommandation:
<!-- Remplacer la ligne actuelle par -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Raleway:wght@500&family=Open+Sans:wght@400;700&display=swap" rel="stylesheet">
Économie estimée: ~600-900ms sur le chargement des polices
<link rel="preload" href="https://fonts.googleapis.com/css2?family=Raleway:wght@500&family=Open+Sans:wght@400;700&display=swap" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link href="https://fonts.googleapis.com/css2?family=Raleway:wght@500&family=Open+Sans:wght@400;700&display=swap" rel="stylesheet"></noscript>
Le fichier styles.css contient des déclarations @font-face pour:
Action: Supprimer ces @font-face du CSS car les polices sont déjà chargées via Google Fonts.
<!-- Remplacer -->
<link rel="stylesheet" href="/assets/css/styles.css">
<!-- Par -->
<link rel="preload" href="/assets/css/styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="/assets/css/styles.css"></noscript>
Note: Nécessite d'ajouter les styles critiques en inline dans le <head>.
Les styles suivants doivent être en ligne dans le <head> pour le rendu initial:
Classes WordPress/Avada potentiellement inutilisées:
.wpcf7-* (Contact Form 7 - non utilisé).fusion-* (nombreuses classes du thème Avada).flatpickr-* (datepicker - non utilisé).rtl-* (support RTL - non nécessaire pour le français)Outil recommandé: PurgeCSS avec configuration pour conserver les classes dynamiques.
Fichier: assets/images/hero.jpg (225KB)
Recommandations:
fetchpriority="high" pour l'image LCPsrcset pour différentes tailles<link rel="preload" href="/assets/images/hero.jpg" as="image" fetchpriority="high">
Plusieurs images dépassent 400KB:
Neuf_Detail_5.jpg: 489KBNeuf_Divers_3.jpg: 468KBRehabilitation_Lycee_1.jpg: 459KBRecommandation: Conversion WebP + compression
Le fichier _headers est configuré pour Netlify. Pour Cloudflare Pages:
Option A: Renommer en _headers (supporté par Cloudflare)
Option B: Utiliser _redirects avec les headers Cloudflare
/*
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
/assets/*
Cache-Control: public, max-age=31536000, immutable
/assets/css/*
Content-Type: text/css; charset=utf-8
/*.html
Cache-Control: public, max-age=0, must-revalidate
Dans le dashboard Cloudflare:
Intégrer un plugin Eleventy pour extraire automatiquement le CSS critique:
// .eleventy.js
const critical = require('critical');
eleventyConfig.addTransform('critical', async (content, outputPath) => {
if (outputPath.endsWith('.html')) {
return await critical.generate({
base: '_site/',
html: content,
inline: true,
dimensions: [{ width: 375, height: 667 }] // Mobile
});
}
return content;
});
<head>
<!-- DNS prefetch pour les domaines externes -->
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
<link rel="dns-prefetch" href="https://formspree.io">
<!-- Preconnect pour les ressources critiques -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
</head>
| # | Action | Impact estimé FCP | Impact estimé LCP | Effort |
|---|---|---|---|---|
| 1 | Réduire les poids de polices | -750ms | -900ms | Faible |
| 2 | Charger polices en asynchrone | -300ms | -400ms | Faible |
| 3 | Supprimer @font-face du CSS | -200ms | -300ms | Faible |
| 4 | Charger CSS en asynchrone | -1500ms | -1800ms | Moyen |
| 5 | Extraction CSS critique | -500ms | -600ms | Moyen |
| 6 | Preload image hero | -200ms | -400ms | Faible |
| 7 | Conversion WebP images | - | -200ms | Moyen |
base.njkstyles.css| Police | Poids | Usage |
|---|---|---|
| Raleway | 500 | Titres h1, h2, h3 |
| Open Sans | 400, 700 | Corps de texte, paragraphes |
| Montserrat | 400 | Barres de progression (about) |
.fusion-* (layout header/footer).hero-* (hero section).container (layout principal).service-* (cartes de services).contact-* (formulaire).about-* (page about)