Skip to content
Technical

Optimisation SVG pour développeurs : SVGO, pipelines de build et intégration CI/CD

Optimisation SVG orientée développeur : configurer SVGO, intégrer dans les pipelines webpack/Vite, automatiser avec CI/CD et mesurer l'impact sur les Core Web Vitals.

Robin Monteiro28 janvier 202610 octobre 202616 min de lecture
Use this article with an AI assistant:
.md
Optimisation SVG pour développeurs : SVGO, pipelines de build et intégration CI/CD
R
Robin Monteiro

Founder of VectoSolve

Self-taught developer, founder and sole developer of VectoSolve since 2024. He builds the conversion engine and the cutting, embroidery and 3D printing exports.

How this article was made: drafted with AI assistance, then edited and fact-checked before publication. About the author

Image vectorizationCutting machine filesEmbroidery filesSVG
Free previewNo signupFull-quality output

Key Takeaways

  • SVGO avec un svgo.config.js optimisé réduit la taille des fichiers SVG de 60 à 85% sans perte visuelle
  • La simplification des chemins (précision décimale + nœuds redondants) est l'optimisation à plus fort impact
  • L'optimisation agressive casse les animations CSS et currentColor — testez toujours après SVGO
  • Gzip réduit encore de 70-80% ; Brotli gagne 5-8% supplémentaires
  • Le lazy loading avec Intersection Observer élimine le coût de rendu hors écran
  • L'intégration dans le pipeline de build (Vite, webpack, Next.js) rend l'optimisation invisible pour votre équipe

Les fichiers SVG sont la colonne vertébrale des graphiques web modernes — scalables, stylisables, animables, et généralement plus légers que les alternatives raster. Mais un SVG mal optimisé exporté depuis Figma ou Illustrator peut être plus lourd qu'un PNG et plomber vos Core Web Vitals.

J'ai passé huit ans à livrer des SVG en production. Voici le guide que j'aurais aimé avoir dès le premier jour.

Workflow d'optimisation SVG de l'export à la production
Le pipeline complet d'optimisation SVG : export, nettoyage, optimisation, compression, livraison

Pourquoi l'optimisation SVG est un poste du budget performance

Un SVG non optimisé peut contenir des métadonnées d'éditeur, des chemins redondants avec 12 décimales de précision, des styles inline répétés, des définitions de gradient/filtre inutilisées et du XML superflu comme xml:space. Un audit réel : une illustration hero de 52 Ko est tombée à 7,8 Ko après optimisation — 85% de réduction.

Impact sur les Core Web Vitals : L'optimisation SVG améliore directement le LCP (Largest Contentful Paint) pour les SVG au-dessus de la ligne de flottaison et réduit le TBT en diminuant les nœuds DOM. La mise à jour Page Experience de Google pondère fortement le LCP — retirer 40 Ko d'un SVG hero peut faire gagner 200-400 ms de LCP en 3G. Si vous servez des SVG non optimisés, vous laissez des signaux de classement sur la table.

Configuration SVGO pas à pas

SVGO est l'optimiseur standard de l'industrie. Les paramètres par défaut laissent de la performance sur la table. Il vous faut une configuration affinée.

CLI vs API Node

bash
# CLI -- fichiers ponctuels et scripts CI
npx svgo input.svg -o output.svg --config svgo.config.js

# Optimisation par lot d'un répertoire
npx svgo -f ./src/icons -o ./dist/icons --config svgo.config.js
javascript
// API Node -- intégration pipeline de build
import { optimize } from 'svgo';
import { readFileSync, writeFileSync } from 'fs';

const result = optimize(readFileSync('icon.svg', 'utf8'), {
  multipass: true,
  plugins: [
    'preset-default',
    'removeDimensions',
    { name: 'removeAttrs', params: { attrs: '(data-.*|class)' } },
  ],
});
writeFileSync('icon.opt.svg', result.data);

svgo.config.js de production

javascript
module.exports = {
  multipass: true,
  plugins: [
    {
      name: 'preset-default',
      params: {
        overrides: {
          removeViewBox: false,
          convertPathData: { floatPrecision: 2, transformPrecision: 3 },
          mergePaths: { force: true },
        },
      },
    },
    'removeDimensions',
    'sortAttrs',
    { name: 'removeAttrs', params: { attrs: ['xml:space', 'data-name'] } },
  ],
};

Pro Tip: Bonnes pratiques svgo.config.js pour la production : Toujours mettre removeViewBox: false — le retirer casse le scaling responsive. Mettre floatPrecision: 2 pour les icônes, 3 pour les illustrations détaillées. Activer multipass: true pour que chaque passe débloque d'autres optimisations. Committez votre config dans le repo pour que chaque développeur et chaque exécution CI utilise les mêmes paramètres.

