wij bouwen precies wat je nodig hebt
case · website + boekingen

Van 7,9 seconden wachten naar 0,9 — en bovenaan in Google.

7,9 sec0,9 sec
Zo lang keek iemand op zijn telefoon naar een leeg scherm voor er iets verscheen. Vakterm: First Contentful Paint.
wachten op de eerste tekst
16,310,9
Mei tegenover eind augustus. Op 74 zoekopdrachten staat A’DAM VR nu bij de eerste drie, waaronder “vr game amsterdam”.
gemiddelde plek in de zoekresultaten
3.616
Uit 302.677 keer dat de site in de zoekresultaten stond. Gemeten in Search Console, niet geschat.
bezoekers uit Google in drie maanden
in het kort
  • Wachten op de eerste tekst ging van bijna acht seconden naar negen tienden.
  • De gemiddelde plek in Google klom van 16,3 naar 10,9. In drie maanden 3.616 bezoekers.
  • Wij bouwden de site opnieuw en hingen er de meting, de verkoopketen en de campagnes aan.
  • Elk cijfer hieronder is na te meten. Bron en datum staan onderaan de pagina.
plan een gesprek projecten vanaf €2.000
vaste prijs vooraf
adam-vr.com
bekijk adam-vr.com live opname van de echte pagina, geen montage
de opdracht

Een VR-park in de A'DAM Toren draaide op een WordPress-site die in de loop der jaren was dichtgeslibd. Bezoekers wachtten bijna acht seconden op de eerste tekst. Alles eruit, opnieuw opgebouwd. Sneller, meertalig, met een redactie die er zelf bij kan. En een meting die laat zien wat er gebeurt.

waarom deze stack

Een thema en wat plug-ins hadden de snelheid niet gered. Het probleem zat in de opbouw zelf. Next.js rendert vooraf en levert vanaf de rand van het netwerk uit. Sanity haalt de inhoud uit de code. De redactie wacht niet meer op ons. Bewust géén paginabouwer: die brengt het gewicht terug dat we er net uit hebben gehaald.

het verhaalwaar het begon
A'DAM VR Game & Race Park
portret volgt

De oude site werd goed gevonden en slecht bezocht: ongeveer tachtigduizend vertoningen per maand rond positie tien, waarvan iets meer dan één procent doorklikte. Dat is geen zichtbaarheidsprobleem maar een aankomstprobleem. Mensen zagen het, klikten, en kwamen op iets dat achttien seconden deed over het grootste beeld. Daaronder lag een gegroeide adresstructuur: een taalprefix naast de kale root, -nl- en -en-achtervoegsels, en twee racepagina's die elkaar beconcurreerden op dezelfde zoekopdracht. We hebben de site niet versneld, we hebben hem opnieuw gebouwd. En eerst de nulmeting vastgelegd. Achteraf is te controleren of het werkte.

de site

4 onderdelen
01

De structuur eerst, daarna pas het uiterlijk

