.wc-page {
–navy: #0B1220; –navy-soft: #5b6472; –bg: #F7F9FB; –card: #ffffff; –line: #E1E4E9;
–pass: #14B8A6; –pass-bg: #E3F9F5; –warn: #C98A1B; –warn-bg: #FDF3E2;
–fail: #E2373A; –fail-bg: #FCEBEB;
–mono: ‘JetBrains Mono’, monospace; –display: ‘Plus Jakarta Sans’, sans-serif; –body: ‘Inter’, sans-serif;
max-width: 860px; margin: 0 auto; padding: 2rem 1.25rem 3rem;
font-family: var(–body); color: var(–navy); line-height: 1.6;
}
.wc-page * { box-sizing: border-box; }
.wc-top-hero { text-align: center; margin-bottom: 3rem; }
.wc-top-hero .eyebrow {
font-family: var(–mono); font-size: .78rem; letter-spacing: .08em; text-transform: uppercase;
color: var(–pass); margin: 0 0 .8rem;
}
.wc-top-hero h1 {
font-family: var(–display); font-weight: 700; font-size: clamp(1.8rem, 4vw, 2.6rem);
margin: 0 0 .9rem; line-height: 1.15; color: var(–navy);
}
.wc-top-hero p { max-width: 520px; margin: 0 auto; color: var(–navy-soft); font-size: 1.02rem; }
.wc-block { max-width: 700px; margin: 0 auto 4rem; }
.wc-form { background: var(–card); border: 1px solid var(–line); border-radius: 18px; padding: 1.9rem; }
.wc-form h3 { font-family: var(–display); font-weight: 700; font-size: 1.25rem; margin: 0 0 .3rem; }
.wc-form p.wc-sub { margin: 0 0 1.2rem; font-size: .9rem; color: var(–navy-soft); }
.wc-inputrow { display: flex; gap: .6rem; }
.wc-input { flex: 1; padding: .8rem .95rem; border: 1px solid #cfd6dd; border-radius: 10px; font-size: 1rem; font-family: var(–body); }
.wc-input:focus { outline: 2px solid var(–pass); outline-offset: 1px; }
.wc-btn { padding: .8rem 1.4rem; border: none; border-radius: 10px; background: var(–navy); color: #fff; font-weight: 600; font-family: var(–body); cursor: pointer; white-space: nowrap; font-size: 1rem; }
.wc-btn:hover { background: #1a2740; }
.wc-btn:disabled { background: #9aa7b8; cursor: wait; }
@media (max-width: 480px) { .wc-inputrow { flex-direction: column; } }
.wc-error { margin-top: .8rem; font-size: .85rem; color: var(–fail); display: none; }
.wc-loading { display: none; margin-top: 1.2rem; font-size: .88rem; color: var(–navy-soft); font-family: var(–mono); }
.wc-result { margin-top: 2rem; display: none; }
.wc-hero { display: flex; align-items: center; gap: 1.6rem; background: var(–card); border: 1px solid var(–line); border-radius: 18px; padding: 1.6rem; margin-bottom: 1.6rem; }
.wc-ring-wrap { position: relative; width: 108px; height: 108px; flex-shrink: 0; }
.wc-ring-wrap svg { transform: rotate(-90deg); }
.wc-ring-bg { fill: none; stroke: var(–line); stroke-width: 9; }
.wc-ring-fg { fill: none; stroke: var(–pass); stroke-width: 9; stroke-linecap: round; transition: stroke-dashoffset 1s ease; }
.wc-ring-score { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; }
.wc-ring-score .num { font-family: var(–display); font-weight: 700; font-size: 1.6rem; }
.wc-ring-score .pct { font-family: var(–mono); font-size: .62rem; color: var(–navy-soft); }
.wc-hero-text h4 { font-family: var(–display); font-weight: 700; font-size: 1.15rem; margin: 0 0 .35rem; word-break: break-word; }
.wc-hero-text p { margin: 0; font-size: .88rem; color: var(–navy-soft); }
.wc-trace { position: relative; padding-left: 2.4rem; }
.wc-trace::before { content: “”; position: absolute; left: .9rem; top: .5rem; bottom: 1.4rem; width: 2px; background: var(–line); }
.wc-cat { position: relative; background: var(–card); border: 1px solid var(–line); border-radius: 14px; padding: 1.1rem 1.3rem; margin-bottom: .9rem; }
.wc-cat::before { content: “”; position: absolute; left: -1.72rem; top: 1.35rem; width: 13px; height: 13px; border-radius: 50%; border: 3px solid var(–card); box-shadow: 0 0 0 2px var(–dot, var(–pass)); background: var(–dot, var(–pass)); }
.wc-cat.status-warn { –dot: var(–warn); }
.wc-cat.status-fail { –dot: var(–fail); }
.wc-cat-head { display: flex; align-items: center; justify-content: space-between; gap: 1rem; }
.wc-cat-head h5 { font-family: var(–display); font-weight: 600; font-size: .96rem; margin: 0; }
.wc-badge { font-family: var(–mono); font-size: .68rem; font-weight: 600; padding: .22rem .5rem; border-radius: 999px; white-space: nowrap; }
.wc-badge.pass { color: var(–pass); background: var(–pass-bg); }
.wc-badge.warn { color: var(–warn); background: var(–warn-bg); }
.wc-badge.fail { color: var(–fail); background: var(–fail-bg); }
.wc-subchecks { list-style: none; margin: .8rem 0 0; padding: 0; display: grid; gap: .4rem; }
.wc-subchecks li { display: flex; align-items: baseline; gap: .5rem; font-size: .84rem; color: var(–navy-soft); }
.wc-subchecks li .dot { font-family: var(–mono); flex-shrink: 0; }
.wc-subchecks li.pass .dot { color: var(–pass); }
.wc-subchecks li.warn .dot { color: var(–warn); }
.wc-subchecks li.fail .dot { color: var(–fail); }
.wc-explain { margin-bottom: 2rem; }
.wc-explain .section-eyebrow {
font-family: var(–mono); font-size: .74rem; letter-spacing: .06em; text-transform: uppercase;
color: var(–navy-soft); text-align: center; margin: 0 0 .5rem;
}
.wc-explain h2 { font-family: var(–display); font-weight: 700; font-size: 1.6rem; text-align: center; margin: 0 0 2rem; }
.wc-explain-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 1rem; }
.wc-explain-card { background: var(–card); border: 1px solid var(–line); border-radius: 14px; padding: 1.3rem; }
.wc-explain-card .num { font-family: var(–mono); font-size: .72rem; color: var(–pass); margin: 0 0 .5rem; display: block; }
.wc-explain-card h5 { font-family: var(–display); font-weight: 600; font-size: 1rem; margin: 0 0 .5rem; }
.wc-explain-card p { font-size: .87rem; color: var(–navy-soft); margin: 0; }
.wc-page-foot { text-align: center; font-size: .82rem; color: var(–navy-soft); border-top: 1px solid var(–line); padding-top: 2rem; }
Gratis & direct resultaat
Is jouw website nog up-to-date?
Voer je domeinnaam in en zie binnen enkele seconden of je site voldoet aan moderne beveiligings- en internetstandaarden.
Test je website
Controleert HTTPS, beveiligingsheaders, e-mailbeveiliging, IPv6 en meer.
Bezig met scannen…
SCORE
Achtergrond
Wat controleren we precies?
IPv6
Of je website en nameservers bereikbaar zijn via het moderne IPv6-adres, naast het oudere IPv4.
DNSSEC
Of je domein cryptografisch ondertekend is, zodat bezoekers zeker weten dat ze bij de juiste server uitkomen.
Beveiligde verbinding
Of HTTPS goed is ingesteld: geldig certificaat, automatische doorverwijzing en HSTS.
Beveiligingsopties
Of belangrijke beveiligingsheaders en een security.txt-bestand aanwezig zijn.
E-mailbeveiliging
Of SPF en DMARC zijn ingesteld, zodat anderen moeilijker je domein kunnen misbruiken voor phishing.
Deze check draait volledig op onze eigen server. Voor de meest uitgebreide en officiële test kun je ook terecht bij
internet.nl.
(function () {
const btn = document.getElementById(‘wcBtn’);
const input = document.getElementById(‘wcDomain’);
const errorEl = document.getElementById(‘wcError’);
const loadingEl = document.getElementById(‘wcLoading’);
const resultEl = document.getElementById(‘wcResult’);
const SCAN_ENDPOINT = window.location.origin + ‘/wp-json/website-check/v1/scan’;
function showError(msg) {
errorEl.textContent = msg;
errorEl.style.display = ‘block’;
}
function runScan() {
const domain = input.value.trim().replace(/^https?:\/\//, ”).replace(/\/$/, ”);
errorEl.style.display = ‘none’;
resultEl.style.display = ‘none’;
if (!/^[a-z0-9.-]+\.[a-z]{2,}$/i.test(domain)) {
showError(‘Vul een geldige domeinnaam in, bijvoorbeeld www.jouwbedrijf.nl’);
return;
}
btn.disabled = true;
btn.textContent = ‘Bezig…’;
loadingEl.style.display = ‘block’;
fetch(SCAN_ENDPOINT + ‘?domain=’ + encodeURIComponent(domain))
.then(r => r.json())
.then(data => {
loadingEl.style.display = ‘none’;
btn.disabled = false;
btn.textContent = ‘Start test’;
if (data.error) { showError(data.error); return; }
render(data);
})
.catch(() => {
loadingEl.style.display = ‘none’;
btn.disabled = false;
btn.textContent = ‘Start test’;
showError(‘Kon geen verbinding maken met de scan-service.’);
});
}
function render(data) {
document.getElementById(‘wcDomainName’).textContent = data.domain;
const scoreNum = document.getElementById(‘wcScoreNum’);
const ringFg = document.getElementById(‘wcRingFg’);
const circumference = 289;
const offset = circumference – (data.score / 100) * circumference;
let ringColor = ‘var(–pass)’;
if (data.score < 50) ringColor = 'var(–fail)';
else if (data.score {
scoreNum.textContent = data.score + ‘%’;
ringFg.style.strokeDashoffset = offset;
});
const failCount = data.categories.filter(c => c.status === ‘fail’).length;
const warnCount = data.categories.filter(c => c.status === ‘warn’).length;
let summary = ‘Alle categorieën voldoen aan de basis.’;
if (failCount > 0) summary = failCount + ‘ punt’ + (failCount > 1 ? ‘en’ : ”) + ‘ vraagt direct aandacht, ‘ + warnCount + ‘ kan beter.’;
else if (warnCount > 0) summary = ‘Goed op weg — ‘ + warnCount + ‘ punt’ + (warnCount > 1 ? ‘en’ : ”) + ‘ kan nog beter.’;
document.getElementById(‘wcSummary’).textContent = summary;
const list = document.getElementById(‘wcCategoryList’);
list.innerHTML = ”;
data.categories.forEach(cat => {
const el = document.createElement(‘div’);
el.className = ‘wc-cat status-‘ + cat.status;
el.innerHTML =
‘
‘
‘ + cat.name + ‘
‘ +
‘‘ + (cat.status === ‘pass’ ? ‘OK’ : cat.status === ‘warn’ ? ‘Let op’ : ‘Actie nodig’) + ‘‘ +
‘
‘ +
‘
- ‘ +
- ‘ + (c.status === ‘pass’ ? ‘✓’ : c.status === ‘warn’ ? ‘!’ : ‘✕’) + ‘ ‘ + c.label + ‘
cat.checks.map(c =>
‘
‘
).join(”) +
‘
‘;
list.appendChild(el);
});
resultEl.style.display = ‘block’;
resultEl.scrollIntoView({ behavior: ‘smooth’, block: ‘nearest’ });
}
btn.addEventListener(‘click’, runScan);
input.addEventListener(‘keydown’, e => { if (e.key === ‘Enter’) runScan(); });
})();