Avant/Après : Suppression des métadonnées et du ballast éditeur

Chaque outil de design intègre son empreinte :

xml
<!-- AVANT : 680 octets de gaspillage -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
     version="1.1" id="Layer_1" x="0px" y="0px" width="200px" height="200px"
     viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;"
     xml:space="preserve">
  <!-- Generator: Adobe Illustrator 28.0 -->
  <metadata><rdf:RDF><rdf:Description/></rdf:RDF></metadata>
  <defs><linearGradient id="unused_grad">...</linearGradient></defs>
xml
<!-- APRÈS : propre, prêt pour la production -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200">

Disparus : version, dimensions fixes, xml:space, enable-background, commentaires du générateur, métadonnées vides, defs inutilisés. 680 octets économisés sur une petite icône — multipliez par un sprite de 40 symboles.

Réduction des nœuds de chemin montrant l'avant et l'après
48 points de contrôle réduits à 19 — visuellement identiques à la résolution d'écran

A Full Year of Conversions for $49

Starter Annual: 25 conversions every month, $49 for the whole year. That is about $4.08 a month · Cancel anytime

Get the Annual Deal

Simplification des chemins : Réduire les nœuds sans perte visuelle

Les chemins concentrent la majorité des octets SVG. Les designers créent des chemins avec des centaines de nœuds là où des dizaines suffisent.

xml
<!-- AVANT : précision à 12 décimales -->
<path d="M10.123456789012 20.987654321098 C15.111111111111 25.222222222222
  30.333333333333 40.444444444444 45.555555555555 50.666666666666"/>

<!-- APRÈS : précision à 2 décimales, visuellement identique -->
<path d="M10.12 20.99C15.11 25.22 30.33 40.44 45.56 50.67"/>

Différence visuelle à la résolution d'écran ? Zéro. Économie d'octets ? 58%. Utilisez l'éditeur SVG de VectoSolve pour inspecter visuellement la réduction des nœuds.

Comparaison des techniques d'optimisation

TechniqueRéduction tailleNiveau de risqueQuand utiliser
Supprimer métadonnées & commentaires5-15%AucunToujours — zéro impact visuel
Réduire la précision décimale (2-3)15-30%FaibleIcônes, éléments UI, logos
Fusionner & simplifier les chemins10-25%MoyenAprès vérification visuelle QA
Supprimer defs & symboles inutilisés5-20%FaibleToujours — code mort
Réduire groupes & conteneurs3-8%FaibleQuand le CSS ne cible pas les groupes
Convertir styles inline en attributs2-10%FaiblePour les SVG inline dans le HTML
Compression Gzip (serveur)70-80%AucunToujours
Compression Brotli (serveur)75-85%AucunQuand le CDN le supporte

CSS dans SVG : Inline vs feuilles de style externes

xml
<!-- Styles inline : gonflés, mais autonomes -->
<path style="fill:#ff0000;stroke:#000;stroke-width:2" d="..."/>
<path style="fill:#ff0000;stroke:#000;stroke-width:2" d="..."/>

