6.3 Technische SEO
Technische SEO is het loodgieterswerk: niet glamoureus, maar als het lekt komt er niets door. Een webshop met honderden producten, varianten en filters genereert al snel duizenden URL’s, waarvan de meeste niet in Google’s index horen. Doe je dit verkeerd, dan verspilt Google zijn crawl budget aan rommel en blijven je geldpagina’s onzichtbaar. Dit hoofdstuk maakt je shop technisch waterdicht.
Na dit hoofdstuk kun je:
- Je kunt uitleggen wat een XML-sitemap, robots.txt, noindex en canonical doen en wanneer je elk inzet.
- Je weet welke pagina’s wel en niet in de index horen en herkent gefilterde URL’s als de grootste crawl-budgetverspiller.
- Je begrijpt waarom robots.txt een pagina juist níét uit de index houdt en noindex daarvoor het juiste instrument is.
- Je kunt de belangrijkste schematypes (Product, Offer, AggregateRating, BreadcrumbList) voor e-commerce benoemen en valideren.
- Je kunt de crawl-efficiëntie van een shop berekenen en de juiste eerste ingreep bepalen.
Kernconcepten
Section titled “Kernconcepten”XML-sitemap. Een bestand (meestal /sitemap.xml) dat Google een lijst van je belangrijke URL’s geeft. Het is een wegwijzer, geen garantie op indexering. Zet er alleen indexeerbare pagina’s in: geen noindex-pagina’s, geen omleidingen, geen filter-URL’s. Dien hem in via Search Console.
robots.txt. Een bestand op /robots.txt dat bots vertelt waar ze niet mogen crawlen. Belangrijk misverstand: robots.txt voorkomt crawlen, niet indexeren. Een pagina die je in robots.txt blokkeert kan alsnog in de index belanden (zonder beschrijving) als er links naartoe wijzen. Wil je iets uit de index houden, gebruik dan noindex, niet robots.txt.
noindex. Een meta-tag (<meta name="robots" content="noindex">) of HTTP-header die zegt: crawl deze pagina, maar zet hem niet in de index. Dit is het juiste instrument voor pagina’s die wel bereikbaar moeten zijn maar niet in zoekresultaten horen.
Canonical tag. Een tag (<link rel="canonical" href="...">) die Google vertelt welke versie van bijna-identieke pagina’s de “officiële” is. Onmisbaar bij varianten (kleur, maat) en filters die dezelfde of vrijwel dezelfde content tonen onder verschillende URL’s.
Structured data (schema). Gestructureerde labels in je HTML (meestal JSON-LD) die Google expliciet vertellen wat iets is: een product, een prijs, een beoordeling. Dit voedt rich results zoals prijs- en sterrenweergave in de zoekresultaten.
Welke pagina’s wel en niet in de index
Section titled “Welke pagina’s wel en niet in de index”Dit is de kern van e-commerce-techniek. Standaard wil je in de index:
| Wel indexeren | Niet indexeren (noindex of canonical) |
|---|---|
| Homepage | Interne zoekresultatenpagina’s |
| Categoriepagina’s | Winkelwagen, kassa, account |
| Subcategorieën | Gefilterde URL’s (kleur, maat, prijs) |
| Productpagina’s | Sorteervarianten (?sort=prijs) |
| Blogartikelen | Paginatie-duplicaten zonder waarde |
| Belangrijke informatiepagina’s | Bedankt-pagina’s, login |
::: caution[Gefilterde URL’s zijn de grootste valkuil] Een categorie met filters voor kleur, maat en prijs kan honderden of duizenden URL-combinaties genereren, elk met vrijwel dezelfde producten. Google crawlt die allemaal, vindt overal bijna dezelfde content, en verspilt crawl budget terwijl je geldpagina’s wachten. Oplossing: zet een canonical van elke gefilterde URL naar de schone categorie-URL, en/of zet noindex op filtercombinaties. Houd de schone categorie-URL als enige indexeerbare versie. :::
URL-structuur
Section titled “URL-structuur”Houd URL’s kort, beschrijvend en stabiel. Goed: jouwshop.nl/merino-wandelsokken/falke-tk2. Slecht: jouwshop.nl/p?id=88231&cat=12. Gebruik koppeltekens, kleine letters, geen hoofdletters of spaties, en vermijd onnodige mapdiepte. Verander een URL nooit zonder een 301-omleiding van oud naar nieuw, anders verlies je alle opgebouwde autoriteit en je inkomende links breken.
Paginatie
Section titled “Paginatie”Lange categorieën worden opgesplitst over pagina 1, 2, 3. Laat elke paginapagina zichzelf canoniek houden (niet allemaal naar pagina 1 canonicaliseren — dat is een veelgemaakte fout die Google adviseert te vermijden). Zorg dat producten op pagina 2 en verder via een crawlbaar link bereikbaar zijn (geen pure JavaScript-knop zonder echte link).
Structured data voor e-commerce
Section titled “Structured data voor e-commerce”De belangrijkste schematypes voor een webshop:
- Product — naam, beschrijving, merk, afbeelding, SKU.
- Offer — prijs, valuta, beschikbaarheid (op voorraad / uitverkocht).
- AggregateRating — gemiddelde score en aantal reviews; dit levert de sterren op.
- BreadcrumbList — de kruimelpad-navigatie; toont een nette padweergave in de SERP.
- Organization — je bedrijfsgegevens, logo en sociale profielen op de homepage.
::: tip[Eerlijke reviews] AggregateRating-schema mag alleen echte, op de pagina zichtbare reviews weergeven. Verzonnen sterren of reviews die niet op de pagina staan, zijn in strijd met Google’s richtlijnen en kosten je het rich result (of erger). Houd het eerlijk; module 5.3 behandelt het verzamelen van echte reviews. :::
hreflang bij meertalig
Section titled “hreflang bij meertalig”Verkoop je in meerdere talen of landen (bijvoorbeeld NL en BE-NL, of een Engelstalige versie), dan vertelt de hreflang-tag Google welke taalversie bij welke regio hoort. Zonder hreflang kan Google de verkeerde taalversie tonen of de versies als duplicaat zien. Elke taalversie verwijst met hreflang naar alle andere versies én naar zichzelf.
Snelheid en mobiel
Section titled “Snelheid en mobiel”Sinds Google’s mobile-first indexering beoordeelt Google primair de mobiele versie van je site. Trage paginalaadtijd en slechte Core Web Vitals drukken je posities. Dit is een eigen onderwerp; zie 3.7 Snelheid en Core Web Vitals voor de volledige aanpak. Vuistregel: een productpagina die op mobiel meer dan 4 seconden doet over de grootste zichtbare laadstap, verliest zowel bezoekers als posities.
Stap-voor-stap workflow
Section titled “Stap-voor-stap workflow”Een technische audit die je elk kwartaal herhaalt.
-
Crawl je eigen site. Draai Screaming Frog (gratis tot 500 URL’s) of de Ahrefs Site Audit over je domein. Dit toont kapotte links, omleidingsketens, ontbrekende title tags, dubbele content en noindex-fouten.
-
Controleer je sitemap. Open
/sitemap.xml. Staan er alleen indexeerbare pagina’s in? Geen filter-URL’s, geen noindex-pagina’s, geen 404’s? Dien hem in via Search Console → Sitemaps. -
Lees robots.txt na. Open
/robots.txt. Blokkeer je per ongeluk belangrijke mappen? Een verdwaaldeDisallow: /na een herontwerp haalt je hele shop uit de crawl. Test in de robots-tester van GSC. -
Inventariseer noindex en canonicals. Controleer dat kassa, winkelwagen, account, zoekresultaten en filter-URL’s noindex of een canonical hebben. Controleer dat product- en categoriepagina’s zichzelf canoniek houden.
-
Valideer je structured data. Plak een product-URL in de Google Rich Results Test. Lost het Product-, Offer- en AggregateRating-schema correct op? Los fouten en waarschuwingen op.
-
Check indexering in GSC. Indexering → Pagina’s. Lees de redenen bij niet-geïndexeerde pagina’s: “Gedupliceerd zonder door gebruiker geselecteerde canonical”, “Gecrawld, momenteel niet geïndexeerd”, “Pagina met omleiding” wijzen elk op een specifiek probleem.
-
Behandel out-of-stock producten. Permanent uitverkocht? 301 naar een vergelijkbaar product of de categorie. Tijdelijk? Laat de pagina staan met duidelijke “binnenkort terug”-melding en houd de Offer-beschikbaarheid op de juiste waarde.
Voorbeeld
Section titled “Voorbeeld”Shop met 300 producten, elk in 4 kleuren en 5 maten, plus filters. Screaming Frog vindt 6.800 URL’s. Diagnose:
- Elke variant heeft een eigen URL (
?kleur=blauw&maat=42) met identieke beschrijving: massale duplicate content. - Filtercombinaties genereren duizenden URL’s met overlappende productlijsten.
- GSC meldt 4.100 pagina’s “Gedupliceerd zonder door gebruiker geselecteerde canonical”.
Oplossing: variant-URL’s canonicaliseren naar de hoofd-productpagina, filter-URL’s krijgen noindex plus canonical naar de schone categorie, en de sitemap bevat alleen de 300 producten plus 28 categorieën. Resultaat na zes weken: crawl budget gaat naar de echte pagina’s, indexeringsratio stijgt van 38% naar 94%, en de geldpagina’s beginnen te stijgen omdat Google geen energie meer verspilt aan rommel.
Formules & benchmarks
Section titled “Formules & benchmarks”| Signaal | Goed | Zorgelijk |
|---|---|---|
| Crawlbare URL’s versus indexeerbare pagina’s | dicht bij 1:1 | meer dan 3:1 (te veel rommel) |
| Geïndexeerd ÷ verwachte pagina’s | meer dan 90% | minder dan 70% |
| 404-fouten in GSC | aflopend, bijna nul | stijgend |
| Omleidingsketens (301 naar 301 naar…) | geen, hooguit 1 hop | 3 of meer hops |
| Pagina’s met geldig Product-schema | 100% van producten | minder dan 80% |
| Mobiele LCP (grootste laadstap) | minder dan 2,5 seconden | meer dan 4 seconden |
Er is geen enkele “techniek-score”, maar een handige proxy: crawl-efficiëntie = geïndexeerde geldpagina’s ÷ totaal gecrawlde URL’s. Hoe hoger, hoe minder Google verspilt aan rommel. Een gezonde kleine shop zit boven 0,8; een shop vol gefilterde URL’s kan op 0,2 zitten en verspilt dus 80% van het crawl budget.
Waarom haalt robots.txt een pagina juist níét uit de index?
Het voelt logisch: wil je een pagina onzichtbaar maken, dan blokkeer je hem toch gewoon in robots.txt? Maar daarmee bereik je het tegenovergestelde van wat je denkt. Robots.txt is een instructie aan de crawler om de pagina niet op te halen. Crawlen en indexeren zijn echter twee aparte stappen. Als andere pagina’s naar die geblokkeerde URL linken, weet Google dat hij bestaat en kan hij hem alsnog in de index zetten, alleen zonder de inhoud te hebben gelezen. Resultaat: een kale vermelding zonder beschrijving, precies wat je wilde voorkomen.
Erger nog: omdat de crawler niet binnen mag, ziet hij de noindex-tag die je misschien óók op de pagina zette nooit. Robots.txt en noindex bijten elkaar dus. De juiste volgorde is: laat de pagina crawlbaar, zet er noindex op, en wacht tot Google hem opnieuw bezoekt en uit de index haalt. Pas daarna mag robots.txt erbij, als je het crawlen wilt besparen. In het voorbeeld van 6.800 URL’s los je de 4.100 duplicaten dus op met canonical en noindex, niet met een Disallow-regel.
| Tool | Functie | Wanneer kiezen |
|---|---|---|
| Google Search Console | Indexeringsstatus, fouten, sitemap indienen | Altijd; de bron van waarheid voor wat Google ziet |
| Screaming Frog SEO Spider | Volledige technische crawl van je site | Audits; gratis tot 500 URL’s, daarna betaald |
| Google Rich Results Test | Schema valideren en preview van rich results | Bij opzetten of debuggen van structured data |
| Ahrefs / Semrush Site Audit | Geautomatiseerde technische audit met prioritering | Doorlopende monitoring bij grotere shops |
| Schema-generator (bijv. ingebouwd in je platform of plugin) | JSON-LD genereren zonder handwerk | Shopify/WooCommerce; controleer de output altijd na |
Veelgemaakte fouten
Section titled “Veelgemaakte fouten”- robots.txt gebruiken om iets uit de index te houden. Dat blokkeert crawlen, niet indexeren. Gebruik noindex.
- Filter-URL’s vrij laten crawlen en indexeren. De nummer-één crawl-budgetverspiller. Canonical plus noindex.
- URL’s wijzigen zonder 301-omleiding. Je gooit alle opgebouwde autoriteit en inkomende links weg.
- Alle paginatiepagina’s naar pagina 1 canonicaliseren. Producten op pagina 2+ raken dan uit de index. Laat elke paginapagina zichzelf canoniek houden.
- Permanent uitverkochte producten als levende pagina laten staan of hard op 404 zetten. 301 naar een alternatief behoudt de waarde en de bezoeker.
- Vertrouwen op door het platform gegenereerd schema zonder te valideren. Plugins maken fouten; controleer met de Rich Results Test.
Sjablonen
Section titled “Sjablonen”Vervang de waarden tussen rechte haken. Gebruik echte, op de pagina zichtbare reviewdata.
<script type="application/ld+json">{ "@context": "https://schema.org/", "@type": "Product", "name": "[productnaam]", "image": "[volledige-url-naar-productafbeelding]", "description": "[unieke productbeschrijving]", "sku": "[sku-code]", "brand": { "@type": "Brand", "name": "[merknaam]" }, "aggregateRating": { "@type": "AggregateRating", "ratingValue": "[gemiddelde-score]", "reviewCount": "[aantal-reviews]" }, "offers": { "@type": "Offer", "url": "[volledige-url-naar-productpagina]", "priceCurrency": "EUR", "price": "[prijs-met-punt-als-decimaal]", "availability": "https://schema.org/InStock" }}</script>Voor “uitverkocht” gebruik je https://schema.org/OutOfStock bij availability. Laat AggregateRating weg als er nog geen echte reviews zijn.
Oefen het zelf
Section titled “Oefen het zelf”Case: crawl-efficiëntie van een gefilterde categorie berekenen
Een modeshop heeft 200 productpagina’s en 18 categoriepagina’s die je allemaal geïndexeerd wilt hebben. Door filters op kleur, maat en prijs genereert het platform daarnaast nog eens 5.400 gefilterde URL’s, plus 200 sorteervarianten en 250 interne zoekresultaatpagina’s. Screaming Frog crawlt het hele domein. Op dit moment heeft niets een canonical of noindex.
Bereken de crawl-efficiëntie zoals het hoofdstuk die definieert (geïndexeerde geldpagina’s ÷ totaal gecrawlde URL’s) in de huidige situatie. Zit de shop in het gezonde gebied of in de zorgelijke zone? Welke ingreep doe je als eerste, en wat wordt de efficiëntie nadat de gefilterde URL’s, sorteervarianten en zoekresultaten correct zijn afgehandeld?
Toon uitwerking
Stap 1 — totaal gecrawlde URL’s nu: 200 + 18 + 5.400 + 200 + 250 = 6.068 URL’s.
Stap 2 — geldpagina’s die je in de index wilt: 200 producten + 18 categorieën = 218.
Stap 3 — crawl-efficiëntie nu: 218 ÷ 6.068 = 0,036, oftewel ongeveer 0,04. Dat is ver onder de drempel van 0,8 voor een gezonde kleine shop, en zelfs onder de 0,2 uit het voorbeeld in het hoofdstuk. Google verspilt hier meer dan 96% van zijn crawl budget aan rommel. Diep in de zorgelijke zone.
Stap 4 — eerste ingreep: de grootste verspiller aanpakken. Dat zijn de 5.400 gefilterde URL’s. Geef ze een canonical naar de schone categorie plus noindex, doe hetzelfde met de 200 sorteervarianten, en zet noindex op de 250 zoekresultaatpagina’s.
Stap 5 — na de ingreep blijven als indexeerbare geldpagina’s de 218 over. Het totaal aantal gecrawlde URL’s daalt naarmate Google de noindex-pagina’s minder vaak bezoekt; richt je sitemap op precies die 218. De efficiëntie kruipt richting 1,0.
Les: de crawl-efficiëntie maakt zichtbaar wat een rommelige filterstructuur kost. Niet de productpagina’s zijn het probleem, maar de duizenden bijna-identieke varianten eromheen.
Test jezelf
Section titled “Test jezelf”Snelle kennischeck — technische SEO
-
Je wilt voorkomen dat je winkelwagenpagina in de zoekresultaten verschijnt. Wat is het juiste instrument?
Noindex laat de pagina crawlen maar houdt hem uit de index; robots.txt blokkeert juist het crawlen en kan de pagina alsnog kaal in de index laten belanden.
-
Waarom is het fout om alle paginatiepagina's (2, 3, 4) naar pagina 1 te canonicaliseren?
Door alles naar pagina 1 te canonicaliseren vertel je Google dat alleen pagina 1 telt, waardoor de producten op latere pagina's niet meer geïndexeerd worden.
-
Een permanent uitverkocht product moet van de site. Wat behoudt de meeste waarde?
Een 301 stuurt zowel de bezoeker als de opgebouwde linkautoriteit door naar een relevante pagina, terwijl een 404 die waarde laat verdampen.
-
Wanneer heb je hreflang-tags nodig?
Hreflang vertelt Google welke taal- of regioversie bij welke gebruiker hoort en voorkomt dat versies als duplicaat worden gezien; zonder meertalige content is het overbodig.
Samenvatting
- Zet alleen indexeerbare pagina’s in de index; houd kassa, winkelwagen, zoekresultaten en gefilterde URL’s eruit met noindex of een canonical.
- Gefilterde URL’s zijn de grootste valkuil: ze genereren duizenden bijna-identieke pagina’s die crawl budget verspillen.
- robots.txt blokkeert crawlen, niet indexeren; gebruik noindex op een crawlbare pagina om iets echt uit de index te houden.
- Wijzig een URL nooit zonder 301-omleiding en handel uitverkochte producten af met een 301 in plaats van een 404.
- Crawl-efficiëntie (geïndexeerde geldpagina’s ÷ totaal gecrawlde URL’s) maakt zichtbaar hoeveel budget een rommelige filterstructuur kost; mik richting 0,8 of hoger.
Lees verder
Section titled “Lees verder”- 6.1 Hoe zoekmachines werken — crawl, index, rank
- 6.4 On-page SEO — de inhoudelijke kant van pagina-optimalisatie
- 3.7 Snelheid en Core Web Vitals — de techniek/UX-rankingfactor in detail
- 3.3 Store-structuur — een logische hiërarchie als basis voor URL’s