Le CSS décide du moment où la page s'affiche
Trois choses à retenir. Le CSS bloque le rendu : rien ne s'affiche tant qu'il n'est pas chargé et analysé, ce qui pèse directement sur le LCP. Googlebot ne lit que les deux premiers mégaoctets d'une ressource, feuilles de style comprises. Et il ne faut jamais bloquer le CSS dans le robots.txt : Google restitue vos pages avec un navigateur, et une page sans styles est une page mal jugée.
Pourquoi le CSS bloque l'affichage
Le mécanisme est simple et il explique presque tout le reste. Quand le navigateur rencontre une balise <link rel="stylesheet"> dans l'en-tête, il interrompt la construction de l'affichage, télécharge le fichier, l'analyse, puis reprend. Tant que ce cycle n'est pas terminé, l'écran reste vide.
Ce comportement est voulu : afficher le contenu sans style puis le restyler produirait un effet visuel désagréable. Mais il a une conséquence directe pour le référencement. Le LCP mesure le moment où le plus gros élément visible apparaît ; si votre feuille de style met huit cents millisecondes à arriver, ces huit cents millisecondes sont dans votre LCP avant même que la moindre image commence à charger.
| Ce qu'on trouve | Effet | Correction |
|---|---|---|
| Plusieurs feuilles de style chargées à la suite | Autant d'allers-retours réseau avant le premier affichage | Regrouper en une seule pour les styles communs |
| Une feuille très volumineuse dont 5 % sert à la page | On paie le téléchargement complet à chaque page | Découper par gabarit, ou charger le superflu sans bloquer |
| Une feuille hébergée sur un autre domaine | Résolution DNS et négociation supplémentaires avant le premier octet | Héberger la feuille sur le même domaine |
@import à l'intérieur d'une feuille | Le navigateur ne découvre le second fichier qu'après avoir lu le premier : deux blocages en série | Remplacer par deux balises link, ou fusionner |
| Styles d'impression ou de composants rares chargés en bloquant | Un blocage payé pour des règles jamais utilisées à l'affichage | Attribut media, qui rend le chargement non bloquant |
L'attribut media est la correction la moins connue et l'une des plus simples. Une feuille déclarée avec media="print" est téléchargée sans bloquer le rendu, parce que le navigateur sait qu'elle ne sert pas à l'affichage écran. La même logique s'applique aux styles conditionnés à une largeur d'écran.
La limite de deux mégaoctets, à connaître
Point technique récent et rarement mentionné. La documentation de Googlebot indique que le robot ne récupère que les deux premiers mégaoctets d'un type de fichier pris en charge, que cette limite s'applique aux données non compressées, et que chaque ressource référencée dans une page, CSS et JavaScript compris, est soumise à la même limite. Les fichiers PDF font exception avec soixante-quatre mégaoctets.
Ce que cela implique concrètement. Deux mégaoctets de CSS non compressé, c'est énorme, et un site correctement tenu n'en approche jamais. La limite mérite d'être connue parce qu'elle s'applique à chaque ressource, donc aussi à un fichier JavaScript volumineux dont dépendrait l'affichage. Si la limite est atteinte, le robot lit une feuille tronquée, restitue la page avec des styles incomplets, et peut en conclure ce qu'il veut sur son ergonomie mobile. La vérification prend dix secondes : regardez le poids non compressé de votre plus gros fichier CSS. Si vous êtes au-delà de quelques centaines de kilooctets, vous avez de toute façon un problème de performance bien avant d'avoir un problème de limite.
Le CSS critique et la règle des quatorze kilooctets
L'idée du CSS critique consiste à extraire les règles nécessaires à l'affichage de la partie haute de la page, à les insérer directement dans le HTML, et à charger le reste sans bloquer. Le navigateur peut alors peindre dès la réception du document, sans attendre aucun fichier externe.
L'objectif souvent cité de quatorze kilooctets n'est pas arbitraire. Il vient du fonctionnement de TCP : la fenêtre de congestion initiale est généralement de dix segments, soit environ quatorze kilooctets et demi de données que le serveur peut envoyer avant d'attendre un accusé de réception. Si le HTML et le CSS critique tiennent dans cette première salve, l'affichage commence après un seul aller-retour réseau. Sinon, il faut attendre le suivant, ce qui coûte plusieurs centaines de millisecondes sur une connexion mobile.
Deux précautions avant de se lancer. La valeur de quatorze kilooctets est une règle empirique, pas une norme, et certaines configurations serveur augmentent cette fenêtre. Et l'extraction du CSS critique se fait par gabarit, pas une fois pour tout le site, sans quoi les pages qui ne ressemblent pas à l'accueil s'affichent mal pendant un instant.
Le CSS et le décalage de mise en page
Le CLS mesure les mouvements d'éléments pendant le chargement, et le seuil à tenir est de 0,1. Le CSS est en cause dans la plupart des cas.
- 1. Les polices web
Une police chargée après le premier affichage remplace la police de repli, et la différence de métriques déplace tout le texte. La correction se fait en deux temps :
font-display: swappour éviter le texte invisible, puis un ajustement des métriques de la police de repli pour que la substitution ne décale rien. - 2. Les images sans dimensions réservées
C'est un problème mixte HTML et CSS. Déclarer
widthetheightsur la balise, ou fixer unaspect-ratioen CSS, réserve la place avant que l'image arrive. C'est la correction la plus rentable du lot. - 3. Les contenus insérés après coup
Bannière de consentement, message d'information, publicité. S'ils poussent le contenu vers le bas, ils dégradent le CLS. La parade est de leur réserver une hauteur fixe dès le départ, ou de les afficher en superposition.
- 4. Les animations sur des propriétés de mise en page
Animer
height,topoumarginprovoque un recalcul de mise en page à chaque image. Passer partransformetopacitydonne le même effet visuel sans décalage compté.
Le détail des trois signaux Web essentiels est dans les Core Web Vitals.
Ne jamais bloquer le CSS à l'exploration
C'est une erreur héritée d'une époque où Google n'exécutait pas les pages, et on la trouve encore dans de vieux fichiers robots.txt qui interdisent l'accès à /wp-includes/ ou à un dossier de thème.
Google restitue aujourd'hui les pages avec un navigateur. S'il ne peut pas charger vos feuilles de style, il voit une page brute, sans mise en forme, dont il ne peut évaluer ni la lisibilité ni l'adaptation au mobile. L'inspection d'URL de la Search Console montre exactement ce qu'il a obtenu, capture d'écran comprise. C'est le moyen le plus rapide de vérifier ce point, et il vaut la peine d'être fait une fois sur tout site dont on hérite. Voir le mobile.
Ce que le CSS a le droit de masquer
La question revient souvent, et la ligne est nette.
Ce qui est permis : replier du contenu dans un onglet, un accordéon ou un bloc « voir plus ». Le texte reste dans le HTML, il est indexé normalement, et le repli est une décision d'interface parfaitement légitime.
Ce qui ne l'est pas : afficher un texte dans la même couleur que le fond, le positionner hors de l'écran, lui donner une taille de police nulle, ou le placer derrière une image. Ces techniques relèvent du camouflage, elles sont explicitement visées par les règles anti-spam de Google, et elles n'ont plus aucun intérêt depuis très longtemps.
Ce que je regarde en premier sur le CSS d'un site lent
Trois chiffres, dans l'onglet réseau des outils de développement, en filtrant sur les feuilles de style. Le nombre de fichiers CSS bloquants : au-delà de deux, il y a du regroupement à faire. Le poids total non compressé : au-delà de deux cents kilooctets sur un site de contenu, il y a du code mort. Et le délai entre le début du chargement du document et la fin du dernier CSS bloquant, qui est le plancher incompressible de votre LCP. Le comparer au LCP mesuré dit immédiatement si le problème est là ou ailleurs. L'audit de couverture du navigateur complète utilement en montrant le pourcentage de règles réellement utilisées sur la page.
Questions fréquentes
Sources
- Google Search Central, Googlebot : limite de deux mégaoctets par fichier pris en charge, soixante-quatre mégaoctets pour les PDF, application aux données non compressées et aux ressources référencées.
- Google Search Central, politiques anti-spam : définition du camouflage et du texte masqué.
- web.dev, optimiser le CLS : causes de décalage de mise en page, dont les polices et les contenus insérés.
- Règle des quatorze kilooctets : conséquence de la fenêtre de congestion initiale TCP, généralement fixée à dix segments d'environ 1 460 octets.