Static site generators (SSG’s) zijn de ruggengraat geworden van moderne documentatie‑portalen, ontwikkelaarsblogs en product‑kennisbanken. Ze bieden lichtgewicht levering, versie‑gecontroleerde inhoud en naadloze integratie met CI‑pipelines. Het probleem is dat SSG’s inhoud verwachten in zeer specifieke formaten – meestal Markdown, reStructuredText of gewone HTML – en ze rekenen op front‑matter‑metadata om navigatie, thema’s en zoekindexen aan te sturen. Wanneer een organisatie een gemengde verzameling Word‑bestanden, PDF‑s, PowerPoint‑decks en legacy‑help‑authoring‑formaten erft, kan de conversiestap een knelpunt worden dat consistentie, toegankelijkheid en zoekkwaliteit bedreigt.
Dit artikel loopt een praktische workflow door om heterogene bron‑documenten om te zetten naar een schone, SSG‑klaar repository. Het richt zich op het behouden van semantische structuur, doorzoekbare tekst, belangrijke metadata en het vermijden van subtiel kwaliteitsverlies dat vaak ontstaat wanneer PDF’s zonder plan naar Markdown worden gehaald. De technieken zijn breed toepasbaar, maar de voorbeelden verwijzen naar de workflow‑mogelijkheden van convertise.app, een cloud‑gebaseerde conversiedienst die privacy respecteert en resultaten van hoge fideliteit oplevert.
Waarom de conversiestap belangrijk is voor SSG‑aangedreven docs
Een SSG bouwt een statische HTML‑site uit bronbestanden tijdens de build‑fase. De generator interpreteert geen binaire formaten; hij leest alleen de ruwe tekst en verrijkt deze met templates. Als je een PDF rechtstreeks in de pipeline stopt, behandelt de generator deze als een ondoorzichtig bestand, en is de inhoud binnenin onzichtbaar voor zoekmachines en de interne site‑search. Daardoor kunnen gebruikers de informatie niet vinden via full‑text search, en verliest de documentatie de toegankelijkheidsvoordelen (bijv. screen‑reader navigatie) die komen met goed gestructureerde HTML.
Naast doorzoekbaarheid heeft conversie invloed op:
- Navigatie‑hiërarchie – Koppen in de bron worden de inhoudsopgave van de site. Een conversie die kopniveau’s plat maakt, verstoort de logische stroom die gebruikers verwachten.
- Code‑fragmenten – Veel technische docs bevatten codeblokken die syntax‑highlighting moeten behouden. Het rippen van een PDF maakt vaak monospaced lettertypen gewone tekst, waardoor de markup breekt.
- Cross‑references – Figuren, tabellen en voetnoten worden doorgaans gerefereerd via ID. Het verliezen van die ID’s betekent kapotte links door de hele site.
- Metadata – Publicatiedatum, auteur, versie en tags worden gelezen uit front‑matter. Als de conversie deze informatie weggooit, verlies je sorteer‑, filter‑ en versie‑controlesignalen.
Een gedisciplineerd conversieproces dat elk van deze aspecten aanpakt, voorkomt dat downstream‑rebuilds een firefighting‑oefening worden.
Mapping source formats to SSG‑ready targets
De eerste stap is het in kaart brengen van de bronformaten die je moet ondersteunen. Hieronder staat een veelvoorkomende inventaris en het gewenste SSG‑doel voor elk:
| Bronformaat | Voorkeurs‑SSG‑doel | Reden |
|---|---|---|
| Microsoft Word (.docx) | Markdown (.md) | Word behoudt koppen, tabellen en stijlinformatie die naar Markdown‑syntaxis gemapt kan worden. |
| PDF (tekst‑gebaseerd) | Markdown of HTML | Tekst‑gebaseerde PDF’s kunnen met OCR‑vrije tools geëxtraheerd worden; ze behouden de lay‑out maar hebben opschoning nodig. |
| PDF (gescand) | HTML met ingebouwde OCR‑tekst | Gescande PDF’s vereisen OCR; het doel is doorzoekbare HTML in plaats van ruwe afbeeldingen. |
| PowerPoint (.pptx) | Markdown met ingesloten afbeeldingen of HTML‑slide decks | Slides renderen meestal beter als een reeks afbeeldingen plus bijschrifttekst. |
| Legacy help‑files (.hhp, .chm) | Markdown | Deze formaten bevatten rijke hiërarchische topics die natuurlijk naar kopstructuren mappen. |
| ePub/E‑book | Markdown of HTML | ePub‑inhoud is al HTML‑gebaseerd; conversie is grotendeels een her‑wrap. |
| OpenOffice/LibreOffice (.odt) | Markdown | Gelijkaardig aan .docx, met dezelfde kophiërarchie. |
De vuistregel: converteer naar de eenvoudigste tekstuele representatie die structuur behoudt – Markdown voor de meeste documenten, HTML wanneer je fijnmazige styling nodig hebt, en een kleine set afbeeldings‑assets voor visueel zware bronnen.
Preparing the conversion pipeline
Een robuuste pipeline bestaat uit drie fasen: extractie, sanitatie en verrijking.
- Extractie – Haal ruwe tekst, afbeeldingen, tabellen en metadata uit het bronbestand. Gereedschappen die het native formaat lezen (bijv. LibreOffice headless, Microsoft Office Open XML‑parsers) leveren de schoonste output. Voor PDF’s gebruik je een bibliotheek die onderscheid kan maken tussen tekstobjecten en gescande afbeeldingen; convertise.app biedt een PDF‑naar‑Markdown‑endpoint dat layout respecteert en een schoon Markdown‑bestand oplevert samen met geëxtraheerde assets.
- Sanitatie – Maak de ruwe output schoon. Dit omvat:
- Normaliseren van koppen (bijv. zorgen dat het document begint met
#en correct cascadeert). - Her‑encoderen van speciale tekens naar UTF‑8.
- Conversie van tabellen van HTML
<table>‑fragmenten naar Markdown‑pijpsyntax, waarbij kolom‑uitlijning behouden blijft. - Verwijderen van onzichtbare of dubbele spaties die front‑matter‑parsers kunnen breken.
- Normaliseren van koppen (bijv. zorgen dat het document begint met
- Verrijking – Voeg SSG‑specifieke data toe:
- Front‑matter‑blok (
---YAML) mettitle,date,author,tagsenversion. - Automatische generatie van een inhoudsopgave‑placeholder (
{{ toc }}) als de generator dit ondersteunt. - Afbeeldings‑optimalisatie – verklein grote screenshots naar een web‑vriendelijke breedte (bijv. 1200 px) en converteer naar WebP om de bundelgrootte te verlagen.
- Front‑matter‑blok (
Elke fase kan gescript worden in een taal naar keuze (Python, Node.js, Bash). Het cruciale is dat de operaties deterministisch blijven zodat dezelfde bron altijd identieke output oplevert – essentieel voor betrouwbare CI‑builds.
Preserving semantic structure during conversion
Een veelgemaakte fout is de conversie behandelen als een simpele tekst‑dump. Die aanpak lampt semantische aanwijzingen zoals:
- Lijsten – Geordende en ongeordende lijsten worden eenvoudige alinea‑breuken, waardoor hiërarchie verloren gaat.
- Code‑blokken – Inline‑code wordt gewone tekst, en fenced blocks verliezen de taal‑identifier die nodig is voor syntax‑highlighting.
- Voet- en eindnoten – Deze worden vaak samengevoegd met de alinea, waardoor referentienavigatie breekt.
Om deze valkuilen te vermijden, configureer je de conversie‑engine om elk construct expliciet te mappen. Bijvoorbeeld, wanneer je een Word‑document met convertise.app converteert, schakel je de opties preserveLists en preserveCodeBlocks in (beschikbaar via de API). Het resulterende Markdown bevat - of 1. prefixes voor lijsten en triple‑backtick fences met taaltags voor code.
Hieronder een beknopte mapping‑tabel die je in je conversiescript kunt opnemen:
- Koppen →
# …(Niveau 1) →## …(Niveau 2) → … - Vet →
**tekst** - Cursief →
*tekst* - Tabellen → Markdown‑pijpsyntax
| Header |… - Afbeeldingen →
 - Links →
[link‑tekst](url) - Code →
\`` language<br>code<br>```` - Voetnoten →
[^1]: voetnoot‑tekst
Wanneer je deze elementen behoudt, genereren de ingebouwde plugins van de SSG (bijv. jekyll-toc, hugo-pagetoc) automatisch accurate navigatie en kan de sitesearch‑index ze correct parseren.
Handling images and media assets
De meeste documentatie bevat screenshots, diagrammen en af en toe korte video’s. De conversiepipeline moet deze assets behandelen als first‑class burgers:
- Extractie – Haal elke ingesloten afbeelding uit het bronbestand. Voor Word en PowerPoint is de afbeelding opgeslagen als een apart binair onderdeel; het extraheren is dan rechttoe rechtaan. Voor PDF’s zijn afbeeldingen rasterobjecten die geëxporteerd kunnen worden met een verliesloze instelling (PNG of TIFF).
- Consistente naamgeving – Gebruik een deterministisch naamschema zoals
docnaam-figure01.png. Dit voorkomt conflicten wanneer dezelfde afbeelding in meerdere documenten voorkomt. - Optimalisatie – Laat de afbeeldingen door een verliesloze compressor lopen (bijv.
pngquantmet--quality=100) en converteer daarna naar WebP voor browsers die dit ondersteunen. Bewaar zowel WebP als een fallback PNG om oudere browsers te dekken. - Referentie – Plaats het uiteindelijke afbeeldingspad in het Markdown zodat de SSG het kopieert naar de output‑assets‑map.
Als je de originele resolutie voor archiveringsdoeleinden wilt behouden, bewaar die dan in een aparte raw/ map die wordt uitgesloten van de publieke site maar wel in de repo blijft voor toekomstig her‑export.
Metadata transfer: from source to front‑matter
Metadata is de lijm die documentatie verbindt met haar levenscyclus. De meeste auteurstools embedden eigenschappen zoals:
- Titel
- Auteur(s)
- Aanmaak‑ en laatste‑wijzigingsdatum
- Versienummer
- Trefwoorden / tags
Tijdens extractie vraag je het bestandspakket om deze eigenschappen. In het geval van Office Open XML‑formaten bevat het core.xml‑deel de Dublin‑Core‑metadata. Voor PDF’s bevat het XMP‑pakket soortgelijke velden. Zodra je ze hebt, genereer je een YAML‑front‑matter‑blok bovenaan het Markdown‑bestand:
---
title: "How to Configure TLS for Apache"
author: "Jane Doe"
date: 2024-06-12
lastmod: 2025-01-03
tags: [security, apache, tls]
version: "1.3"
---
Als een bronbestand een veld mist, val dan terug op een logische default (bijv. bestandsnaam voor titel, huidige datum voor date). Consistente metadata over de repository maakt het de SSG mogelijk om tag‑pagina’s, changelogs en RSS‑feeds automatisch te genereren.
Automating the workflow with CI/CD
Zodra het conversiescript stabiel is, embed je het in een CI‑pipeline (GitHub Actions, GitLab CI, Azure Pipelines). Een typische job ziet er als volgt uit:
- Checkout van de documentatie‑repo.
- Detect nieuw toegevoegde of gewijzigde bronbestanden met
git diff. - Run de conversie‑container (Docker‑image dat
convertise.appvia de API aanroept) op de gewijzigde bestanden. - Commit de gegenereerde Markdown en assets terug naar een
docs/branch. - Trigger de SSG‑build (bijv.
hugo --minify). - Deploy de statische site naar een CDN.
Omdat de conversiestap deterministisch is en draait in een geïsoleerde container, krijg je reproduceerbare builds. Elke fout – bijvoorbeeld een PDF die niet OCR‑baar is – verschijnt als een CI‑error, waardoor vroegtijdige remediering mogelijk is.
Quality assurance: verifying conversion fidelity
Automatisering is slechts zo goed als de verificatie. Implementeer twee lagen QA:
- Geautomatiseerde diff – Vergelijk na conversie de geëxtraheerde tekst met het origineel via een checksum of een diff‑tool die whitespace negeert. Flag significante inhoudsverlies (>5 % reductie) als een waarschuwing.
- Visuele regressie – Voor afbeelding‑zware pagina’s genereer je een screenshot van de gerenderde HTML en vergelijk je die met een baseline via een tool als
pixelmatch. Dit vangt layout‑verschuivingen op door gebroken tabellen of missende CSS.
Detecteert de pipeline een regressie, moet hij de deploy afbreken en de diff tonen in de pull‑request‑comments. Deze praktijk zorgt ervoor dat de gepubliceerde documentatie nooit stilletjes afdrijft.
Case study: Migrating a legacy knowledge base to Hugo
Een middelgrote SaaS‑vendor onderhield haar help‑centrum in een mengelmoes van Word‑documenten, PowerPoint‑slides en gearchiveerde PDF’s. De content lag op een gedeelde schijf, en het support‑team kopieerde bestanden handmatig naar een web‑portal. Het bedrijf besloot over te stappen naar Hugo vanwege de snelheid en versie‑control‑vriendelijkheid.
Uitgevoerde stappen:
- Inventarisatie – Een script scant de schijf en categoriseert bestanden op extensie.
- Batch‑conversie – Met convertise.app draaide het team een bulk‑job die Markdown‑bestanden en geëxtraheerde assets in een
content/map uitstootte. - Metadata‑mapping – Een aangepaste Python‑script las de Word
core.xml‑properties en genereerde front‑matter voor elk Markdown‑bestand. - Afbeeldings‑pipeline – Alle screenshots werden naar WebP geconverteerd, en de Markdown‑links werden aangepast om te refereren aan de
static/images/map. - CI‑integratie – GitHub Actions voerde de conversie uit bij elke PR, waardoor elke nieuw support‑artikel hetzelfde proces doorliep.
Resultaat:
- De grootte van de zoekindex daalde met 40 % omdat de tekst nu doorzoekbaar was.
- Paginalaadtijden verbeterden met 30 % na migratie van afbeeldingen naar WebP.
- Het support‑team kon docs direct in de repository bewerken, waardoor roll‑backs en audit‑trails mogelijk werden.
Deze case laat zien hoe een gedisciplineerde conversiestrategie een versnipperde documentbibliotheek transformeert tot een snelle, doorzoekbare en onderhoudbare statische site.
Best‑practice checklist for SSG‑ready documentation conversion
- Identificeer bronformaten en kies één tekstueel doel (Markdown/HTML).
- Extraheer tekst, afbeeldingen en metadata met format‑native parsers waar mogelijk.
- Behoud semantische elementen (koppen, lijsten, code‑blokken, voetnoten) tijdens extractie.
- Normaliseer regeleinden en zet encoding om naar UTF‑8.
- Genereer deterministische bestandsnamen voor assets en Markdown‑bestanden.
- Maak front‑matter met titel, auteur, datums, tags en versie.
- Optimaliseer afbeeldingen (verliesloze compressie, WebP‑conversie) en bewaar originelen apart.
- Integreer het conversiescript in een gecontaineriseerde CI‑job.
- Valideer output met geautomatiseerde diff‑ en visuele regressietests.
- Documenteer de pipeline zodat nieuwe bijdragers deze kunnen uitbreiden zonder de workflow te breken.
Conclusion
Het converteren van legacy‑ en heterogene documentatie naar een formaat dat static site generators kunnen consumeren is niet louter een bestandstype‑wissel; het is een gedisciplineerde transformatie die structuur, metadata en doorzoekbaarheid beschermt. Door inhoud te extraheren met format‑bewuste tools, de output te saniteren, te verrijken met SSG‑specifieke front‑matter en het hele proces in een reproduceerbare CI‑pipeline te embedden, kunnen teams hun kennisbanken fris, snel en doorzoekbaar houden.
De hierboven geschetste aanpak maakt gebruik van hoogwaardige, privacy‑first conversiediensten zoals convertise.app, waardoor de originele bestanden nooit een beveiligde omgeving verlaten terwijl toch het schone Markdown of HTML wordt geleverd dat nodig is voor moderne documentatieworkflows.