Dutch Local Business Schema, KVK and VAT
LocalBusiness-structuurdata met KVK-nummer, btw-identificatienummer en iDEAL, plus een controle of naam, adres en telefoon overal gelijk zijn. Gratis GPL-plugin van theseo.nl.
by TheSEO · github.com/gianlucanaarden/theseo-lokaal-schema · website
Install
The author publishes release zips, so WP-CLI can install straight from GitHub:
wp plugin install https://github.com/gianlucanaarden/theseo-lokaal-schema/releases/download/v1.0.0/theseo-lokaal-schema-1.0.0.zipReadme
Dutch Local Business Schema, KVK and VAT
Volledige LocalBusiness-structuurdata met de velden die een Nederlands bedrijf werkelijk heeft, plus een controle of je naam, adres en telefoonnummer overal op je site hetzelfde zijn. Gebouwd door TheSEO en hier open source beschikbaar onder GPLv2.
Structuurdata voor lokale bedrijven is niet nieuw. Structuurdata die weet dat een Nederlands bedrijf een KvK-nummer heeft, een btw-identificatienummer, en klanten die met iDEAL betalen, is dat wel.
Downloaden en installeren
- Zip via theseo.nl: tools-en-plugins/lokaal-schema
- Of klonen en de map in
wp-content/plugins/zetten:
git clone https://github.com/GianlucaNaarden/theseo-lokaal-schema.git
cp -r theseo-lokaal-schema /pad/naar/wp-content/plugins/
Daarna: activeren en naar Instellingen, Lokaal bedrijf. Zodra de naam, de straat, de postcode en de plaats zijn ingevuld staat de structuurdata op de voorpagina.
Eisen: WordPress 6.0 of nieuwer, PHP 7.4 of nieuwer.
Wat er in de structuurdata komt
| Veld | Waar het terechtkomt |
|---|---|
| Bedrijfsnaam | name |
| Statutaire naam | legalName |
| Rechtsvorm | additionalProperty met de naam Rechtsvorm |
| KvK-nummer | identifier als PropertyValue met propertyID KVK |
| Btw-identificatienummer | vatID |
| Straat, postcode, plaats, land | address als PostalAddress |
| Telefoon en e-mail | telephone en email |
| Coordinaten | geo als GeoCoordinates, alleen als je er twee invult |
| Prijsklasse | priceRange |
| Openingstijden | openingHoursSpecification, maximaal drie blokken per dag |
| Afwijkende dagen | openingHoursSpecification met validFrom en validThrough |
| Verzorgingsgebied | areaServed, als City of als tekst bij een postcodegebied |
| Betaalmethoden | paymentAccepted |
Lege velden gaan er niet in. Structuurdata met een leeg veld erin is slechter dan structuurdata zonder dat veld.
De 39 keuzes bij Soort bedrijf zijn stuk voor stuk een echt subtype van LocalBusiness in de woordenlijst van schema.org. Er is geen verzonnen type bij.
De consistentiecontrole
Dit is het saaiste en nuttigste deel van lokale SEO, en in de hele pluginmap zat er niets voor. Hij leest je gepubliceerde items, de tekst van je widgets en je menu's en vergelijkt:
- elk telefoonnummer dat begint met 0, +31 of 0031 en negen tot elf cijfers heeft
- elke postcode geschreven als vier cijfers en twee hoofdletters
- elke schrijfwijze van je bedrijfsnaam die niet letter voor letter klopt met wat je hebt ingevuld
Wat eruit komt is een lijst afwijkingen met een link naar de plek waar hij staat. De plugin verandert nooit iets aan je inhoud. Een lang ordernummer kan als verkeerde treffer in de lijst komen; dat staat er ook bij op het scherm.
De uitkomst gaat in een transient met een houdbaarheid van een uur, want het is een momentopname en geen archief. Bij het opslaan van de bedrijfsgegevens vervalt hij meteen.
Twee plugins die hetzelfde publiceren is erger dan een
Staat Yoast Local SEO aan, of Rank Math met een ingesteld lokaal bedrijfstype, dan zwijgt deze plugin en zegt hij op het scherm welke hij heeft gevonden. Die controle staat standaard aan en is uit te zetten.
Alleen signalen die echt te meten zijn worden gebruikt:
WPSEO_LOCAL_VERSION,WPSEO_LOCAL_FILEof de klasseWPSEO_Local_Corevoor Yoast Local SEOrank-math-options-titlesmet een gevuldelocal_business_typeenknowledgegraph_typeopcompanyvoor Rank Math
Andere opstellingen worden niet herkend, en dat staat er eerlijk bij in plaats van dat er wordt gegokt.
Twee filters voor ontwikkelaars:
// Toch publiceren, ook als er iets herkend is.
add_filter( 'theseo_lokaal_schema_conflict', '__return_empty_array' );
// Een eigen veld aan de knoop toevoegen.
add_filter( 'theseo_lokaal_schema_node', function ( $node ) {
$node['slogan'] = 'Altijd binnen een dag op de stoep';
return $node;
} );
Wat er wordt opgeslagen en wat er naar buiten gaat
Alles wat je invult staat in een enkele optierij in wp_options. Er gaat geen enkel verzoek naar buiten: geen account, geen sleutel, geen aanroep van een register, geen tracking. Het KvK-nummer en het btw-nummer worden alleen op vorm gecontroleerd, door een reguliere expressie in de plugin zelf.
Verwijderen van de plugin haalt de optie en de transient weg. Deactiveren laat ze staan.
Feestdagen zonder extensie
De knop die de Nederlandse feestdagen als gesloten dag toevoegt rekent Pasen zelf uit met het anonieme gregoriaanse algoritme, in plaats van te leunen op de calendar-extensie van PHP die niet op elke server staat. Koningsdag schuift naar de zaterdag ervoor wanneer 27 april op een zondag valt, zoals de wet het zegt.
Dat is getoetst tegen de echte data van 2024 tot en met 2028, plus de verschuiving van Koningsdag in 2025.
Opbouw
theseo-lokaal-schema.php bootstrap, constanten, PHP-versiecontrole
includes/class-tsls-settings.php opslag, standaarden, validatie, feestdagen
includes/class-tsls-schema.php de JSON-LD, de dubbeldetectie en de uitvoer
includes/class-tsls-consistency.php de NAP-controle over inhoud, widgets en menu's
includes/class-tsls-admin.php de vijf tabbladen
includes/class-tsls-plugin.php alle hooks op een plek
uninstall.php opruimen bij verwijderen
Beveiliging
Nonce bij elke schrijfactie, manage_options bij elke handeling, ABSPATH-controle bovenaan elk bestand, alle uitvoer ontsnapt, en de enige directe databasequery draait via $wpdb->prepare met een placeholder per berichttype. De JSON-LD wordt met wp_json_encode gebouwd en de slashes blijven bewust ontsnapt.
Licentie
GPLv2 of later, zie LICENSE.
Read the full README on GitHub →
Releases
| Tag | Published | Asset | Downloads |
|---|---|---|---|
| v1.0.0 | Aug 19, 2026 | theseo-lokaal-schema-1.0.0.zip | 1 |