<!-- <style> consolidé : plus léger, autonome -->
<style>.a{fill:#f00;stroke:#000;stroke-width:2}</style>
<path class="a" d="..."/>
<path class="a" d="..."/>

<!-- Attributs de présentation : le plus léger, idéal pour le SVG inline -->
<path fill="#f00" stroke="#000" stroke-width="2" d="..."/>

Pour les SVG inline, utilisez les attributs de présentation — remplaçables par du CSS externe, pas de problème de scope. Pour les fichiers autonomes, les blocs <style> fonctionnent bien.

Warning: L'optimisation agressive casse les animations. Si votre SVG utilise des animations CSS, currentColor, des listeners JS ou SMIL : removeHiddenElems supprime les cibles d'animation, collapseGroups détruit les transformations de groupe, cleanupIds renomme les IDs référencés par votre CSS/JS, et removeUselessStrokeAndFill supprime les strokes d'état hover. Testez toujours les SVG optimisés en contexte.

Free SVG Tools for Crafters

Design Checker · Color Separator · Mat Preview · Offset Generator · Text to SVG

Check Your SVG Free

Statistiques de compression Gzip & Brotli

Le SVG est du XML — il se compresse spectaculairement :

AssetBrutSVGOGzipBrotli
Illustration hero52 Ko7,8 Ko2,4 Ko2,1 Ko
Sprite d'icônes (40 icônes)38 Ko11 Ko3,2 Ko2,8 Ko
Logo animé18 Ko9,2 Ko3,1 Ko2,7 Ko
Infographie complexe124 Ko34 Ko9,8 Ko8,6 Ko

Brotli bat Gzip de 5-15% sur le SVG. Cloudflare, Vercel et Netlify le supportent nativement.

"

Chaque kilo-octet que vous envoyez est un kilo-octet que le navigateur de votre utilisateur doit télécharger, parser et rendre. Les SVG optimisés ne sont pas un nice-to-have — c'est un poste du budget performance.

— Addy Osmani

Lazy Loading des pages riches en SVG

Si votre page a plus de 20 SVG sous la ligne de flottaison, ne les chargez pas tous au premier rendu :

javascript
const observer = new IntersectionObserver((entries) => {
  entries.forEach((entry) => {
    if (entry.isIntersecting) {
      const img = entry.target;
      img.src = img.dataset.src;
      observer.unobserve(img);
    }
  });
}, { rootMargin: '200px' });

document.querySelectorAll('img[data-src$=".svg"]').forEach(img => observer.observe(img));

Le rootMargin de 200 px donne de l'avance au navigateur. Zéro décalage de layout, zéro bande passante gaspillée.

Développeur intégrant des SVG dans un pipeline de build
SVGO s'exécute automatiquement à chaque commit via le pipeline de build

Intégration pipeline de build : Webpack, Vite, Next.js

L'optimisation manuelle ne passe pas à l'échelle. Branchez SVGO dans votre outil de build.

Vite

javascript
import svgLoader from 'vite-svg-loader';
export default defineConfig({
  plugins: [svgLoader({
    svgoConfig: { multipass: true, plugins: ['preset-default', 'removeDimensions'] },
  })],
});

Webpack

javascript
{ test: /\.svg$/, use: [
  { loader: 'svg-url-loader', options: { limit: 8192 } },
  { loader: 'svgo-loader', options: { configFile: './svgo.config.js' } },
]}

Next.js

javascript
config.module.rules.push({
  test: /\.svg$/,
  use: ['@svgr/webpack', {
    loader: 'svgo-loader',
    options: { configFile: './svgo.config.js' },
  }],
});

Avec l'intégration pipeline, l'optimisation se fait au moment du build. Pas d'étapes manuelles, pas de fichiers oubliés.


A Full Year of Conversions for $49

Starter Annual: 25 conversions every month, $49 for the whole year. That is about $4.08 a month · Cancel anytime

Get the Annual Deal

La checklist d'optimisation complète

  1. Exportez proprement depuis votre outil de design
  2. Lancez SVGO avec une config committée — ou optimisez avec VectoSolve pour un workflow visuel
  3. Vérifiez visuellement — comparez avant/après, surtout les animations
  4. Activez la compression — Gzip minimum, Brotli si le CDN le supporte
  5. Lazy loadez les SVG sous la ligne de flottaison avec Intersection Observer
  6. Automatisez en CI — SVGO dans votre pipeline pour que rien ne parte non optimisé

Besoin de convertir des images raster en SVG optimisé ? VectoSolve gère la vectorisation et l'optimisation en une seule étape. Ou utilisez l'éditeur SVG pour un contrôle fin des chemins et de la qualité de sortie.


Questions ou histoires de guerre d'optimisation ? Contactez-nous à contact@vectosolve.com.


Technique d'optimisationRéduction de taille typiqueNiveau de risque
SVGO avec config affinée60–85%Faible (avec tests)
Réduction de précision décimale (8 → 2)20–40%Faible pour les graphiques simples
Suppression des métadonnées éditeur10–30%Aucun
Simplification des chemins15–50%Moyen (peut altérer les courbes)
Compression Brotli (serveur)75–90% taille de transfertAucun (sans perte)

Sources & Lectures complémentaires

  • web.dev: Image Optimization — Guide de référence de Google sur l'optimisation SVG et la compression pour la performance web
  • MDN Web Docs: SVG — Référence technique sur la syntaxe des chemins SVG et les attributs d'éléments ciblés par l'optimisation
  • CSS-Tricks: Optimizing SVG — Tutoriels pratiques de configuration SVGO et exemples d'optimisation avant/après
  • W3C SVG 2 Specification — Spécification officielle pour comprendre quels attributs SVG peuvent être supprimés en toute sécurité
Tags:
svg
optimisation
performance web
frontend
tutoriel
Share:

Try VectoSolve Now

Convert your images to high-quality SVG vectors with AI

AI-Powered Vectorization

Ready to vectorize your images?

Convert your PNG, JPG, and other images to high-quality, scalable SVG vectors in seconds.