Kort antwoord: SEO voor single-page applicaties (SPA's) is lastig omdat de initiële HTML vaak bijna leeg is — de inhoud wordt via JavaScript geladen nadat de pagina is aangekomen, en crawlers kunnen de lege shell indexeren. De oplossing is server-side rendering (SSR) of prerendering, zodat elke URL volledige HTML retourneert, plus echte crawlbare URL's, correcte HTTP-statuscodes en server-gerenderde meta en schema. Shopify-winkels worden al server-side gerenderd, dus dit is vooral van belang voor aangepaste of headless builds.
Single-page applicaties gaven het web het gevoel van software — directe navigatie, geen volledige herlaadbeurten, app-achtige interacties. Ze braken ook stilletjes een van de oudste aannames van SEO: dat de HTML die een server verstuurt, de inhoud is die een crawler leest. In een standaard client-gerenderde SPA stuurt de server een bijna lege shell en bouwt JavaScript de pagina in de browser, zodat een crawler die die JavaScript niet uitvoert, niets ziet om te indexeren. De oplossing is niet om de SPA-architectuur te verlaten; het is om echte HTML te versturen met server-side rendering. Deze gids legt uit waarom SPA's riskant zijn voor SEO, welke renderstrategieën dit oplossen, en waar dit van invloed is op Shopify — wat voor de meeste handelaren alleen geldt wanneer ze headless gaan.
Waarom single-page applicaties riskant zijn voor SEO
Een traditionele website stuurt een volledig gevormd HTML-document voor elke URL. Een single-page applicatie draait dat om: de eerste reactie is een bijna lege shell plus een JavaScript-bundel, en de browser stelt de zichtbare pagina samen door dat JavaScript uit te voeren en gegevens op te halen. Geweldig voor gebruikers met een snel apparaat. Een probleem voor alles dat HTML leest zonder scripts uit te voeren.
Crawlers zijn precies dat. Om een client-rendered SPA te indexeren, moet een crawler de shell downloaden, je JavaScript uitvoeren, wachten tot de gegevens zijn geladen en pas dan de inhoud zien. Google kan dit doen, maar in een uitgestelde tweede ronde die dagen kan achterlopen, en het breekt stilletjes wanneer een script fouten bevat of een bron wordt geblokkeerd. Bing is hier zwakker in. En de AI-crawlers achter de antwoordmachines zijn nog zwakker — veel halen alleen ruwe HTML op en renderen helemaal niet. Dus de standaard SPA gokt op de bereidheid en het vermogen van elke crawler om je code correct uit te voeren, en die gok wordt slechter naarmate zoekopdrachten meer naar AI verschuiven.
De symptomen zijn bekend: pagina's die niet ranken, een bijna lege gecachte versie in Google, sociale en AI-voorbeelden die een lege titel tonen, en een site die er perfect uitziet voor jou maar onzichtbaar is voor een bot. De onderliggende oorzaak is altijd dezelfde — de inhoud staat niet in de HTML.
De oplossing: stuur echte HTML
Elke oplossing voor SPA SEO doet hetzelfde: ervoor zorgen dat een crawler volledig gerenderde HTML ontvangt voor elke URL zonder JavaScript uit te voeren. Er zijn drie manieren om dit te bereiken.
| Methode | Hoe het werkt | Beste voor | Beperkingen |
|---|---|---|---|
| Server-side rendering (SSR) | Bouwt HTML op de server voor elk verzoek en hydrateert het vervolgens tot een live app in de browser. | Dynamische inhoud—productpagina's, zoekresultaten, gepersonaliseerde of vaak bijgewerkte inhoud. | Vereist een serverruntime; kan latentie toevoegen als het niet geoptimaliseerd is. |
| Static site generation (SSG) / prerendering | Bouwt HTML vooraf op bij de implementatie en serveert een statisch bestand per route. | Stabiele, identieke pagina's voor iedereen—marketingpagina's, blogposts, documentatie. | Inhoud is vast tot de volgende build; niet geschikt voor een live, constant veranderende catalogus. |
| Dynamische rendering | Detecteert crawlers en serveert hen een apart voorgerenderde HTML-versie terwijl gebruikers de normale SPA krijgen. | Legacy-oplossing voor een bestaande client-only app die niet onmiddellijk kan worden herbouwd. | Voegt een onderhoudsintensieve renderingpijplijn toe; Google beschouwt het als een workaround, geen aanbeveling. |
Server-side rendering (SSR) bouwt de HTML op de server voor elk verzoek en hydrateert het vervolgens tot een live app in de browser. De crawler krijgt volledige inhoud bij de eerste respons; de gebruiker krijgt nog steeds de SPA-ervaring na hydratatie. Dit is de meest robuuste optie en de juiste standaard voor inhoud die verandert — productpagina's, zoekresultaten, alles wat gepersonaliseerd of vaak bijgewerkt is. Frameworks zoals Next.js, Nuxt, Remix en Shopify's Hydrogen zijn hierop gebouwd.
Static site generation (SSG) / prerendering bouwt de HTML vooraf op bij de implementatie en serveert een statisch bestand per route. Het is de snelste en meest doorzoekbare optie, ideaal voor pagina's die voor iedereen hetzelfde zijn — marketingpagina's, blogposts, documentatie. De beperking is dat de inhoud vast is tot de volgende build, dus het is geschikt voor stabiele pagina's, niet voor een live catalogus.
Dynamische rendering detecteert crawlers en serveert hen een apart voorgerenderde HTML-versie terwijl gebruikers de normale SPA krijgen. Google beschouwt dit nu als een legacy-workaround in plaats van een aanbeveling, en het voegt een hele renderingpijplijn toe om te onderhouden, maar het kan een pragmatische brug zijn voor een bestaande client-only app die je nog niet kunt herbouwen.
Voor de meeste teams die opnieuw beginnen, is SSR (met statische generatie voor de pagina's die daarvoor in aanmerking komen) de oplossing. Het verwijdert de afhankelijkheid van de renderer van een crawler volledig, wat de enige manier is om indexering deterministisch te maken over Google, Bing en de AI-engines tegelijk.
SPA SEO-grondbeginselen voorbij rendering
Server-rendering van de HTML is noodzakelijk, maar niet voldoende. Een SPA moet ook rekening houden met de zaken die een multi-pagina site gratis krijgt.
Echte URL's per weergave. Elke indexeerbare staat heeft zijn eigen doorzoekbare URL nodig met behulp van de History API, niet een fragment (#) of een in-memory staat. Als een weergave geen URL heeft, kan deze niet worden geïndexeerd of gelinkt. Metadata per route. Elke route moet zijn eigen titel, metabeschrijving en canonieke tag instellen — bijgewerkt terwijl de gebruiker navigeert, en aanwezig in de server-gerenderde HTML, niet alleen achteraf toegevoegd door client-side JavaScript. Gestructureerde data per pagina. Geef de JSON-LD — Product, Artikel, FAQPage — in de serverrespons zodat deze beschikbaar is bij de eerste lezing. Correcte statuscodes. Een server-gerenderde app kan een echte 404 of 301 retourneren; een client-only app retourneert vaak 200 voor alles, wat de index vervuilt met soft-404's. Schone interne links. Gebruik echte anker-tags met href-attributen zodat crawlers ze kunnen volgen, niet klikhandlers op divs.
Als je de rendering goed doet maar deze negeert, heb je weer onzichtbare pagina's — om een andere reden.
Waar dit daadwerkelijk van invloed is op Shopify
De meeste Shopify-verkopers houden zich hier nooit mee bezig, en het is belangrijk om duidelijk te maken waarom. Een standaard Shopify-winkel op een Liquid-thema wordt server-side gerenderd: Shopify stuurt complete HTML voor elk product, elke collectie en elke pagina. Je SEO-werk daar betreft content, meta, schema en indexering — de klassieke Shopify SEO stack — niet het renderen, omdat het platform al op de server rendert.
SPA SEO wordt pas een probleem wanneer je headless gaat: een aangepaste winkel bouwen met Shopify's Hydrogen-framework of een zelfgemaakte React-, Vue- of Svelte-frontend die communiceert met de Storefront API. Die ontkoppeling biedt ontwerp- en prestatievrijheid en geeft je de verantwoordelijkheid voor het renderen terug. Dit is precies waarom Hydrogen standaard server-side rendert en op Oxygen wordt ingezet — Shopify heeft geleerd dat een client-only headless winkel een SEO-risico is, dus het framework dicht die kloof voor je. Een aangepaste headless build die alleen in de browser rendert, is waar verkopers elk probleem in deze gids opnieuw creëren.
De praktische regel: als je op een Liquid-thema zit, is dit niet jouw zorg — optimaliseer content en schema. Als je headless gaat, kies dan vanaf dag één een SSR-framework en beschouw client-only rendering als een fout om te vermijden in plaats van een fase om later op te lossen.
SSR en AI-zoekopdracht
Server-side rendering is in het AI-tijdperk belangrijker geworden, niet minder. De crawlers achter ChatGPT, Perplexity, Claude en de AI Overviews zijn over het algemeen slechter in het uitvoeren van JavaScript dan Google; veel van hen halen alleen ruwe HTML op en renderen niets. Een client-only SPA die Google uiteindelijk rendert, kan volledig onzichtbaar zijn voor de antwoordmachines — je zou langzaam ranken in het kanaal dat kopers verlaten, terwijl je niet citeerbaar bent in het kanaal waar ze naartoe bewegen.
Server-gerenderde HTML is de toegangsprijs tot AI-zoekopdrachten, en schone gestructureerde data plus een llms.txt manifest is de laag die een gerenderde pagina citeerbaar maakt. Dat is het werk van generative engine optimization bovenop indexeerbaarheid: eerst moet de inhoud in de HTML staan, daarna moet het voldoende gestructureerd zijn om op te vallen.
De conclusie
Single-page applicaties zijn niet slecht voor SEO, maar alleen client-side rendering is dat wel — het verbergt je content voor elke crawler die je JavaScript niet uitvoert, en een groeiend aantal daarvan, vooral de AI-engines, zal dat niet doen. De oplossing is om echte HTML te versturen: server-side rendering voor dynamische content, statische prerendering voor stabiele pagina's, dynamische rendering alleen als een legacy-oplossing — plus echte per-route URL's, metadata, gestructureerde data en statuscodes. Op Shopify is dit geen probleem bij een standaard Liquid-thema en een eerste prioriteit zodra je headless gaat, wat de reden is dat Hydrogen standaard server-side rendert. Render op de server, en je SPA is net zo indexeerbaar en citeerbaar als elke klassieke site.
RankEngine controleert de SEO- en AI-zoeksignalen van je winkel — meta, schema, indexering, llms.txt en AI-crawler toegang — en past geverifieerde oplossingen toe, of je nu een standaard Shopify-thema of een headless build gebruikt. Voor headless winkels, zorg eerst dat de rendering goed is, en laat RankEngine vervolgens de on-page en AI-zoeklaag afhandelen.
