← Blog

SEO

Schema en hreflang: het Nederlandse SEO-playbook voor 2026

Een klant in Eindhoven werd drie maanden in eigen stad ingehaald door een Belgische concurrent. De fix was geen content. Het waren hreflang en een JSON-LD-typo.

Jacob Molkenboer· Oprichter · A Brand New Company· 16 feb 2024· 9 min
Open leren atlas met kaart van de Lage Landen, koperen kompas op de pagina, groen zijden lint over de rug, crème kaartje met lakzegel.

Een echt rankingraadsel in Eindhoven

In april belde een B2B SaaS-team in Eindhoven ons over een pijnlijke Search Console-screenshot. Op hun belangrijkste categoriequery stonden ze op positie 3 in België en positie 14 in Nederland. Hun concurrent, een Brussels bedrijf met een derde van hun content en een tragere site, stond op positie 4 in hun eigen thuisstad.

Ze hadden zes maanden in content gestoken. Twee senior schrijvers. Een nieuwe pillar-page-strategie. Niets bewoog.

De fix duurde negentig minuten. Twee ontbrekende hreflang-return-tags, één verkeerde taalcode (nl in plaats van nl-NL), en een JSON-LD Organization-blok met addressCountry op "Belgium", omdat iemand het uit een Schema.org-voorbeeld had gekopieerd en nooit had aangepast. Drie weken na de fix stonden ze op positie 2 in NL en stabiel op 3 in BE.

Waarom dit signaal er in 2026 nog steeds toe doet

De heersende wijsheid blijft schuiven. AI Overviews vreten de bovenkant van de SERP op. ChatGPT en Perplexity pikken zero-click-verkeer in. Sommige SEO-blogs beweren dat schema dood is omdat Google nu entiteiten rechtstreeks uit ruwe HTML haalt.

In klantdata zien we het tegenovergestelde. Wanneer een model moet kiezen welke van drie Nederlandstalige pagina's het toont op een Belgische query, zijn de sterkste signalen die het kan vinden nog steeds dezelfde drie:

  • De hreflang-cluster, die de crawler vertelt welke versie voor welk publiek is.
  • De JSON-LD-markup, die de crawler vertelt welke entiteit eigenaar is van de pagina.
  • De canonical, die de crawler vertelt welke URL de bron van waarheid is.

Wanneer die drie het eens zijn, wint de pagina meer queries dan zijn content alleen zou voorspellen. Wanneer ze elkaar tegenspreken, blijft zelfs goede content steken. AI Overviews versterken dit eerder dan dat ze het vervangen: moet een model een bron citeren, dan kiest het de pagina waarvan de entiteit het minst dubbelzinnig is.

De vier hreflang-valkuilen die we steeds tegenkomen

De meeste Nederlandse sites die we auditen zitten in één van vier hreflang-valkuilen. De fix voor elk is mechanisch.

Valkuil 1: nl gebruiken als je nl-NL bedoelt

De nl-tag betekent "elke Nederlandstalige, waar dan ook". Bedient je site alleen Nederland maar staat er nl, dan vertel je Google dat je pagina even relevant is voor een lezer in Antwerpen als voor een lezer in Utrecht. Google laat je pagina dan soms zien in België, waar je verzending niet werkt, en begraaft hem in Nederland omdat het signaal troebel is.

Wees expliciet:

<link rel="alternate" hreflang="nl-NL" href="https://example.nl/contact" />
<link rel="alternate" hreflang="nl-BE" href="https://example.be/contact" />
<link rel="alternate" hreflang="x-default" href="https://example.nl/contact" />

Heb je alleen een Nederlandse versie, markeer hem dan toch als nl-NL. De hreflang-spec gebruikt ISO 639-1 voor taal en ISO 3166-1 Alpha 2 voor regio. Ze door elkaar halen is de meest voorkomende reden waarom audits je site als hreflang-fout markeren.

Valkuil 2: ontbrekende return tags

Als pagina A naar pagina B linkt met hreflang, moet pagina B terug linken naar pagina A. Deze regel sneuvelt vaker dan welke andere ook, omdat de meeste CMS-templates alleen de alternatieven voor de huidige taal uitzenden. Ze vergeten de self-reference en de back-reference.

