Bronnensysteem
Een schema-driven bronnensysteem dat elke claim koppelt aan een geclassificeerde, gedateerde bron — opgeslagen als gestructureerde data per pagina, ontworpen om tegelijk SEO-signalen op te leveren en machine-leesbaar te zijn voor content-automatisering.
Wat is het bronnensysteem?
MeisterEnergie publiceert een Nederlandse warmtepomp-gids met 52 vragen, onderbouwd door 290+ bronnen. Elke bron is gestructureerde data: een YAML-record met acht vaste velden, opgeslagen in de frontmatter van de pagina waarop hij wordt aangehaald. Drie type-classificaties (overheid / onafhankelijk / commercieel), een controlled vocabulary van topic-tags, en een kleine refresh-tracker voor volatile claims maken het systeem af.
Geen centrale opaque database, geen losse spreadsheets — de bron leeft op de pagina waar hij iets onderbouwt. Een lezer ziet de bron als kaart, een crawler ziet hem als gestructureerde markup, een script of LLM kan hem direct uit de YAML lezen.
Wat levert het op voor SEO?
- E-E-A-T-signalen. Elke claim is geattribueerd, gedateerd en geclassificeerd. De drie type-badges (OVERHEID / ONAFHANKELIJK / COMMERCIEEL) maken authority-niveaus zichtbaar — voor de lezer en voor crawlers.
- Outbound links naar autoriteit. Elke bron linkt naar de oorspronkelijke autoriteitspagina (RVO, Milieu Centraal, fabrikant). Dat is het tegenovergestelde van content die "vergeet" naar bronnen te linken om dwell-time te beschermen.
- Topical clustering. Elke bron heeft topic-tags uit een gecontroleerde woordenlijst (
warmtepomp,isolatie,subsidie,energielabel, etc.). Daarmee ontstaan natuurlijke topic-clusters die zoekmachines herkennen — en die intern hergebruikt kunnen worden voor verwante-content-suggesties. - Freshness. Elk bronrecord heeft een
laatstGecontroleerd-veld, en volatile claims (subsidies, prijzen, regelgeving) staan in een interne refresh-tracker met monitoring-status. Bezoekers en crawlers zien wanneer een claim voor het laatst geverifieerd is. - Schema.org-compatibel. De gestructureerde frontmatter sluit aan op
Articleencitation-markup; bronnenkaarten zijnCreativeWork-shaped. Dat maakt rich-result-eligibility natuurlijker dan losse prose-citaten.
Wat levert het op voor content-automatisering?
- Parseable per pagina. Bronnen staan in YAML-frontmatter. Elke MDX-pagina is direct uitleesbaar door een script, een LLM of een RAG-pipeline — geen scraping, geen data-extractie nodig.
- Atomic claim-bron mapping. Het
onderbouwt-veld beschrijft per bron welke specifieke claim hij dekt, en hetvindplaats-veld zegt wáár op de bronpagina. Daarmee kun je geautomatiseerd "voor claim X, geef de bronnen" vragen — bruikbaar voor grounded generation. - Topic-search via controlled vocabulary. De
categorieen-tags bestaan uit een vaste woordenlijst (ziedocs/bronverificatie-plan.md). Daarmee kun je over alle pagina's heen zoeken: "geef alle bronnen mettype=overheidencategorieen=isolatie". - Refresh-tracker als monitoring-feed. Volatile claims staan in
docs/datasets/claims.csvmetstatus,laatst_gechecktenvolgende_check-velden. Geschikt voor cron-jobs of editorial-dashboards die automatisch flaggen wat gereviewd moet worden. - Type-discipline voor LLM-grounding. Door bronnen te classificeren op type (
overheid,onafhankelijk,commercieel) kun je de generatie-prompt instrueren om bij contested claims de overheid- of onafhankelijke bronnen te prefereren — een gestructureerd anti-hallucinatie-mechanisme.
Drie workflows die het systeem mogelijk maakt
Het systeem is meer dan een SEO-feature; het maakt drie operationele workflows mogelijk die anders met losse spreadsheets, handmatig bronwerk en hoop-en-vrees-LLM-prompts gedaan zouden worden. Hieronder elk concreet.
Wanneer moet een claim opnieuw worden gecheckt?
Volatile claims (subsidies, regelgeving, marktprijzen) staan in docs/datasets/claims.csv met drie velden die de monitoring sturen: status (actief = standaard kwartaalreview, monitoren = specifieke datum, kritiek = korte horizon), laatst_gecheckt en volgende_check.
Een script leest de tracker, vergelijkt volgende_check met vandaag, en flagt wat over de datum is. Dat kan een cron-job zijn die de redactie e-mailt, een GitHub-action die automatisch issues opent voor te-reviewen claims, of een import in een editorial-dashboard.
Concreet: op 15 juni 2026 ziet het script dat C-05-01-001 (RVO ISDE-aanvraagproces, status kritiek) een check verwacht. Een geautomatiseerd issue opent de bronpagina, de redacteur verifieert of bedrag en procedure nog kloppen, en update laatstGecontroleerd op de bron-entry plus laatst_gecheckt in de tracker. De claim is opnieuw vers — zonder dat iemand handmatig hoefde te onthouden dat hij verlopen was.
Welke bronnen heb je al voor een nieuwe tekst?
Voor elk nieuw artikel is de eerste vraag: welke bronnen bestaan al in de bibliotheek die deze topic dekken? De controlled vocabulary maakt dat doorzoekbaar over alle pagina's heen.
Een script of LLM walkt door alle MDX-frontmatter, vouwt de bronnen[].categorieen-arrays samen, en filtert op relevante tags. Voor een nieuwe pagina over "vloerverwarming met warmtepomp" geeft de query categorieen ⊇ {'vloerverwarming','warmtepomp'} alle bestaande gevalideerde bronnen — inclusief hun beschrijving, onderbouwt-veld en vindplaats. De auteur (mens of AI) kiest welke bronnen relevant zijn en schrijft het artikel rondom die al-gevalideerde claims.
Dat voorkomt twee problemen tegelijk: opnieuw bronnen zoeken voor topics die al gedekt zijn, en inconsistentie tussen pagina's die hetzelfde feit anders citeren.
Hoe voorkomt het systeem dat een AI hallucineert?
Gestructureerde retrieval-augmented generation. In gewone taal: een AI mag alleen claims schrijven waar een bron in de bibliotheek voor bestaat — en die claim moet matchen met wat de bron daadwerkelijk dekt.
Het mechanisme zit op drie niveaus:
- Bron-required. Elke specifieke claim (getal, datum, bedrag, merk-claim) krijgt een
<Bron n={X} />-citaat dat naar een bron in de pagina-frontmatter verwijst. Geen citaat = geen claim. Een rule-violation, niet een schrijfstijl-keuze. - Type-discipline. Voor contested claims (load-bearing efficiency-cijfers, regelgeving, subsidiebedragen) eist de generatie-prompt een
overheid- ofonafhankelijk-bron, niet een commerciële single-source. Zo kan een commerciële partij geen claim shapen die de lezer denkt dat onafhankelijk is. - Audit-stap. Na generatie checkt een script of elke
<Bron>-citatie matcht met hetonderbouwt-veld van die specifieke bron. Een claim die geen bron-onderbouwing heeft, of waarvan de bron over iets anders gaat, wordt geflagd voor handmatige review voordat de tekst gepubliceerd wordt.
Hetzelfde discipline die menselijke redacteurs hanteren — alleen in een vorm die een script of LLM kan uitvoeren. Niet alle hallucinaties worden gevangen (een bron citeren die in de bibliotheek staat maar inhoudelijk niet klopt blijft mogelijk), maar de meest voorkomende patronen — een verzonnen getal, een verzonnen bron, een claim aan de verkeerde bron koppelen — worden structureel afgevangen.
Hoe ziet één bron eruit?
Elke bron is een YAML-record in de bronnen:-array van de pagina-frontmatter. Acht velden, geen vrije vorm:
bronnen:
- nummer: 1
naam: "RVO — ISDE-subsidie warmtepomp"
url: "https://www.rvo.nl/subsidies-financiering/isde/woningeigenaren"
type: "overheid"
laatstGecontroleerd: "april 2026"
beschrijving: "Officiële uitvoeringsorganisatie ISDE-subsidie. Bevestigt subsidiebedragen en aanvraagprocedure."
onderbouwt: "Subsidiebedragen ISDE 2026 (€2.125–€5.350 per warmtepomp); aanvraagdeadline 24 maanden na installatie."
vindplaats: "Subsidiepagina, tabel met bedragen per maatregel."
categorieen: ["subsidie", "warmtepomp"] | Veld | Wat het is |
|---|---|
nummer | Volgnummer per pagina; matcht het inline <Bron n={X} />-citaat in de tekst. |
naam | Volledige titel van de bronpagina, met uitgever-prefix. |
url | Directe deeplink naar de bronpagina (geen homepage). |
type | overheid, onafhankelijk of commercieel — bepaalt de badge-kleur en het authority-niveau. |
laatstGecontroleerd | Maand + jaar waarin de bron handmatig is geverifieerd. |
beschrijving | Wie de bron is, en waarom je die kunt vertrouwen. |
onderbouwt | De specifieke claim(s) die deze bron in onze tekst dekt. |
vindplaats | Waar op de bronpagina je de informatie terugvindt (sectie, tabel, paragraaf). |
categorieen | Topic-tags uit een controlled vocabulary; maakt cross-page topic-search mogelijk. |
De drie type-classificaties
Elke bron krijgt een type-label dat het authority-niveau aangeeft — voor de lezer (badge in de bronkaart) en voor automatisering (machine-leesbaar veld).
- Voorbeelden
- RVO, Rijksoverheid, CBS, Warmtefonds, SVn, gemeenten, IPLO
- Wanneer leidend
- Subsidies, wetgeving, statistieken
- Belang
- Geen commercieel belang
- Voorbeelden
- Milieu Centraal, Consumentenbond, ANWB, MAX Meldpunt, vakbladen, Brainbay (NVM)
- Wanneer leidend
- Contested efficiency-cijfers, marktdata, consumenten-ervaring
- Belang
- Geen direct verkoopbelang
- Voorbeelden
- Quatt, NIBE, Daikin, Vaillant, energieleveranciers, vergelijkingsplatforms
- Wanneer geschikt
- Productspecs, prijzen, technische definities
- Belang
- Verkoop of doorverwijzing — beschreven in elke bronkaart
Welke editorial regels gelden er?
- Source-mix. Voor load-bearing claims (subsidies, regelgeving, deadlines, contested efficiency-cijfers) leiden we met overheid- of onafhankelijke bronnen. Niet elke pagina hoeft een non-commerciële bron te hebben — wel elke pagina waarop een commerciële partij een belang heeft om de claim te bend.
- Citation-placement. De superscript staat op de specifieke claim, niet op het einde van de zin. Een zin met meerdere claims krijgt meerdere superscripts, elk op zijn plek.
- Bounded ranges, geen hedging. "€8.000–€12.000" wordt verkozen boven "kan duur worden", "6–9 jaar" boven "snel terugverdiend". Als de range ontbreekt, ontbreekt de claim.
- Tijdgevoelige data wordt expliciet gedateerd. "Per maart 2026: €2.500 ISDE-subsidie" — niet "ISDE bedraagt €2.500".
- Disclosure boven verleiding. Als een commerciële partij een belang heeft bij een specifieke framing, wordt dat in de bronbeschrijving genoemd. Voor de praktische editorial-rules in detail: zie
docs/page-playbook.mdin onze repository.
Wat is onze relatie tot Quatt en andere fabrikanten?
MeisterEnergie is geen financiële partner van Quatt of andere fabrikanten en installateurs, en ontvangt geen affiliate-vergoedingen. We zijn geen installateur, verkopen geen warmtepompen, en linken niet door naar gesponsorde aanbieders. Quatt verschijnt in deze gids als één van vele commerciële bronnen — gelabeld als zodanig — net als NIBE, Daikin, Vaillant en andere fabrikanten.
Quatt-prijzen worden vaker gebruikt als concrete pricing-referentie omdat Quatt transparante vaste prijzen publiceert (geen variabele offertes), niet omdat we een voorkeur hebben voor het merk. Onafhankelijke marktbandbreedtes (Milieu Centraal, CBS) staan altijd ernaast.
Mocht hier in de toekomst wel een commerciële samenwerking komen, dan wordt deze sectie gelijktijdig met de bronnenbeleidpagina en de site-footer geüpdatet — editorial framing loopt nooit voor op de feitelijke commerciële staat.
Hoe meld je een vraag of fout?
Klopt een bron niet meer? Mis je een bron? Of heb je een vraag over de werking van het systeem — bijvoorbeeld voor hergebruik in eigen content of automatisering? Neem contact met ons op. Elke melding wordt verwerkt en de gids waar nodig aangepast.