Laad een chat widget met perfecte Core Web Vitals

Laad een chat widget die PageSpeed en de Core Web Vitals niet verstoort

Arjen Karel Core Web Vitals Consultant
Arjen Karel - linkedin
Last update: 2026-02-26

Hoe je een chat widget op de juiste manier laadt!

Ik heb het keer op keer gezegd. Sommige scripts zijn belangrijker dan andere. Niemand in de geschiedenis van het internet is ooit geïrriteerd geweest dat een chat widget niet in de eerste 500ms van het laden van de pagina is geladen. Die tijd dat de pagina nog wit is.

Het zou nergens op slaan toch, om een chat widget te laden voordat de hoofdinhoud van de pagina zelfs maar is begonnen met laden? Nee, het zou veel logischer zijn om eerst de belangrijkste delen te laden (je logo, je hoofdafbeelding, je stylesheets, je fonts, misschien enkele superbelangrijke scripts die navigatie en conversie afhandelen)

Helaas is dit niet de manier waarop de meeste websites dingen doen. Dagelijks zie ik onbelangrijke scripts (zoals chat scripts) laden met de hoogste prioriteit direct aan het begin van het laden van de pagina.

In dit artikel zal ik uitleggen hoe je een chat script correct laadt en hoe dit belangrijke metrieken zoals de largest contentful paint en de interaction to next paint beïnvloedt.

Achtergrond: hoe werken chat widgets

Een chat widget werkt meestal door een klein script op je pagina te laden. Dat script laadt wat stijlen en injecteert een iframe op je pagina. Een iframe is een kleine geïsoleerde webpagina binnen een webpagina. En dat iframe handelt alles af wat het nodig heeft om met je klanten te chatten.

Hoe beïnvloeden chat widgets de Core Web Vitals?

Chat widgets beïnvloeden de Core Web Vitals op een paar manieren:

1. Ze beïnvloeden de First Contentful Paint & Largest Contentful Paint door te concurreren om vroege netwerkresources.

2. Ze beïnvloeden de interaction to next paint door de main thread te blokkeren en soms door langzaam te updaten na interactie.

3. Ze kunnen layout shifts veroorzaken wanneer ze niet correct op de pagina renderen

Largest Contentful Paint problemen veroorzaakt door chat widgets

Een chat widget kan de Core Web Vitals beïnvloeden wanneer deze concurreert om netwerkresources. JavaScript wordt meestal eerder in de wachtrij voor downloaden geplaatst dan afbeeldingen. Dit betekent dat in het ergste geval (wanneer het chat script render blocking is) de browser moet wachten tot het chat script is gedownload en uitgevoerd voordat hij met iets anders verder kan gaan.

Zelfs wanneer het chat script deferred is, kan het nog steeds impact hebben op de paint metrieken op een paar manieren. Laat me eerst uitleggen wat deferred scripts doen. De browser kan deferred scripts parallel downloaden en de browser kan doorgaan met renderen tot het DomContentLoaded event. Daarna zal hij de scripts uitvoeren. Het probleem is dat voor terugkerende bezoekers het LCP-element waarschijnlijk niet geladen zal zijn bij het DomContentLoaded event, maar het (gecachete) chat script zal uitvoeren, wat een vertraging in LCP-metrieken veroorzaakt.

Interaction to Next Paint (INP) problemen veroorzaakt door chat widgets.

Een chat widget kan en zal de Interaction to Next Paint op 2 manieren beïnvloeden. De eerste manier is door de main thread voor een korte tijd te blokkeren terwijl de chat widget zijn scripts uitvoert of controleert op updates. Dit is nu eenmaal hoe dingen werken. Alles wat je 'aan een pagina toevoegt', zal de pagina een beetje vertragen. 

De tweede manier waarop het INP-problemen kan veroorzaken is door slechte code (en geloof me, er zijn een aantal slecht gecodeerde chat widgets die er zijn.) Wanneer het aankomt op chat widgets betekent 'populairder' niet 'beter gecodeerd'. Wanneer slechte code lang doet over het updaten van de presentatie, krijg je automatisch INP-problemen. Ik gok dat sommige chataanbieders hun spel moeten verbeteren. Dit deel is helaas buiten mijn controle. Als je een 'slecht gecodeerde' chat widget hebt gekozen, is er geen manier voor mij om die code beter te maken. 