Een correct getagde Nederlandse contactpagina bevat alle drie de tags hierboven. Op de Belgische versie staan exact dezelfde drie tags. Symmetrisch. Zijn ze niet symmetrisch, dan negeert Google de cluster. Zie de hreflang-documentatie van Google voor de formele spec.

Valkuil 3: x-default die naar een redirect wijst

We zien vaak een x-default die naar een URL wijst die een 301 geeft (example.com/ redirect naar example.nl/). De redirect werkt prima voor gebruikers, maar de hreflang-validator ziet een 301 en negeert de hele cluster. Wijs x-default aan de uiteindelijke URL.

Valkuil 4: hreflang in sitemap én in head

Je moet één locatie kiezen: óf je zet hreflang in je XML-sitemap, óf je geeft hem mee in de <head> van elke pagina. Beide is technisch toegestaan. In de praktijk zien we ze binnen zes maanden uit elkaar lopen en raakt Google in de war. Kies <head> voor kleine sites en sitemap voor grote, en handhaaf het in code review.

Waarschuwing

Meertalige WordPress-plugins zetten hreflang standaard zowel in de head als in de sitemap. Zet één bron uit op dag één, anders fix je dezelfde drift-bug twee keer per jaar.

De JSON-LD die echt het verschil maakt

De meeste Nederlandse sites die we auditen hebben óf geen schema óf schema dat een plugin uitspuugt die te veel doet. De versie die wij op elk project installeren heeft vier blokken. Niet meer.

Organization, op elke pagina

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://example.nl/#organization",
  "name": "Voorbeeld B.V.",
  "url": "https://example.nl",
  "logo": "https://example.nl/logo.svg",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "Keizersgracht 123",
    "postalCode": "1015 CJ",
    "addressLocality": "Amsterdam",
    "addressCountry": "NL"
  },
  "vatID": "NL123456789B01",
  "sameAs": [
    "https://www.linkedin.com/company/voorbeeld",
    "https://nl.wikipedia.org/wiki/Voorbeeld"
  ]
}

Drie dingen om op te merken:

  • De @id is een stabiele URL met een fragment. We gebruiken dezelfde @id op elke pagina. Daardoor kan Google elke pagina aan één entiteit koppelen, in plaats van per URL een eigen Organization af te leiden.
  • addressCountry is "NL", twee letters, ISO 3166-1. Niet "Nederland", niet "The Netherlands". De crawler verwacht de landcode.
  • vatID bevat het Nederlandse BTW-nummer. Het is een van de sterkste entiteitssignalen die we kennen voor Nederlandse B2B-sites, en de meeste plugins slaan het volledig over.

LocalBusiness, alleen op de contactpagina

Sla LocalBusiness op elke andere pagina over. Gebruik het alleen op /contact, met openingstijden en geocoördinaten. Google dedupliceert toch, en ��én rijk blok wint van vijf magere. Zie de LocalBusiness-referentie van Schema.org voor de velddefinities.

BreadcrumbList, op elke pagina die niet de homepage is

Goedkoop, werkt altijd, helpt bij de SERP-weergave. We genereren hem op build-time uit het URL-pad, zodat niemand hem hoeft te onderhouden.

Article of Product, waar van toepassing

Eén Article-blok per blogpost. Eén Product-blok per product. Beide verwijzen naar de @id van Organization via publisher of brand. De grafiek blijft verbonden, en dat is precies wat het model nodig heeft om entiteiten uit elkaar te houden.

De audit van 30 minuten die je vandaag kunt draaien

Je hebt geen betaalde tool nodig. Dit is de audit die we draaien op elke nieuwe klant, voordat we hun site aanraken.

Stap 1: render de head

curl -s https://jouwdomein.nl | grep -E "(hreflang|canonical|application/ld\+json)"

Ontbreken de hreflang-regels, dan zendt je CMS ze niet uit. Staan ze er wel, kopieer dan de cluster ergens neer.

Stap 2: valideer de cluster

Haal voor elke pagina die hreflang uitzendt elke URL in de cluster op en bevestig drie dingen: elke URL geeft 200 (geen 301's, geen 404's), elke URL in de cluster wijst terug naar elke andere URL in de cluster, en de taalcodes komen overeen tussen alle leden.

