Un site moderne se compose rarement de son seul code. À côté du thème et de l’application, on trouve des outils d’analytics, des gestionnaires de balises, des pixels publicitaires, des chats, des widgets d’avis, des tests A/B, des heatmaps, des bandeaux de consentement, des vidéos et des cartes intégrées. Chacun a une bonne raison d’être là, et chacun a été ajouté à un moment différent, souvent par des personnes différentes. Le résultat est une part importante de la page que personne dans l’équipe n’a écrite, qui change sans préavis et qui, sur de nombreux sites, pèse plus sur les Core Web Vitals que tout le reste réuni.
Dans cet article, nous voyons comment les scripts tiers influencent le chargement, la réactivité et la stabilité, comment mesurer leur coût réel et comment les gouverner sans renoncer aux outils dont le marketing a besoin.
Ce que sont les scripts tiers
Une ressource tierce est toute ressource que la page charge depuis un domaine que nous ne contrôlons pas : un script d’analytics servi par le fournisseur, le code d’un chat, un lecteur vidéo, une police provenant d’un service externe, les images d’un widget d’avis. La distinction ne porte pas sur l’utilité, mais sur le contrôle : le code peut changer à tout moment, peut à son tour charger d’autres ressources et dépend de l’infrastructure du fournisseur.
Les catégories les plus courantes sont toujours les mêmes : analytics et mesure, gestionnaires de balises, pixels des plateformes publicitaires et sociales, outils de test et de personnalisation, chat et assistance, avis et preuve sociale, heatmaps et enregistrement de sessions, gestion du consentement, contenus intégrés comme les vidéos, les cartes et les publications sociales, et bien sûr la publicité.
Comment ils pèsent sur les Core Web Vitals
Le coût d’un script tiers ne se limite pas aux kilo-octets téléchargés. Il agit sur plusieurs fronts à la fois.
- Nouvelles connexions. Chaque domaine différent exige une résolution DNS, une connexion et une négociation TLS. Sur un réseau mobile, chacune peut coûter des centaines de millisecondes, et une page avec quinze domaines externes en paie beaucoup.
- Travail sur le thread principal. Le JavaScript doit être téléchargé, analysé et exécuté, souvent en tâches longues qui bloquent le navigateur. C’est le facteur qui pèse le plus sur l’INP : un tap qui arrive pendant qu’un pixel publicitaire travaille doit attendre.
- Blocage du rendu. Un script synchrone dans le
<head>empêche la construction de la page tant qu’il n’a pas été téléchargé et exécuté, ce qui retarde le FCP et le LCP. - Décalages de mise en page. Les widgets, bandeaux et publicités insérés après le premier affichage bousculent le contenu et dégradent le CLS.
- Imprévisibilité. Le fournisseur peut mettre à jour son code à tout moment : une page rapide hier peut ralentir aujourd’hui sans que personne n’ait touché au site.
La cascade : des balises qui en chargent d’autres
Le gestionnaire de balises a rendu très facile l’ajout d’outils sans passer par les développeurs, et c’est un vrai confort. Mais il a aussi rendu la croissance invisible : chaque balise est une ligne dans un panneau, et chaque balise peut charger d’autres scripts, qui en chargent à leur tour d’autres encore. Le code réellement exécuté sur la page devient une cascade que personne n’a vraiment conçue.
Sur le thread principal d’un smartphone de milieu de gamme, cette cascade se traduit par de longs blocs de travail qui n’ont rien à voir avec le contenu de la page. Dans un audit, il est fréquent que le code du site ne représente qu’une fraction du temps d’exécution et que le reste soit tiers.
Le cas des tests A/B
Les outils de test et de personnalisation méritent une attention particulière. Pour éviter que l’utilisateur voie un instant la version originale avant la version de test, beaucoup d’entre eux utilisent un extrait de code qui masque toute la page jusqu’au chargement du script de l’expérience, avec un délai maximal qui peut atteindre quelques secondes. Du point de vue des métriques, c’est un désastre silencieux : pendant tout ce temps la page est blanche, et le LCP en porte la marque. Si un test A/B est nécessaire, mieux vaut l’exécuter côté serveur, ou limiter l’extrait aux pages concernées et au délai maximal le plus court possible.
Comment mesurer le coût réel
Avant d’agir, il faut savoir combien coûte chaque script tiers. Les outils ne manquent pas :
- Lighthouse résume le temps d’exécution et le poids des scripts tiers regroupés par fournisseur, et signale ceux qui bloquent le thread principal.
- Le panneau Performance des DevTools montre dans la trace quels scripts occupent le thread principal et quand, en distinguant le code first-party du code tiers.
- Le blocage de requêtes, disponible dans les DevTools comme dans WebPageTest, permet de charger la page sans un domaine donné et de comparer les métriques : c’est le moyen le plus direct de mesurer le coût d’un seul fournisseur.
- Le real-user monitoring, avec l’attribution pour l’INP et les images lentes, révèle quels scripts interviennent dans les interactions lentes sur les appareils des visiteurs.
La comparaison avec et sans un domaine est particulièrement utile dans les échanges avec le marketing : transformer « ce script ralentit le site » en « ce script ajoute 400 millisecondes de blocage sur mobile » rend la décision beaucoup plus concrète.
Première étape : l’inventaire
Gouverner les scripts tiers commence par une liste. Pour chaque script : ce qu’il fait, qui l’a demandé et en est responsable, sur quelles pages il est réellement nécessaire, combien il coûte, et s’il est toujours utilisé. Dans presque tous les audits, on trouve des balises de campagnes terminées, des outils de test jamais désactivés, deux solutions qui font la même chose, des pixels de plateformes abandonnées. Supprimer ce qui ne sert pas est l’optimisation la plus efficace et la seule sans contrepartie.
Charger moins, et au bon moment
Pour ce qui reste, il existe plusieurs leviers, et il faut les combiner :
- Seulement là où c’est nécessaire. Le pixel de conversion sert sur la page de confirmation de commande, le chat peut-être seulement sur les pages produit et contact, la carte seulement sur la page de localisation des magasins. Dans le gestionnaire de balises, un déclencheur limité aux bonnes pages suffit.
- Jamais en synchrone. Les scripts tiers doivent être chargés avec
asyncoudefer, et jamais de façon bloquante dans le<head>, sauf exceptions très rares et documentées. - Après le contenu. Ce qui n’est pas nécessaire au premier écran peut démarrer après le chargement ou quand le navigateur est inactif. Le différer jusqu’à la première interaction est possible, mais cela reporte le coût sur cette interaction même, comme nous l’avons expliqué en parlant de retarder JavaScript jusqu’au premier clic.
- Respecter le consentement. Les outils de profilage ne doivent pas démarrer avant le consentement de l’utilisateur : c’est une obligation légale avant d’être une optimisation, et cela réduit naturellement la charge pour ceux qui n’acceptent pas.
- Connexions anticipées, avec modération. Pour un ou deux domaines critiques, un
preconnectavance le DNS et le TLS ; utilisé pour tous les domaines, en revanche, il disperse les ressources.
Les façades
Pour les contenus intégrés lourds, la technique la plus efficace est la façade (facade) : à la place du vrai composant, on affiche un aperçu statique qui lui ressemble, et le composant ne se charge que lorsque l’utilisateur montre qu’il veut s’en servir. Une vidéo intégrée, par exemple, peut charger plusieurs centaines de kilo-octets de scripts et de styles même si personne ne la regardera jamais ; avec une façade, on n’affiche que l’image d’aperçu et un bouton, et le lecteur arrive au clic.
Le même principe s’applique aux chats, qu’on peut remplacer par un bouton qui ne charge le widget qu’au toucher, aux cartes, qui peuvent partir d’une image statique, et aux publications sociales intégrées. L’important est que la façade ait les mêmes dimensions que le composant final, pour ne pas introduire de décalages de mise en page.
<button class="video-facciata" data-video="ID_DEL_VIDEO" aria-label="Lire la vidéo">
<img src="/img/anteprima-video.avif" width="1280" height="720" alt="" loading="lazy">
</button>
<script>
document.querySelectorAll( '.video-facciata' ).forEach( ( el ) => {
el.addEventListener( 'click', () => {
const iframe = document.createElement( 'iframe' );
iframe.src = 'https://www.youtube-nocookie.com/embed/' + el.dataset.video + '?autoplay=1';
iframe.allow = 'autoplay; encrypted-media';
iframe.width = 1280;
iframe.height = 720;
el.replaceWith( iframe );
}, { once: true } );
} );
</script>
Déplacer le travail vers le serveur
Une voie de plus en plus courante est le suivi côté serveur (server-side tracking) : au lieu de charger dans le navigateur un pixel par plateforme, la page envoie les événements à un unique point de collecte sur votre propre domaine, qui les transmet ensuite aux différentes plateformes depuis le serveur. Le navigateur n’exécute qu’un seul script léger, les connexions vers des domaines externes diminuent et le contrôle sur les données envoyées augmente. Cela demande une infrastructure dédiée et une configuration soignée, surtout pour le consentement, mais sur les sites qui ont beaucoup de pixels publicitaires, l’avantage est significatif.
Quand la licence le permet, héberger certaines bibliothèques sur votre propre domaine au lieu de les charger depuis le service du fournisseur supprime aussi des connexions et rend le chargement plus prévisible. Il faut le faire avec discernement, car on perd les mises à jour automatiques du fournisseur.
Un exemple de nettoyage
Pour rendre la méthode concrète, imaginons un site e-commerce de taille moyenne avec un gestionnaire de balises qui a accumulé une vingtaine de balises au fil des ans. Le travail se déroule en général en quatre étapes.
- Instantané. On enregistre l’état actuel : domaines contactés, poids et temps d’exécution des scripts tiers en laboratoire sur mobile, et INP et LCP issus des données d’utilisateurs réels pour les pages principales, c’est-à-dire l’accueil, les catégories, les fiches produit et le panier.
- Nettoyage. Avec le marketing, on passe la liste en revue : on supprime les pixels des plateformes qui ne sont plus utilisées et les outils de test oubliés, on fusionne les solutions en double, on désactive les balises des campagnes terminées.
- Réorganisation. Ce qui reste n’est activé que là où c’est nécessaire et après consentement ; le chat et la vidéo passent en façade ; les balises inutiles au premier écran démarrent après le chargement ; là où le nombre de pixels le justifie, on évalue le suivi côté serveur.
- Vérification. On répète les mesures en laboratoire et, dans les semaines suivantes, on compare les données d’utilisateurs réels sur la même fenêtre de temps, en vérifiant aussi que les rapports marketing n’ont pas perdu d’événements.
Le dernier point est souvent négligé et il est pourtant essentiel : une optimisation qui casse le suivi des conversions est annulée à la première réunion. Mesurer à la fois la performance et les données marketing avant et après est ce qui fait durer le résultat.
Un processus, pas une intervention ponctuelle
Les scripts tiers ont tendance à revenir. Un site nettoyé aujourd’hui se remplit de nouveau en quelques mois, à chaque campagne et à chaque nouvel outil testé. C’est pourquoi il faut des règles partagées entre le développement et le marketing : un budget de performance pour les pages principales, une vérification avant l’ajout d’une nouvelle balise, un responsable pour chaque script et une revue périodique de l’inventaire. Le real-user monitoring, avec des alertes sur les seuils des Core Web Vitals, signale vite quand un nouvel outil, ou la mise à jour d’un outil existant, dégrade l’expérience.
C’est aussi une question de langage commun. Le marketing a besoin de mesurer les campagnes, et il a raison ; l’équipe technique a besoin de pages rapides, et elle a raison aussi. Mettre sur la table le coût de chaque outil, en millisecondes et en impact sur les conversions, permet de décider ensemble ce qui vaut la peine d’être gardé.
En résumé
Les scripts tiers ajoutent des connexions, occupent le thread principal, peuvent bloquer le rendu et décaler la mise en page, et changent sans préavis. Ils pèsent souvent plus sur les Core Web Vitals que le code du site lui-même. Les gouverner, c’est les connaître grâce à un inventaire, mesurer leur coût, supprimer ce qui ne sert pas, charger le reste seulement où et quand c’est nécessaire, utiliser des façades pour les composants lourds et, quand c’est pertinent, déplacer le travail vers le serveur.
Il ne s’agit pas de renoncer aux outils marketing, mais de les traiter pour ce qu’ils sont : du code exécuté sur les appareils des clients, avec un coût qui retombe sur l’expérience et donc sur les résultats. Chaque balise doit mériter sa place sur la page.