Zoekmachine optimalisatie: het risico van te veel JavaScript-afhankelijkheid voor je productteksten



Ik kom het de laatste jaren steeds vaker tegen: webwinkels en platforms die technisch best strak in elkaar zitten, maar waarbij de belangrijkste productteksten pas zichtbaar worden nadat JavaScript zijn werk heeft gedaan. Voor bezoekers voelt dat vaak prima. Voor zoekmachines kan dat net het verschil zijn tussen een productpagina die stabiel vindbaar is en een pagina die structureel onderpresteert zonder dat iemand precies begrijpt waarom.
Het lastige is dat dit probleem zelden ineens hard “kapot” gaat. Je merkt het eerder als een langzaam lek: pagina’s worden wel geïndexeerd, maar staan lager dan je verwacht. Of het wisselt per product, of het werkt in de ene categorie wel en in de andere niet, terwijl de pagina’s visueel hetzelfde lijken.
Waarom JavaScript een risico kan zijn voor productteksten
Zoekmachines kunnen JavaScript steeds beter verwerken, maar dat betekent niet dat je er blind op kunt bouwen. In de praktijk zijn er drie momenten waarop het mis kan gaan: het ophalen van de HTML, het uitvoeren van scripts en het uiteindelijk “zien” van de inhoud zoals een bezoeker die ziet. Als jouw productomschrijving, specificaties of veelgestelde vragen pas na het uitvoeren van scripts in de pagina komen, dan maak je je vindbaarheid afhankelijk van dat hele proces.
Daar zitten twee risico’s in, ten eerste: niet elke crawler verwerkt JavaScript even ver, even snel of even consequent. Ten tweede: zelfs als het uiteindelijk wel lukt, kan het meer tijd en middelen kosten en als een zoekmachine keuzes moet maken waar het rekenkracht op inzet, dan kan een zwaar JavaScript-afhankelijke pagina simpelweg minder vaak of minder volledig worden verwerkt.
Wat er vaak precies gebeurt
Veel moderne webwinkels gebruiken een opzet waarbij de server een basispagina teruggeeft met beperkte inhoud, en waarna de browser via JavaScript de echte productdata ophaalt uit een koppeling of een interne interface. Dat is functioneel logisch, maar zoekmachines zien bij de eerste stap soms vooral een lege huls. Als de producttekst niet al in de eerste HTML zit, moet de crawler een extra stap zetten om die tekst te krijgen.
Daarbij zie ik regelmatig dat productteksten in tabbladen staan die standaard dicht staan. Dat hoeft geen probleem te zijn, maar als de inhoud pas wordt opgehaald bij het aanklikken van een tab, dan bestaat de kans dat die tekst nooit in beeld komt voor de crawler. Hetzelfde geldt voor “lees meer” blokken die pas content ophalen nadat iemand scrolt of klikt.
Wat het betekent voor je belangrijkste SEO-signalen
Voor productpagina’s zijn er een paar onderdelen die vrijwel altijd het verschil maken: een heldere titel, een goede productomschrijving, relevante specificaties en een logische interne structuur met koppen. Dat is niet omdat zoekmachines “houden van tekst”, maar omdat je daarmee context geeft. Je helpt een zoekmachine begrijpen wat je verkoopt, voor wie het is en waarin het product zich onderscheidt.
Als die context pas laat of onbetrouwbaar beschikbaar is, dan stuur je een zwakker signaal en dan gaat het niet alleen om indexatie. Ook de beoordeling van relevantie kan anders uitpakken. Een pagina die technisch wel bestaat, maar inhoudelijk dun binnenkomt, moet concurreren met pagina’s die vanaf het eerste moment duidelijke inhoud laten zien.
In mijn ervaring zie je dit vooral terug bij:
- Producten met veel varianten, waarbij de tekst wisselt op basis van selectie.
- Categorieën met filters die de URL aanpassen, terwijl de content dynamisch blijft.
- Templates waarbij productomschrijvingen uit een extern systeem worden opgehaald na laden.
Hoe je herkent dat je te afhankelijk bent van JavaScript
Je hoeft hiervoor geen diep technische audit te doen om de eerste signalen te zien. Een eenvoudige controle is vaak genoeg om te bepalen of je verder moet uitzoeken.
Praktische check die je vandaag kunt doen
- Open een belangrijke productpagina in je browser.
- Bekijk de paginabron (niet de inspectietool, maar echt de bron).
- Zoek in de bron naar een zin uit je productomschrijving.
Als je producttekst niet in de bron staat, maar je ziet hem wel op de pagina, dan is de kans groot dat hij via JavaScript wordt toegevoegd. Dat hoeft niet direct fout te zijn, maar het is wel een duidelijk risico. De volgende stap is dan om te bepalen hoeveel van je commerciële inhoud zo werkt en of dit vooral je best verkopende producten raakt.
Een tweede signaal is wanneer productteksten kort zijn in de HTML, maar uitgebreid worden na laden. Je ziet dan in de bron misschien alleen een placeholder, een leeg element of een verwijzing naar een datamodel, terwijl de tekst pas later verschijnt.
Wat in de praktijk beter werkt
Voor pagina’s die omzet moeten draaien en structureel verkeer moeten pakken, probeer ik altijd één regel aan te houden: de kerninhoud moet direct beschikbaar zijn in de eerste HTML die de server teruggeeft. Dat betekent niet dat je hele site terug moet naar “oude” techniek. Het betekent wel dat je een bewuste keuze maakt over wat je wel en niet afhankelijk maakt van JavaScript.
Wat meestal goed werkt is een hybride aanpak: de pagina laadt snel, interactie werkt modern, maar de belangrijkste tekstblokken staan er al, dan heb je het beste van twee werelden. Je voorkomt dat je vindbaarheid afhankelijk wordt van de vraag of een crawler precies jouw scripts uitvoert zoals jij het bedoeld hebt.
Waar ik meestal prioriteit aan geef
- Productomschrijving als zichtbare tekst in de HTML, niet als dynamische injectie.
- Specificaties in een blok dat ook zonder klik of interactie in de HTML staat, desnoods ingeklapt maar aanwezig.
- Koppenstructuur die klopt zonder dat scripts koppen aanpassen of vullen.
- Unieke teksten per product, niet afhankelijk van variant selectie om überhaupt te verschijnen.
Dat betekent soms dat je concessies doet in hoe “strak” een interface voelt. Maar als je productpagina’s je belangrijkste acquisitiekanaal zijn, dan is betrouwbaarheid belangrijker dan een perfecte technische elegantie.
Varianten en dynamische content: extra valkuilen
Een specifieke valkuil is het variantenmodel. Als je een productpagina hebt met bijvoorbeeld tien varianten en elke variant heeft een andere beschrijving, dan zie ik vaak dat de tekst alleen wisselt na selectie. De vraag is dan: welke variant tekst staat er standaard in de HTML? Als dat een generieke tekst is of een lege staat, dan indexeer je in feite een minder relevante pagina dan je denkt.
Dat kan ook leiden tot verwarring in interne linking en canonicals, maar zelfs zonder dat wordt het lastig om per variant goed gevonden te worden. Soms is de oplossing om varianten die echt een eigen zoekvraag hebben een eigen URL te geven met eigen tekst. Soms is het genoeg om de meest relevante basisvariant volledig in de HTML te serveren en de rest als aanvulling te zien.
De praktische tip: maak een lijst van je toppagina’s en test ze op brontekst
Als je maar één ding doet na het lezen, doe dan dit: pak je top 20 productpagina’s op basis van omzet of marge, en check of de kerntekst in de paginabron staat. Niet op gevoel, niet op hoe het eruit ziet, maar letterlijk in de HTML.
Als meer dan een paar van die pagina’s hun productomschrijving pas via JavaScript krijgen, dan heb je een duidelijk verbeterpunt. Dan is het gesprek niet “moeten we iets met SEO”, maar “welke pagina’s mogen we niet laten leunen op een kwetsbare techniek laag". Vanuit daar kun je met je ontwikkelaar of bureau bepalen wat haalbaar is: volledig server-side renderen, vooraf gerenderde HTML of een gerichte aanpassing waarbij alleen de belangrijkste tekstblokken server matig worden meegegeven.
Wat je hiermee voorkomt
Het doel is niet om JavaScript te vermijden. Het doel is om je belangrijkste productteksten niet afhankelijk te maken van een proces dat voor zoekmachines net anders kan lopen dan voor je bezoekers. Je wil dat een productpagina vanaf de eerste milliseconde duidelijk maakt wat het is, voor wie het is en waarom het relevant is. Als dat fundament klopt, kun je daarna prima interactieve elementen en dynamiek toevoegen zonder dat je vindbaarheid op het spel staat.