Tien pagina's kun je op het oog doen. Voor honderd pagina's schrijf je een script:

URLS=(https://example.nl/ https://example.be/ https://example.nl/contact https://example.be/contact)
for u in "${URLS[@]}"; do
  echo "== $u =="
  curl -s "$u" | grep -oE 'hreflang="[^"]+" href="[^"]+"'
done

Vermeldt pagina A B, maar pagina B A niet, dan is dat een ontbrekende return tag.

Stap 3: valideer de JSON-LD

Plak je Organization-blok in de validator van Schema.org, en daarna in Google's Rich Results Test. Beide slagen om andere redenen. Controleer specifiek drie dingen: addressCountry is de tweeletterige code, @id is identiek op elke pagina die een Organization-blok uitzendt, en sameAs wijst alleen naar URL's die je beheert of die je daadwerkelijk beschrijven.

Stap 4: Search Console diff

Open in Search Console het International Targeting-rapport. Errors daar zijn het directe bewijs. Cross-reference met het Performance-rapport, gefilterd op land. Presteert een markt ondermaats in verhouding tot je contentdiepte, dan is de cluster gebroken.

De entiteitslaag onder AI Overviews

Een terechte vraag in 2026: doet dit er nog toe als LLM's de query beantwoorden vóór de gebruiker klikt?

We hebben dit zorgvuldig gevolgd over de klantdomeinen die we beheren. Het patroon is consistent. Als een AI Overview een bron citeert, citeert hij de pagina waarvan het schema dezelfde entiteit benoemt die de Knowledge Graph al vertrouwt. Sites met een schoon Organization-blok, een Wikipedia- of Wikidata-link in sameAs, en een consistente @id over pagina's heen worden geciteerd. Sites met magere of tegenstrijdige schema worden samengevat, niet geciteerd.

Wil je de bron zijn waar het model naar terugverwijst, dan is schema niet optioneel. Het is het goedkoopste entiteitssignaal dat je kunt opleveren.

Toen we vorig voorjaar een B2B-site uit Drenthe herbouwden als onderdeel van een legacy-migratie, was de terugkerende faal een theme die bij elke pagina-rebuild gedeeltelijke hreflang-clusters uitzond. We hebben het opgelost door de hreflang-generatie uit het theme te halen en in de sitemap te plaatsen, met een build-time validator die de deploy laat falen zodra een cluster asymmetrisch is. Dat soort kleine, saaie fixes is het grootste deel van wat we doen onder de noemer migratie, en het is wat rankings verschuift zonder ook maar één nieuw woord te schrijven.

Presteert je Nederlandse site ondermaats op queries die je hoort te winnen, draai dan vanmiddag de vier-stappen-audit hierboven. De fouten die het meeste kosten, zijn meestal de fouten die het minste tijd kosten om te fixen.

Kern

Hreflang en schema zijn geen contentstrategie. Het is een duidelijkheidsstrategie. Zodra de signalen het eens zijn, gaat je bestaande content ranken.

FAQ

Doet hreflang er nog toe als ik alleen in Nederland verkoop?

Ja. Je pagina's markeren als nl-NL houdt Google ervan af om ze in België of Suriname te tonen en thuis te begraven. Eén nl-NL plus een x-default-cluster is genoeg.

Wat is het verschil tussen nl en nl-NL?

nl betekent elke Nederlandstalige, waar dan ook. nl-NL betekent een Nederlandstalige in Nederland. nl-BE betekent een Nederlandstalige in België. Gebruik de regio-specifieke tag, tenzij je echt op alle drie mikt.

Heb ik schema-markup nodig als Google mijn HTML rechtstreeks kan lezen?

Google kan je HTML lezen, maar schema is de goedkoopste manier om de crawler te vertellen over welke entiteit de pagina gaat. Het is het verschil tussen samengevat worden en geciteerd worden.

Vervangen AI Overviews gestructureerde data?

Het tegendeel. AI Overviews moeten per query één vertrouwde bron kiezen. Schoon schema is hoe een model bepaalt welke Nederlandse pagina de entiteit vertegenwoordigt die het al kent.

seostrategyarchitecturelegacy sitesweb designwordpress

Iets bouwen?

Start een project