Guide complet d'optimisation d'images Astro : 5 astuces pour accélérer votre site de 50 %

Le mois dernier, j’ai lancé un blog technique avec Astro. En prod, le premier affichage mettait 6 secondes ! Des images de 2 à 3 Mo chacune, et sur mobile il fallait attendre longtemps avant de voir quoi que ce soit. Franchement, les perfs étaient catastrophiques.
J’ai passé deux jours sur l’optimisation d’images Astro : composant Image, formats, lazy loading, intégration CDN. Résultat : premier affichage à 1,8 s, Lighthouse performance de 62 à 95. Voir ce 95 m’a vraiment motivé.
Dans cet article, je partage les pièges et ce qui a marché :
- Configuration complète du composant Image Astro
- Comment choisir entre JPEG, PNG, WebP et AVIF
- Bonnes pratiques de lazy loading
- Intégration Cloudflare CDN pas à pas
- Dépannage des problèmes courants
À la fin, vous pourrez aussi accélérer votre site Astro de plus de 50 %. C’est parti.
Pourquoi l’optimisation d’images Astro est si importante
Beaucoup pensent que ce n’est pas grave d’attendre quelques secondes de plus. Pourtant, les images représentent souvent 60 à 70 % du poids d’une page — le principal frein aux performances.
Sur mon ancien blog, une couverture non compressée faisait 2,5 Mo ; avec quelques captures dans l’article, la page dépassait facilement 5 à 6 Mo. Les visiteurs attendaient plusieurs secondes rien que pour les images, et le taux de rebond était effrayant.
Google impose des exigences strictes sur le chargement des images
Dans les Core Web Vitals, le LCP (Largest Contentful Paint) mesure le moment où le contenu principal est affiché. Google exige un LCP sous 2,5 s ; au-delà de 4 s, c’est considéré comme mauvais.
Pour la plupart des sites, le LCP correspond à la grande image de couverture ou de hero. Images lentes = LCP élevé = impact SEO.
Résultats concrets de l’optimisation
Avant / après sur mon blog :
Avant :
- Premier affichage : 6,2 s
- Lighthouse performance : 62
- Poids total des images : environ 8 Mo
- LCP : 4,8 s
Après :
- Premier affichage : 1,8 s (+70 %)
- Lighthouse performance : 95 (+53 %)
- Poids total des images : environ 1,2 Mo (-85 %)
- LCP : 1,3 s (+73 %)
Au-delà de mes attentes. Surtout, le taux de rebond a baissé d’environ 35 % — les visiteurs restent plus longtemps.
Astro est pensé pour la performance ; gâcher tout ça à cause d’images mal optimisées serait dommage. Voyons comment corriger ça étape par étape.
Guide complet du composant Image Astro
Astro fournit <Image /> et <Picture /> pour optimiser les images. Au début, la doc sur widths, quality, inferSize m’a perdu ; il a fallu tester pour comprendre.
Usage de base : Image vs Picture
Le composant <Image /> est le plus courant :
---
import { Image } from 'astro:assets';
import coverImage from '../assets/blog-cover.jpg';
---
<Image
src={coverImage}
alt="Image de couverture du blog"
width={1200}
height={630}
/>
Il gère automatiquement :
- La compression
- La conversion WebP (par défaut)
- Les images responsives
- L’optimisation du chargement
<Picture /> va plus loin avec plusieurs formats en repli :
---
import { Picture } from 'astro:assets';
import heroImage from '../assets/hero.jpg';
---
<Picture
src={heroImage}
formats={['avif', 'webp', 'jpeg']}
alt="Image hero"
width={1920}
height={1080}
/>
Le navigateur charge d’abord l’AVIF (le plus léger), sinon WebP, sinon JPEG. Performance et compatibilité.
Propriétés clés
widths — largeurs responsives
<Image
src={image}
widths={[400, 800, 1200]}
sizes="(max-width: 768px) 400px, (max-width: 1024px) 800px, 1200px"
alt="Image responsive"
/>
Astro génère trois tailles ; le navigateur choisit selon l’écran. Mobile = petite image, desktop = grande, moins de données et plus rapide.
quality — contrôle de la qualité
<Image
src={image}
quality="mid" // ou un nombre : quality={80}
alt="Illustration d'article"
/>
low: vignettes, arrière-plansmid: la plupart des cas (recommandé)high: exigence visuelle élevée- Nombre (0-100) : contrôle fin
J’utilise souvent mid ou 80 : visuellement identique, fichier 30 à 40 % plus léger.
inferSize — images distantes
<Image
src="https://example.com/image.jpg"
inferSize={true}
alt="Image distante"
/>
Si vous ne connaissez pas les dimensions d’une image distante, inferSize les récupère automatiquement. Ça m’a sauvé plusieurs fois.
loading — lazy loading
<!-- Image above the fold, chargement immédiat -->
<Image src={hero} loading="eager" alt="Image hero" />
<!-- Sous le fold, lazy loading -->
<Image src={content} loading="lazy" alt="Image de contenu" />
format — format de sortie
<Image
src={image}
format="webp" // webp | avif | jpeg | png
alt="Format spécifié"
/>
Images locales vs distantes
Images locales (recommandé)
---
// Dans src/assets/ ou src/images/
import myImage from '../assets/photo.jpg';
---
<Image src={myImage} alt="Image locale" />
Optimisation, compression et bundling automatiques — à privilégier.
Images distantes
---
// Configurer les domaines autorisés dans astro.config.mjs
---
<Image
src="https://images.unsplash.com/photo-xxx"
width={800}
height={600}
alt="Image distante"
/>
Dans astro.config.mjs :
export default defineConfig({
image: {
domains: ['images.unsplash.com', 'cdn.example.com']
}
});
Images dans public/
<!-- public/logo.png → /logo.png -->
<img src="/logo.png" alt="Logo" />
Attention : les fichiers dans public/ ne sont pas optimisés — réservés aux logos, favicons, petits fichiers.
Exemples concrets
Configuration réelle de mon blog :
Couverture d’article (hero, preload)
---
import { Image } from 'astro:assets';
import coverImage from '../assets/blog-cover.jpg';
---
<Image
src={coverImage}
alt="Guide complet d'optimisation d'images Astro"
width={1200}
height={630}
format="webp"
quality={85}
loading="eager"
class="blog-cover"
/>
Images dans l’article (lazy loading)
<Image
src={screenshot}
alt="Capture d'écran de configuration"
width={800}
height={450}
format="webp"
quality="mid"
loading="lazy"
/>
Avatar auteur (petite icône, preload)
<Image
src={avatar}
alt="Avatar de l'auteur"
width={48}
height={48}
format="webp"
loading="eager"
/>
Passons au choix des formats — un sujet qui fait souvent hésiter.
Guide complet du choix des formats d’image
JPEG, PNG, WebP, AVIF… lequel choisir ? Après quelques tests, voici ce que j’en retiens.
Comparaison des quatre formats principaux
| Format | Compression | Taille | Support navigateur | Cas d’usage |
|---|---|---|---|---|
| JPEG | Avec perte | Moyenne | 100 % | Photos, images complexes |
| PNG | Sans perte | Plus lourde | 100 % | Transparence |
| WebP | Avec/sans perte | Légère | 97 %+ | Usage général (recommandé) |
| AVIF | Avec/sans perte | Minimale | 90 %+ | Compression maximale |
JPEG — format historique, compatibilité totale
- Avantages : support universel, bonne compression
- Inconvénients : pas de transparence, moins efficace que WebP
- Idéal : illustrations de blog, photos produit, portraits
PNG — sans perte, transparence
- Avantages : qualité intacte, transparence
- Inconvénients : fichiers 2 à 3× plus lourds que JPEG
- Idéal : logos, icônes, fond transparent
WebP — poussé par Google, excellent compromis
- Avantages : ~30 % plus léger que JPEG, transparence, bon support
- Inconvénients : quelques vieux navigateurs (en 2025, rare)
- Idéal : la plupart des cas — mon choix par défaut
AVIF — format récent, meilleure compression
- Avantages : 20 à 30 % de moins que WebP, meilleure qualité
- Inconvénients : support un peu plus faible, encodage plus lent
- Idéal : exigences performance extrêmes
Arbre de décision
Transparence nécessaire ?
├─ Oui → WebP (priorité) ou PNG (repli)
└─ Non → suite
Photo ou image complexe ?
├─ Oui → WebP (priorité) ou AVIF (max perf)
└─ Non → suite
Logo ou icône ?
├─ Oui → SVG (vectoriel)
└─ Non → suite
Animation ?
└─ WebP (remplace le GIF)
Mon avis : WebP suffit dans 90 % des cas — bon support, bonne compression, simple.
Gestion de la compatibilité
Pour AVIF avec repli, utilisez <Picture> :
---
import { Picture } from 'astro:assets';
import heroImage from '../assets/hero.jpg';
---
<Picture
src={heroImage}
formats={['avif', 'webp', 'jpeg']}
alt="Image hero"
width={1920}
height={1080}
/>
Ordre de chargement :
- AVIF (le plus léger)
- WebP (repli)
- JPEG (compatibilité maximale)
Les navigateurs modernes profitent du meilleur format ; les anciens ne restent pas bloqués.
Test de compression
Sur une image source de 2,5 Mo :
| Format | Taille | Compression | Qualité visuelle |
|---|---|---|---|
| Original (PNG) | 2,5 Mo | - | Original |
| JPEG (quality=85) | 450 Ko | 82 % | Quasi identique |
| WebP (quality=85) | 180 Ko | 93 % | Quasi identique |
| AVIF (quality=85) | 120 Ko | 95 % | Quasi identique |
Même qualité perçue : WebP ~60 % plus léger que JPEG, AVIF ~73 %.
Mes recommandations :
- Usage courant : WebP
- Performance maximale : AVIF + WebP + JPEG en repli
- Transparence : WebP en priorité, PNG en repli
- Logos/icônes : SVG quand c’est possible — zoom sans perte
Ensuite : le lazy loading, un levier majeur pour le premier affichage.
Bonnes pratiques de lazy loading
Le lazy loading charge les images quand elles approchent du viewport, pas avant. Moins de données au premier affichage.
Principe
Les navigateurs le gèrent nativement via loading :
<img src="image.jpg" loading="lazy" alt="Image en lazy loading" />
Le composant Image Astro active le lazy loading par défaut. Pour un contrôle fin :
<!-- Lazy loading (défaut) -->
<Image src={image} loading="lazy" alt="Lazy loading" />
<!-- Chargement immédiat -->
<Image src={image} loading="eager" alt="Chargement immédiat" />
L’Intersection Observer API déclenche le chargement juste avant l’entrée dans le viewport.
Stratégie
Chargement immédiat (loading="eager") :
- Images visibles au premier écran (hero, couverture)
- Logo, icônes de navigation
- Images métier clés (produit principal, avatar)
- Tout le contenu above the fold
Lazy loading (loading="lazy") :
- Images sous le fold
- Illustrations et captures dans l’article
- Vignettes de listes
- Images de pied de page
- Éléments décoratifs
Mon approche : 1 à 2 images en eager sur le premier écran, le reste en lazy. Premier affichage rapide sans surcharger le réseau.
Exemples concrets
Page d’accueil du blog
---
import { Image } from 'astro:assets';
---
<!-- Hero, chargement immédiat -->
<Image
src={heroCover}
loading="eager"
alt="Couverture de la page d'accueil"
width={1920}
height={1080}
/>
<!-- Vignettes de la liste, lazy loading -->
{posts.map(post => (
<Image
src={post.thumbnail}
loading="lazy"
alt={post.title}
width={400}
height={225}
/>
))}
Page d’article
<!-- Couverture en haut, chargement immédiat -->
<Image
src={article.cover}
loading="eager"
alt={article.title}
width={1200}
height={630}
/>
<!-- Images dans le corps, lazy loading -->
<Image
src={screenshot1}
loading="lazy"
alt="Capture d'exemple de code"
width={800}
height={450}
/>
<Image
src={screenshot2}
loading="lazy"
alt="Comparaison avant/après"
width={800}
height={450}
/>
Galerie (cas particulier)
<!-- Premières images en eager -->
{gallery.slice(0, 6).map(img => (
<Image src={img} loading="eager" alt={img.alt} />
))}
<!-- Le reste en lazy -->
{gallery.slice(6).map(img => (
<Image src={img} loading="lazy" alt={img.alt} />
))}
Mesure des performances
1. Lighthouse (Chrome DevTools)
F12 → onglet Lighthouse → « Analyze page load » :
- Performance : viser 90+
- LCP : sous 2,5 s
- CLS : proche de 0
Avant : Performance 62, LCP 4,8 s. Après : Performance 95, LCP 1,3 s.
2. Panneau Réseau de Chrome DevTools
F12 → Network → cocher « Disable cache » → recharger :
- Waterfall et ordre de chargement
- Priorité des images du premier écran
- Lazy loading au scroll
3. WebPageTest
Pour tester régions et appareils réels : WebPageTest.
Comparaison avant/après :
| Indicateur | Avant | Après | Gain |
|---|---|---|---|
| Premier affichage | 6,2 s | 1,8 s | 71 % |
| LCP | 4,8 s | 1,3 s | 73 % |
| Poids images premier écran | 8 Mo | 1,2 Mo | 85 % |
| Score Performance | 62 | 95 | 53 % |
Différence nette pour l’utilisateur.
Lazy loading en place ? Voyons l’intégration CDN pour accélérer l’accès mondial.
Intégration CDN pour les images
J’hésitais au début — complexité, coût. Finalement, le quota gratuit Cloudflare suffisait largement et la config restait simple.
Pourquoi un CDN
Un CDN (Content Delivery Network) met en cache vos images sur des nœuds mondiaux ; l’utilisateur charge depuis le plus proche.
Avantages :
- Accélération globale : Pékin depuis un nœud chinois, New York depuis un nœud US
- Moins de charge sur l’origine : requêtes images via CDN
- Optimisation automatique : conversion de format, compression
- Résilience : repli si un nœud tombe
Après Cloudflare CDN, le chargement pour les visiteurs internationaux a gagné environ 60 %.
Cloudflare Image Resizing
Le service Image Resizing de Cloudflare s’intègre bien avec Astro.
Étape 1 : activer Image Resizing
Cloudflare Dashboard → votre domaine → Speed → Optimization → activer « Image Resizing »
Le plan gratuit inclut 50 000 transformations/mois — largement suffisant pour un blog perso.
Étape 2 : configurer astro.config.mjs
import { defineConfig } from 'astro/config';
import cloudflare from '@astrojs/cloudflare';
export default defineConfig({
output: 'server', // ou 'hybrid'
adapter: cloudflare({
imageService: 'cloudflare' // service images Cloudflare
}),
image: {
domains: ['images.unsplash.com', 'cdn.example.com']
}
});
Étape 3 : domaines autorisés (images distantes)
export default defineConfig({
image: {
domains: [
'images.unsplash.com',
'cdn.example.com',
'res.cloudinary.com'
]
}
});
Le composant Image Astro utilisera alors le service Cloudflare pour l’optimisation.
Autres solutions CDN
Cloudinary
CDN images pro avec SDK Astro :
npm install @cloudinary/url-gen
---
import { CldImage } from 'astro-cloudinary';
---
<CldImage
src="sample"
width={800}
height={600}
alt="Image Cloudinary"
/>
Puissant (transformations, filtres, filigranes) ; quota gratuit limité au-delà du payant.
Uploadcare
Upload et traitement simplifiés :
// astro.config.mjs
export default defineConfig({
image: {
service: {
entrypoint: 'uploadcare-astro',
config: {
publicKey: 'your-public-key'
}
}
}
});
Cloudflare R2
Pour de gros volumes d’images, stockage objet R2 :
// astro.config.mjs
export default defineConfig({
build: {
assetsPrefix: 'https://your-r2-domain.com'
}
});
Trafic sortant gratuit, facturation au stockage — bon rapport qualité-prix.
Points d’attention CDN
Pièges que j’ai rencontrés :
1. Mode SSR : activer l’optimisation par domaine
En SSR, activer Image Resizing pour chaque domaine dans le Dashboard Cloudflare.
2. Images distantes : domaines autorisés obligatoires
Sinon :
Image's component src parameter is not allowed for this image.
Ajoutez le domaine dans image.domains de astro.config.mjs.
3. Mode compile : optimisation au build uniquement
adapter: cloudflare({
imageService: 'compile' // optimisation à la compilation
})
Images optimisées une fois au build — adapté aux sites statiques purs.
4. Quotas gratuits
| Service | Quota gratuit | Au-delà |
|---|---|---|
| Cloudflare Image Resizing | 50 000/mois | 5 $ / 50 000 |
| Cloudinary | 25 credits/mois | À l’usage |
| Uploadcare | 3 Go stockage + 3 Go trafic | À l’usage |
| Cloudflare R2 | 10 Go stockage | 0,015 $/Go/mois |
Un blog perso tient souvent dans le gratuit ; les projets pro doivent surveiller les coûts.
Exemple de coût :
~20 000 visites/mois, ~100 000 requêtes images :
- Cloudflare : gratuit (dans les 50 000 transformations/mois)
- Cloudinary : payant (~9 $/mois)
- Uploadcare : payant (~25 $/mois)
J’ai choisi Cloudflare : économique et efficace.
Dernière partie : dépannage — la plupart des pièges que j’ai vécus.
Problèmes courants et dépannage
Ce que j’aurais aimé savoir plus tôt.
Images qui ne s’affichent pas
Symptôme : zone vide ou icône d’image cassée.
Causes et solutions :
1. Chemin d’import incorrect
// ❌ Erreur : mauvais niveau relatif
import image from './assets/photo.jpg';
// ✅ Correct : vérifier la profondeur
import image from '../assets/photo.jpg';
2. Domaine distant non autorisé
// astro.config.mjs
export default defineConfig({
image: {
domains: ['images.unsplash.com'] // ne pas oublier
}
});
Message typique :
Image's component src parameter is not allowed for this image.
3. Format non supporté
Formats Astro : JPG, JPEG, PNG, WEBP, AVIF, GIF, SVG
TIFF, BMP, etc. : convertir d’abord.
Images floues ou de mauvaise qualité
1. Paramètre quality
<!-- Qualité trop basse -->
<Image src={img} quality="low" alt="Trop flou" />
<!-- Qualité augmentée -->
<Image src={img} quality={85} alt="Plus net" />
2. Résolution source insuffisante
400×300 affiché en 1200×900 = flou. Utilisez une source plus grande.
3. Tailles responsives mal configurées
<!-- ❌ Tailles trop petites -->
<Image
src={img}
widths={[200, 400]}
sizes="(max-width: 1920px) 400px"
alt="Flou sur desktop"
/>
<!-- ✅ Tailles suffisantes -->
<Image
src={img}
widths={[400, 800, 1200, 1920]}
sizes="(max-width: 768px) 400px, (max-width: 1024px) 800px, 1200px"
alt="Net sur tous les écrans"
/>
Erreurs au build
1. Échec d’installation Sharp
Error: Could not load the "sharp" module
# Réinstaller les dépendances
rm -rf node_modules package-lock.json
npm install
# Ou réinstaller sharp seul
npm uninstall sharp
npm install sharp
Version spécifique si besoin :
npm install [email protected]
2. Mémoire insuffisante
FATAL ERROR: Reached heap limit Allocation failed
Augmenter la heap Node :
# package.json
{
"scripts": {
"build": "NODE_OPTIONS='--max-old-space-size=4096' astro build"
}
}
3. Format non géré par Sharp
HEIC, TIFF, etc. : convertir en JPG ou PNG avant le build.
Problèmes d’images en mode SSR
Symptôme : OK en local, images absentes sur Cloudflare Pages/Workers.
1. imageService correct
// astro.config.mjs
import cloudflare from '@astrojs/cloudflare';
export default defineConfig({
output: 'server',
adapter: cloudflare({
imageService: 'cloudflare' // configuration clé
})
});
2. Mode output
export default defineConfig({
output: 'server', // ou 'hybrid'
// output: 'static' ne supporte pas cloudflare imageService
});
3. Chemins des images locales
En SSR, images dans src/, pas dans public/ :
---
// ✅ Correct : src/assets/
import image from '../assets/photo.jpg';
// ❌ Erreur : public/ non optimisé
// <img src="/photo.jpg" />
---
<Image src={image} alt="Bonne approche" />
Checklist de dépannage
- ✓ Chemin d’import correct
- ✓ Format supporté
- ✓ Domaine distant en liste blanche
- ✓ Paramètre quality adapté
- ✓ Sharp installé correctement
- ✓ Config SSR correcte
- ✓ Erreurs dans la console navigateur
- ✓ Statut des requêtes images dans Network
Conclusion
Deux jours d’optimisation d’images Astro — j’espère que ça vous évitera mes erreurs.
Points clés :
- Composant Image : remplacer
<img>par<Image />— compression, formats, responsive automatiques - Formats : WebP dans 90 % des cas ; AVIF + repli pour le max ; transparence → WebP ou PNG
- Lazy loading : 1 à 2 images eager au premier écran, le reste en lazy — -50 % de chargement initial
- CDN : Cloudflare, quota gratuit suffisant, ~+60 % vitesse internationale
- Dépannage : la plupart des cas = chemin, config domaine, Sharp
Mon blog : 6,2 s → 1,8 s, Lighthouse 62 → 95, rebond -35 %. Excellent ROI.
À faire maintenant :
- Lighthouse (F12) sur votre site
- Convertir en WebP ce qui peut l’être
loading="lazy"sous le fold- Cloudflare CDN si beaucoup d’images
L’optimisation d’images est progressive — chaque petit gain compte.
Des questions ou des astuces à partager ? Laissez un commentaire. Bonne accélération !
Guide complet d'optimisation d'images Astro : accélérer le site de 50 %
5 astuces pour passer de 6 s à 1,8 s au premier affichage et de 62 à 95 au Lighthouse
⏱️ Estimated time: 2 hr
- 1
Step 1: Comprendre l'importance et les objectifs
Importance de l'optimisation d'images :
• Les images représentent souvent 60 à 70 % du poids d'une page
• Sur mon ancien blog, une couverture non compressée faisait 2,5 Mo
• Quelques captures et la page dépassait 5 à 6 Mo
• Plusieurs secondes d'attente, taux de rebond élevé
Exigences Google :
• LCP (Largest Contentful Paint) dans les Core Web Vitals
• Temps d'affichage du contenu principal
• LCP sous 2,5 s requis ; au-delà de 4 s, mauvais
• Souvent la grande image hero ou de couverture
• LCP élevé = impact SEO
Objectifs :
• Premier affichage de 6,2 s à 1,8 s (+71 %)
• Lighthouse performance de 62 à 95 (+53 %)
• Poids images d'environ 8 Mo à 1,2 Mo (-85 %)
• LCP de 4,8 s à 1,2 s (+75 %) - 2
Step 2: Astuce 1 : utiliser le composant Image Astro
Avantages du composant Image :
• Optimisation automatique format, tailles, lazy loading
• Remplacer <img> par <Image />
• Compression, conversion, responsive
Étapes :
1. Intégration image (npx astro add image si besoin)
2. Configurer imageService dans astro.config.mjs (sharp ou squoosh)
3. Utiliser le composant :
import { Image } from 'astro:assets';
<Image src={image} alt="description" />
Chemins locaux :
• En SSR, images dans src/, pas public/
• Correct : import image from '../assets/photo.jpg'; <Image src={image} alt="..." />
• public/ n'est pas optimisé - 3
Step 3: Astuces 2-3 : format et lazy loading
Choix du format :
• JPEG : photos, images complexes, compatibilité max
• PNG : icônes, transparence, fichiers plus lourds
• WebP : 30 à 50 % plus léger que JPEG, 90 % des cas
• AVIF : 20 à 30 % de moins que WebP, repli si compatibilité requise
Lazy loading :
• 1 à 2 images eager au premier écran, le reste en lazy
• Réduction de plus de 50 % du chargement initial
• Attribut loading="lazy" ou propriété du composant Image - 4
Step 4: Astuces 4-5 : CDN et dimensionnement
Intégration Cloudflare CDN :
• Cloudflare Images ou stockage R2
• Optimisation et conversion automatiques
• Accélération via des centaines de nœuds
• Quota gratuit adapté aux blogs
Étapes :
1. Activer Images ou R2 dans le Dashboard Cloudflare
2. Configurer imageService Cloudflare
3. Héberger ou référencer les images
4. Charger via URL Cloudflare
Dimensionnement :
• srcset et sizes pour la bonne taille par appareil
• width et height du composant Image pour éviter le CLS - 5
Step 5: Dépannage et bonnes pratiques
Checklist :
1. Chemin d'import
2. Format supporté
3. Domaine distant autorisé
4. Paramètre quality
5. Installation Sharp
Problèmes courants :
• Sharp → vérifier la version Node, npm install sharp
• Image distante → liste blanche des domaines
• SSR → output 'server' ou 'hybrid'
Bonnes pratiques :
• Processus progressif, gains cumulés
• Chaque optimisation améliore l'expérience
Actions immédiates :
1. Lighthouse (F12) sur votre site
2. Convertir en WebP
3. loading="lazy" sous le fold
4. Cloudflare CDN si volume d'images élevé
FAQ
Pourquoi l'optimisation d'images est-elle si importante ?
• Les images représentent souvent 60 à 70 % du poids d'une page
• Couverture 2,5 Mo + captures = page de 5 à 6 Mo facilement
• Plusieurs secondes d'attente, taux de rebond élevé
Exigences Google :
• LCP (Largest Contentful Paint) dans les Core Web Vitals
• Contenu principal affiché — LCP sous 2,5 s, au-delà de 4 s c'est mauvais
• Souvent la grande image hero ou de couverture
• LCP élevé = impact sur le SEO
Quels résultats pour l'optimisation d'images Astro ?
• Premier affichage de 6,2 s à 1,8 s (+71 %)
• Lighthouse performance de 62 à 95 (+53 %)
• Poids images d'environ 8 Mo à 1,2 Mo (-85 %)
• LCP de 4,8 s à 1,2 s (+75 %)
Mon blog : rebond -35 %. Excellent retour sur investissement.
Comment utiliser le composant Image Astro ?
• Optimisation automatique format, tailles, lazy loading
• Remplacer <img> par <Image />
• Compression, conversion, responsive
Étapes :
1) Intégration image (npx astro add image)
2) imageService dans astro.config.mjs (sharp ou squoosh)
3) import { Image } from 'astro:assets'; <Image src={image} alt="description" />
Chemins locaux :
• SSR : images dans src/, pas public/
• Correct : import + <Image />
• public/ non optimisé
Comment choisir le format ? JPEG, PNG, WebP, AVIF ?
• JPEG (photos, compatibilité max)
• PNG (transparence, fichiers plus lourds)
• WebP (30 à 50 % plus léger, 90 % des cas)
• AVIF (encore plus léger, repli recommandé)
Recommandations :
• WebP par défaut
• AVIF + repli pour le max
• Transparence : WebP ou PNG
Comment configurer lazy loading et CDN ?
• 1 à 2 images eager, le reste lazy
• -50 % de chargement initial
• loading="lazy" ou propriété Image
Cloudflare CDN :
• Images ou R2
• Optimisation et conversion auto
• Nœuds mondiaux, quota gratuit blog
Étapes :
1) Activer Images/R2 dans le Dashboard
2) imageService Cloudflare
3) Héberger les images
4) URLs Cloudflare
Comment dépanner les problèmes d'optimisation d'images ?
1) Chemin d'import
2) Format supporté
3) Domaine en liste blanche
4) Paramètre quality
5) Installation Sharp
Courant :
• Sharp → Node + npm install sharp
• Image distante → domains
• SSR → output server ou hybrid
90 % des cas : chemin, config domaine, Sharp.
13 min de lecture · Publié le: 3 déc. 2025 · Mis à jour le: 27 juil. 2026
Guide Astro
Si vous arrivez depuis la recherche, le plus rapide est de passer à l’article précédent ou suivant de cette série.
Précédent
Build Astro en échec ? Diagnostiquez ces 7 causes en 5 minutes
Votre build Astro échoue sans raison apparente ? Cet article recense 7 scénarios d'erreur courants, une méthode de diagnostic en 5 étapes et des solutions concrètes — 90 % des problèmes se résolvent en 5 à 10 minutes.
Partie 14 sur 18
Suivant
Ajouter Pagefind à un blog Astro : guide complet gratuit, rapide et multilingue
Guide pas à pas pour intégrer Pagefind à votre blog Astro : recherche full-text gratuite et rapide, index de moins de 100 Ko, configuration en 10 minutes — plus économique et simple qu'Algolia.
Partie 16 sur 18



Commentaires
Connectez-vous avec GitHub pour laisser un commentaire