De grootste winst zat in de adressen, niet in het ontwerp. Elke pagina heeft nu één canoniek adres. De taalversies staan naast elkaar in plaats van door elkaar. Elke oude URL komt in één stap op zijn nieuwe plek uit, zonder ketens die zichzelf doorverwijzen.

  • root = Nederlands, /en/* = Engels, met hreflang aan beide kanten
  • sitemap van 112 adressen, consistente trailing slash
  • gestructureerde data per paginatype
  • omleidingskaart in één stap, geen ketens
adam-vr.com/en
dezelfde pagina op /en/ · de root is Nederlands, /en/* is Engels, met hreflang aan beide kanten
02

De cijfers hierboven zijn op een telefoon gemeten

De drie getallen bovenaan deze pagina komen uit één meting: Lighthouse in mobiele modus, met de vertraging erop die daar standaard bij hoort. Dat is bewust de zwaarste van de twee, en het is ook degene die telt. Iemand kiest zijn uitje op zijn telefoon, niet achter een glasvezelaansluiting. Wat je hiernaast ziet is dezelfde pagina uit dezelfde codebasis; er is geen aparte mobiele versie die achterloopt.

  • gemeten met Lighthouse 13.4, mobiel, standaard vertraging
  • één codebasis voor telefoon en desktop
  • de nulmeting van 28-07 en de meting erna draaiden op hetzelfde profiel
adam-vr.com
dezelfde pagina op een telefoon · één codebasis, geen aparte mobiele versie
03

Meten wat er echt gebeurt

De oude site kon niet vertellen waar bezoekers afhaakten. Er ligt nu een dubbele meetlaag: PostHog voor het gedrag en GA4 voor de vergelijkbaarheid met wat er al was. De twee momenten die ertoe doen zijn eigen gebeurtenissen geworden. Een boeking is terug te leiden naar waar hij vandaan kwam.

  • PostHog: trechters, sessieopnames, heatmaps, foutmeldingen
  • GA4 en GTM behouden; de historie breekt niet
  • boek_nu_klik en formulier_verzonden als eigen gebeurtenissen
  • analytics achter toestemming
04

De redactie hoeft niet meer te bellen

Alles wat verandert staat in het CMS: blog, experiences, tarieven, groepspakketten en de losse paginateksten. Campagnepagina's krijgen hun eigen adres onder /acties/ en zijn vóór publicatie te bekijken. Er ligt een handleiding bij, geschreven voor de redacteur en niet voor de ontwikkelaar.

  • prijzen en pakketten uit het CMS, niet uit de code
  • campagnepagina's op een eigen adres, met conceptweergave
  • reviewcijfers uit één bron die code, CMS én mail voedt
Het spellenoverzicht van adam-vr.com
negentien spelpagina's · beeld, teksten, prijzen komen uit het CMS

Zit jouw site ook vast in een thema dat elk jaar een beetje trager werd?

plan een gesprek

de verkoopketen

7 onderdelen
05

De keten van klik tot gewonnen boeking

Een groepsaanvraag verdween voorheen in een inbox, en daarmee ook het antwoord op de vraag welke advertentie hem had opgeleverd. Nu loopt er één keten: het formulier gaat naar de eigen database, wordt een deal in het CRM, en neemt de advertentie-klik onderweg mee. Wordt die deal weken later gewonnen, dan gaat dat 's nachts terug naar Google Ads als offline conversie. Zo kan er eindelijk op omzet gestuurd worden in plaats van op formulieren.

  • formulier → eigen database → deal in het CRM, klik-id gaat mee
  • nachtelijke ronde meldt gewonnen deals terug aan Google Ads
  • transactiemails in de huisstijl, verstuurd vanuit de eigen infrastructuur
adam-vr.com/bedrijfsuitje
hier begint de keten · dit formulier wordt een deal in het CRM
de techniek eronder6 onderdelen
06

Bewust géén directe koppeling, en dat scheelt een abonnement

De voor de hand liggende oplossing was een webhook: deal gewonnen, meteen doorgeven. Die zit er expres niet in. Hij vereist een duurder CRM-pakket, en het verschil zou alleen snelheid zijn. Bij groepsboekingen zitten er dagen tot weken tussen de klik en de gewonnen deal, en advertentieplatforms accepteren offline conversies tot negentig dagen na de klik. Eén keer per nacht is hier niet de goedkope variant, het is de juiste.

07

Het CRM is ingericht, niet aangezet

Een standaard CRM levert je een lege trechter en het advies om er zelf iets van te maken. Hier staat een pipeline die de werkelijke verkoop volgt. Van nieuwe aanvraag via offerte en datum-in-optie naar geboekt, gefactureerd of betaald op locatie. Verloren is een eigen uitgang. Daaronder eigen velden: soort groep, aantal personen, aanvangstijd, betaalwijze, draaiboek, verliesreden, bronkanaal.

  • keuzelijsten met vaste waarden; de site vertaalt ernaartoe in plaats van rauwe tekst te sturen
  • een onbekende waarde wordt 'overig', nooit een foutmelding die de hele aanvraag laat vallen
  • elke deal krijgt een eigenaar toegewezen, anders vuren de bewakingen op niemand
08

Acht bewakingen die voorkomen dat een aanvraag stilvalt

Een groepsaanvraag is dagen tot weken werk, en daar gaat het mis. Zelden doordat iemand nee zegt. Doordat er niemand meer achteraan gaat. Er staan nu acht bewakingen op de trechter die een taak maken zodra iets blijft liggen. Geen inhoudelijk antwoord, vierentwintig uur stil, de derde dag stil. Een offerte die niet is nagebeld, een optie die verloopt. Een verloren deal zonder reden, een boeking zonder aanvangstijd of betaalwijze.

09

En een takenlijst die zichzelf opruimt

Zulke bewakingen zijn nooit beter dan de lijst die ze vullen. Daar zat het echte probleem. Het CRM maakt taken aan maar sluit ze nooit, ook niet als de deal allang verder is. Wij maten zestig taken over elf deals, waarvan het merendeel openstond én al gedaan was. Een lijst waarvan de helft af is, wordt binnen twee weken niet meer geopend, en dan valt de hele trechter om. Er draait nu een opruimer die een taak sluit zodra de deal hem heeft ingehaald.

  • sluit uitsluitend taken die het systeem zelf heeft aangemaakt; je eigen 'bel Nadia maandag' blijft altijd staan
  • taken gaan op voltooid en worden niet verwijderd; achteraf blijft zichtbaar hoeveel er ooit heeft stilgelegen
  • post van no-reply-adressen, facturenboxen of collega's onderling telt niet als klantreactie; op één dag was negentien van de twintig taken geen klant
10

De voorgeschiedenis hoort bij de persoon

Een contact via de gewone CRM-koppeling aanmaken werkt, maar levert een leeg dossier op: je ziet het moment van invullen en verder niets. Alleen een inzending via de formulier-route, mét het cookie van de bezoeker, plakt álle eerdere sessies, paginaweergaven en het oorspronkelijke bronkanaal aan die persoon vast. Daarom gaat het formulier eerst en volgen de CRM-aanroepen daarna. Sales ziet daardoor niet alleen dát iemand aanvroeg. Ook wat hij ervoor zat te lezen staat erbij.

11

Één klant, één bedrijf

Het CRM maakt zelf een bedrijf aan zodra er een contact met een zakelijk e-mailadres binnenkomt, en dat gebeurt op de achtergrond. Wij maakten er ook een. Resultaat: twee bedrijven voor hetzelfde domein, gemeten op zevenenvijftig milliseconden uit elkaar, bij élke nieuwe zakelijke aanvraag. Opgelost zonder de bezoeker te laten wachten. Eerst kijken wat er al aan het contact hangt, dan pas zoeken, dan pas aanmaken. 's Nachts wordt samengevoegd wat er alsnog dubbel staat.

  • publieke maildomeinen krijgen geen bedrijf, anders heet je grootste klant 'Gmail'
  • de opgegeven bedrijfsnaam overschrijft nooit een naam die er al goed stond
  • de eigen database schrijft eerst en blokkeert; het CRM is best-effort, dus een storing daar kost nooit een aanvraag

Verdwijnen jullie aanvragen ook in een mailbox, en gaat er daarna hopelijk iemand achteraan?

plan een gesprek

campagne & e-mail

5 onderdelen
12

Een campagnemachine, geen losse landingspagina's

Elke actie kreeg vroeger zijn eigen stuk code, en dus zijn eigen ontwikkelaar en zijn eigen deploy. Nu is een campagnepagina een documenttype: marketing maakt hem zelf aan, bekijkt hem als concept, en publiceert. De pagina verschijnt tweetalig op een eigen adres. Staat er een einddatum in, dan gaat hij daarna vanzelf offline en uit de sitemap. Niemand hoeft eraan te denken.

  • drie soorten campagnepagina: actie, landing en segment
  • conceptweergave vóór publicatie, met een knop in de redactieomgeving
  • automatisch starten en stoppen op datum
  • eerste pagina die erop draait: de partneractie met KPN, live
adam-vr.com/acties/kpn
een campagnepagina uit het CMS · gebouwd door marketing, zonder deploy
13

Het sjabloon laat met opzet dingen niet toe

De verleiding bij zo'n machine is om alles vrij te geven. Zo gaan prijzen afwijken van de kassa. Een campagnepagina heeft daarom géén prijsveld. Hij verwijst naar het product, en de prijs wordt berekend. Geen kassa-URL, die wordt afgeleid uit het product-id. Geen reviewgetal, daar staat een token. En publiceren wordt geblokkeerd zolang de verplichte velden leeg zijn.

  • prijs berekend uit het product, nooit ingetypt
  • kassa-adres afgeleid, nooit opgeslagen
  • publiceren geblokkeerd zonder meta en voorwaarden in beide talen
adam-vr.com/prijzen
prijzen staan op één plek; een campagnepagina rekent ze uit in plaats van ze over te typen
14

Één bron voor de reviewcijfers

Het aantal reviews stond op vier plekken los in de teksten: in de code, in het CMS, in de e-mails en in de gestructureerde data. Vier plekken betekent vier keer verouderen. Er draait nu een synchronisatie bij elke build. Die haalt het echte cijfer op en zet het op één plek neer. De rest draagt een token dat bij het renderen wordt ingevuld. In lopende tekst ronden we naar beneden af op vijftig. De bewering blijft waar tussen twee builds door.

  • 42 velden in 12 CMS-documenten dragen een token in plaats van een getal
  • ook de e-mailsjablonen dragen tokens, want een verzonden mail kan niets meer opzoeken
  • naar beneden afgerond: de tekst belooft nooit méér dan er staat
15

De e-mailmachine

Naast de site staat een volledig ingerichte e-mailomgeving op een eigen verzenddomein: acht flows die op gedrag en op lijsten afgaan, samen negentien mails. De sjablonen staan in versiebeheer en niet in een interface. Elke wijziging is te herleiden. Verzenden gebeurt in golven, nooit het hele bestand tegelijk. Anders is één fout meteen onherstelbaar.

  • mobiel-eerst gestapeld als basis, niet in een mediaquery, want Gmail gooit stijlbladen weg
  • beelden als JPG op tweemaal de weergavebreedte, want webp toont niet in Outlook
  • de kop over de hero is levende tekst, niet in het beeld gebakken
  • campagnenaam dynamisch in de UTM's, dus elke golf is een eigen regel in de statistiek
16

Testen wat werkt, in plaats van vinden wat werkt

Op de voorpagina krijgt de ene helft van de bezoekers de secties in een andere volgorde dan de andere helft. In de e-mails gaat dat vanzelf: twee versies eruit, de winnaar blijft staan. De echte beperking is het aantal bezoekers. Bij weinig verkeer meet je toeval. Daarom zetten we twee écht verschillende aanpakken tegen elkaar, geen twee formuleringen van dezelfde zin. Zo'n verschil is groot genoeg om boven het toeval uit te komen.

de cijfers · snelheid op een telefoonvoor → na

Gemeten met Lighthouse op een nagebootste 4G-telefoon: oude site tegenover nieuwe, zelfde tool, zelfde instellingen. Bewust geen totaalcijfer — dat schuift mee met elk script dat er later bij komt. Wie de vaktermen wil: First Contentful Paint, Speed Index, Total Blocking Time en Cumulative Layout Shift, in die volgorde.

Wachten op de eerste tekst7,9 sec0,9 sec8,8× sneller
Wachten tot de pagina er echt staat13,6 sec1,0 sec12× sneller
Tijd dat de pagina nergens op reageert1,1 sec0,01 sec110× korter
Verspringen van de pagina onder je vingermerkbaargeen
Bruikbaar met schermlezer en toetsenbord72100+28
de cijfers · gemeten op de echte site, niet in een testvoor → na

Echte paginalaad op adam-vr.com, 30 juli 2026, uit de browser zelf (Navigation Timing).

Tijd tot de server antwoordt~0,9 sec0,02 tot 0,08 secde pagina ligt klaar, in plaats van dat hij per bezoeker gemaakt wordt
Pagina helemaal binnen·0,6 tot 0,7 sec
Verspringen tijdens het laden·geen
Bestanden die de browser ophaalt·ongeveer 58
de cijfers · opruimen: wat Google te zien kreegvoor → na

Stond dezelfde pagina op vier adressen, dan koos Google zelf welke hij toonde. De waarde werd over vier verdeeld in plaats van op één gezet.

Adressen waarop dezelfde pagina stondtot vieréén
Eigen pagina's die om dezelfde zoekopdracht vochten21
Nederlands en Engelsdoor elkaarNederlands op het hoofdadres, Engels achter /en/
Doorverwijzingenvia twee of drie tussenstopsin één keer
hoogtepunten · de leisure-funneleen greep, niet alles
01
gevonden worden
schone i18n + hreflang
112-URL-sitemap, JSON-LD
02
aankomen
vooraf gerenderd, edge-cache
nul verspringende opmaak
03
kiezen
experiences & tarieven uit het CMS
meer-info zonder paginawissel
04
boeken
mobiel-eerst boekflow
boek_nu_klik als event
05
opgevolgd worden
transactiemails via Resend
leads door naar HubSpot
hoogtepunten, geen volledige lijst. op mobiel horizontaal te scrollen.
de tijdlijn
28-07-2026Nulmeting vastgelegd op de oude site, vóór de overgang.
30-07-2026Live op adam-vr.com. Eerste meting op het productiedomein.
+3 en +6 mndToetsmomenten uit het trackingplan: organisch verkeer, doorklik, conversie.
de verantwoordingna te meten
Snelheid van de nieuwe buildLighthouse 13.4, mobiel, standaard throttling28-07-2026
Toegankelijkheid en vindbaarheid van de live site: allebei 100Lighthouse 13.4.1, mobiel31-08-2026
Klikken, vertoningen en gemiddelde positieGoogle Search Console via Supermetrics1 juni tot 30 augustus 2026
Zoekopdrachten in de top 3Ahrefs Site Explorer, Nederland31-08-2026
Vertoningen, doorklik en positieGoogle Search Console, zes maandenfeb tot jul 2026
Live paginalaadNavigation Timing op adam-vr.com30-07-2026
Verkeer en conversieGA4, rollend twaalf maandenjul 2025 tot jul 2026
wat we hier niet claimen
  • Largest Contentful Paint staat er bewust niet als winstcijfer bij. Die metriek wordt bij beide metingen vertekend door het toestemmingsscript. Dat is geen eerlijke vergelijking.
  • De SEO-score van de nieuwe build werd op een afgeschermde omgeving gemeten, met indexering uit. Dat is een meetartefact van de testopstelling, geen tekortkoming van de site.
  • De officiële Lighthouse-score op het live domein moet nog gedraaid worden; de cijfers hierboven komen van de productie-build.
  • Wat organisch verkeer en doorklikratio doen, weten we pas bij de meting op drie en zes maanden. Die staan in het trackingplan en worden hier ingevuld, ook als ze tegenvallen.
en jij?

Herken je hier iets in?

  • Je site is traag, en niemand kan precies aanwijzen waar bezoekers afhaken.
  • Elke tekstwijziging moet langs een ontwikkelaar.
  • Aanvragen komen binnen in een mailbox, en daarna is het hopen dat er iemand achteraan gaat.
  • Je adverteert, maar weet niet welke campagne de boekingen oplevert die pas weken later rondkomen.
  • Elke actie of partnerdeal is opnieuw een stuk maatwerk.

Met dat rijtje begon A'DAM VR ook. Het hoeft niet in één keer. Dit is stuk voor stuk gebouwd, met steeds eerst een nulmeting. Achteraf staat vast of het werkte.

volgende caseKlare Wijn · website + leads
start je eigen project?plan een gesprek projecten vanaf €2.000 · vaste prijs vooraf
nog aan het kijken?doe de gratis check wij lopen je site na · geen verkoopgesprek