Layout Shift (CLS) problemen veroorzaakt door chat widgets

Soms veroorzaken Chat widgets een layout shift. Er zijn 3 gebruikelijke verdachten waar ik naar zoek tijdens het controleren op chat-widget gerelateerde layout shifts.

  • Layout shifts die elke keer optreden bij het laden van de chat
  • Layout shifts die optreden bij een vertraagde 'chat open'
  • Layout shifts die optreden wanneer een chatgeschiedenis wordt geladen (terugkerende chatbezoeker)

Hoe Core Web Vitals problemen veroorzaakt door chat scripts te fixen

Gelukkig is het vrij eenvoudig om de impact die een chat widget kan hebben op paint metrieken (LCP & FCP) en op sommige delen van de interaction to next paint (INP) te minimaliseren. In mijn openingsverklaring vertelde ik je dat scripts een tijd en een plaats hebben. En voor chat scripts is dat niet 'meteen en koste wat het kost'. Ik laad chat scripts graag na het load event, wanneer de pagina niet reageert op gebruikers invoer en ik omzeil ook graag de preload scanner om netwerkconcurrentie te vermijden. 

Dus hoe doen we dat? We gebruiken het load event omdat wanneer het load event is afgevuurd, het LCP-element op de pagina geschilderd zal zijn (tenzij je het lazy geladen hebt met JavaScript). We gebruiken requestIdleCallback om te wachten op een inactief moment wanneer de browser niet reageert op gebruikers invoer. En we gebruiken JavaScript om het chat script te injecteren om ervoor te zorgen dat de preload scanner de script src niet onmiddellijk herkent en een vroege download triggert (en dat is precies wat we willen vermijden!)

<script>
/* requestIdleCallback fallback voor oudere browsers  */
var safeRequestIdleCallback = window.requestIdleCallback || function (cb) {
    return setTimeout(function () {
        cb();
    }, 1);
}   

/* uitvoeren na het load event */
window.addEventListener('load', function () {
    /* wanneer browser inactief is */
    safeRequestIdleCallback(function () {
        /* injecteer script, omzeil preload scanner */
        var script = document.createElement('script');
        script.src = 'jouw-chat-script.js';
        document.body.appendChild(script);
    });
});
<script>

Fix Cumulative Layout Shifts problemen veroorzaakt door chat widgets

Chat widgets zullen meestal een kleine layout shift veroorzaken. Dat hoeft geen enorm probleem te zijn. Maar soms renderen chat widgets gewoon slecht. Gelukkig kunnen we dat ook (soort van) fixen door de slechte render te verbergen totdat de widget klaar is met renderen.

Om dit te doen moeten we de docs van de chat widget lezen (er zijn veel verschillende chataanbieders en ze werken allemaal net even anders). Zoek in de docs naar callback functies die worden aangeroepen in verschillende stadia van de chat rendering. Aangezien ik niet weet welke chat widget je gebruikt, illustreren we het mechanisme voor nu met de gebruik van de chat.ready() functie.

Nu kunnen we met wat slimme styling de chat verbergen en weergeven met de CSS opacity eigenschap. Eerst voegen we wat klassen toe om de chat widget standaard te verbergen (verander de beschrijvingen om overeen te komen met je chat widget). Vervolgens voegen we in de chat.ready() callback 'showchat' toe aan de body classlist om de tweede CSS-regel te activeren die de chat weer toont.
<style>
/*verberg chat widget standaard*/
.chatwidget{opacity:0}
/*toon chat widget na .showchat body class*/
body.showchat .chatwidget {opacity:1}
<style>
<script>
chat.ready(function(){
  document.documentElement.classList.add('showchat');
}) <script>

Dat is het! Veel succes met het versnellen van je chat widget

Search Console flagged your site?

When Google flags your Core Web Vitals you need a clear diagnosis fast. I deliver a prioritized fix list within 48 hours.

Request Urgent Audit
Laad een chat widget met perfecte Core Web VitalsCore Web Vitals Laad een chat widget met perfecte Core Web Vitals