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.
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.
| 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.
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