Avancé 5 min 1 min de lecture Vitesse & temps de chargement

Précharger les polices facultatives sans décalage ni FOIT

Associez rel=preload et font-display: optional pour afficher vos polices personnalisées sans décalage de mise en page ni flash de texte invisible.

Par Nicolas Dupont Mis à jour le 23 juin 2026

L’extraction et le rendu des polices web peuvent provoquer des décalages de mise en page de deux manières : soit une police de remplacement est échangée contre la police définitive (flash de texte sans style), soit du texte reste invisible jusqu’à l’affichage de la police (flash de texte invisible, ou FOIT). Dans les deux cas, le contenu bouge, l’utilisateur est gêné et le CLS se dégrade.

Ces décalages ont un impact SEO concret : ils dégradent le Cumulative Layout Shift (CLS), l’un des Core Web Vitals qui mesure l’instabilité visuelle d’une page. À partir de Chrome 83, il existe une combinaison qui supprime totalement ces à-coups pour les polices facultatives : associer la balise rel= »preload » à la déclaration font-display: optional, dans le prolongement des bonnes pratiques pour optimiser le chargement des polices.

Les polices web sont une source de décalages que l’on traite trop tard, alors qu’elles abîment directement le CLS. La combinaison du preload et de font-display: optional est l’une des solutions les plus propres que je connaisse pour servir une police sans flash ni saut de mise en page. Quand la stabilité visuelle compte, c’est le réglage que je recommande.

— Nicolas Dupont

La propriété font-display et ses périodes

La propriété CSS font-display contrôle le comportement d’affichage d’une police personnalisée chargée de façon asynchrone. Elle s’appuie sur une chronologie faite de périodes pendant lesquelles le navigateur décide quoi afficher. Le tableau ci-dessous résume les valeurs principales et leur effet.

Valeur Comportement Effet visuel

block

Texte invisible, puis bascule vers la police web une fois chargée

Risque de flash de texte invisible (FOIT)

swap

Police système de remplacement, puis bascule vers la police web

Risque de flash de texte sans style

fallback

Brève période invisible, puis police de remplacement

Compromis entre block et swap

optional

Période de blocage courte, pas d’échange forcé après coup

Aucune refonte si combiné au préchargement

Pourquoi la valeur optional change tout

Auparavant, une police déclarée en font-display: optional disposait d’une période de blocage de 100 ms sans période d’échange. Si la police se téléchargeait dans ce délai, elle s’affichait ; sinon, la police de remplacement prenait le relais sans échange ultérieur. Le souci, c’est que Chrome effectuait malgré tout un second rendu de la page dans les deux cas, ce qui provoquait un léger scintillement et parfois un décalage de mise en page, même quand la police était déjà en cache.

Depuis Chrome 83, des optimisations suppriment ce premier cycle de rendu pour les polices facultatives préchargées. Le rendu est bloqué jusqu’à ce que la police soit chargée ou qu’un délai s’écoule. Résultat : plus de décalage de mise en page ni de flash de texte invisible. Ce comportement correspond à la spécification, selon laquelle une police facultative ne doit jamais déclencher de refonte.

Associer preload et font-display: optional

Le préchargement n’est pas obligatoire pour une police facultative, mais il augmente fortement les chances qu’elle soit chargée avant le premier cycle de rendu, surtout si elle n’est pas encore dans le cache du navigateur. C’est cette combinaison qui garantit l’affichage le plus fluide.

Concrètement, vous ajoutez une balise link rel= »preload » pointant vers le fichier de police, avec l’attribut as= »font », puis vous déclarez font-display: optional dans votre règle @font-face. Le navigateur récupère la police tôt et, grâce à optional, n’impose aucune refonte si elle n’arrive pas à temps.

Précharger une police facultative
<link rel="preload" as="font" type="font/woff2" href="/fonts/ma-police.woff2" crossorigin>

<style>
@font-face {
  font-family: "Ma Police";
  src: url("/fonts/ma-police.woff2") format("woff2");
  font-display: optional;
}
</style>
Vérifiez la compatibilité et le couple preload + optional

L’élimination complète des décalages repose sur l’association des deux mécanismes : rel= »preload » seul ou font-display: optional seul ne suffit pas à garantir un rendu sans à-coups. Pensez aussi à vérifier la compatibilité de rel= »preload » et de font-display sur les données de référence des navigateurs, car le comportement décrit s’appuie sur des optimisations introduites à partir de Chrome 83.

Besoin d'aide pour mettre en pratique ? Nos experts SEO vous accompagnent.
Parler à un expert

À faire

  • précharger la police facultative avec rel= »preload » et as= »font »
  • déclarer font-display: optional
  • vérifier la compatibilité navigateur

À éviter

  • compter sur font-display: optional seul pour supprimer les décalages
  • oublier l’attribut crossorigin sur le preload de police
  • précharger des polices qui ne servent pas à l’affichage initial

Points clés à retenir

  • Précharger la police facultative avec rel="preload" et as="font"
  • Déclarer font-display: optional dans la règle @font-face
  • Protéger le score CLS en évitant les refontes
  • Vérifier la compatibilité des navigateurs visés
  • Réserver cette technique aux polices vraiment facultatives

Le couple preload + font-display: optional supprime les décalages liés aux polices.

Quiz : testez vos connaissances

  1. Que désigne le FOIT ?

    • Une erreur de compatibilité entre deux polices web
    • Le flash de texte invisible, où le texte reste masqué jusqu'au chargement de la police
    • Le flash de texte sans style, où une police de remplacement est échangée

    FOIT signifie flash de texte invisible : le texte reste masqué jusqu’à ce que la police web soit chargée, ce qui gêne la lecture et peut provoquer des décalages.

  2. Le préchargement d'une police facultative est-il obligatoire ?

    • Non, mais il augmente nettement les chances qu'elle soit prête avant le premier rendu
    • Oui, sans lui la police ne se chargera jamais
    • Oui, c'est la seule façon d'éviter le FOIT

    Le préchargement n’est pas obligatoire, mais il augmente fortement les chances que la police soit chargée avant le premier cycle de rendu, surtout si elle n’est pas encore en cache.

  3. Comment supprimer les décalages liés aux polices facultatives ?

    • En utilisant font-display: optional seul
    • En associant rel="preload" et font-display: optional
    • En utilisant rel="preload" seul

    L’élimination des décalages repose sur l’association des deux mécanismes : rel="preload" seul ou font-display: optional seul ne suffit pas.

À propos de l'auteur

Nicolas Dupont

Nicolas Dupont

Expert SEO Sénior & Fondateur

Il a fait grimper des sites en haut de Google et accompagné plus de 120 entreprises avant de fonder Les Webineurs. Sur votre projet SEO, vous échangez directement avec Nicolas, pas un commercial ni un junior. Un expert dédié et du trafic organique qui dure.

Voir le profil

Besoin d'un accompagnement SEO ?

Vos polices personnalisées font sauter votre mise en page et plombent votre CLS ?

Faire le point avec un expert SEO