televisieselectie.nl
Gekeurd op 15 juli 2026 · 8 pagina's gecontroleerd · 12 verbeterpunten gevonden
Volledige audit
Onderdeel van het WebYes-keurmerk: naast de vier pijlers keuren we ook SEO, structured data, content, links, privacy en AI-vindbaarheid. Deze extra categorieën tellen niet mee in de keurmerkscore.
Bevindingen (21)
- FoutToegankelijkheid
1 <input> element(s) have no associated label, aria-label, or aria-labelledby.
Associate a <label for="inputId"> or add aria-label="..." to every visible form input.
Zo los je het op
Koppel elk formulierveld aan een label via for/id, of gebruik aria-label. Een placeholder alleen is niet genoeg: die verdwijnt zodra iemand typt.
- FoutToegankelijkheid
1 focusable element(s) have aria-hidden="true", making them invisible to screen readers but still reachable via keyboard.
Remove aria-hidden from focusable elements, or add tabindex="-1" to also remove them from the tab order.
Zo los je het op
Elementen met aria-hidden="true" zijn nog steeds focusbaar met het toetsenbord. Haal ze ook uit de tabvolgorde (tabindex="-1") of verberg ze echt.
- WaarschuwingToegankelijkheid
3 image(s) with alt="" lack role="presentation" or aria-hidden="true".
Mark decorative images explicitly: <img alt="" role="presentation"> or <img alt="" aria-hidden="true">.
- WaarschuwingVeiligheid
Sensitive path reachable: /admin/ (HTTP 200, 17674 bytes).
Block the path at the reverse proxy (deny .git/.env/etc.), remove the file from the deploy artifact, and rotate any secrets that may have been exposed.
Zo los je het op
Er is een gevoelig pad publiek bereikbaar (zoals een .env-bestand, .git-map of adminpaneel). Blokkeer het pad op serverniveau of haal het bestand offline, en ververs eventueel uitgelekte sleutels.
- WaarschuwingVeiligheid
No Content-Security-Policy header — XSS / clickjacking surface is wide open.
Start with a strict-dynamic CSP using nonces: `Content-Security-Policy: script-src 'nonce-<...>' 'strict-dynamic'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'`. Roll out in `Content-Security-Policy-Report-Only` first to catch violations.
Zo los je het op
Voeg een Content-Security-Policy header toe die vastlegt welke bronnen scripts en stijlen mogen laden. Begin desnoods met een rapporterende policy (Content-Security-Policy-Report-Only) en scherp die daarna aan.
- WaarschuwingSEO on-page
Title is too long (76 chars, max 60); will be truncated in SERPs.
Trim to ~60 characters and keep the most important keywords on the left.
- WaarschuwingSpam-signalen
Term "gratis" appears unusually often (36×, 4% of words).
Rewrite for natural language — repeated exact-match phrases can trigger spam classifiers.
- InfoSnelheid
Likely LCP image is missing `fetchpriority="high"`.
Add `fetchpriority="high"` to the hero image (/_next/image?url=%2Fimages%2Fevents%2Fwielrennen.webp&w=1920&q=75) so the browser fetches it ahead of low-priority resources. Saves 100-300ms LCP on typical pages.
Zo los je het op
Geef je grootste afbeelding boven de vouw voorrang met fetchpriority="high" of een preload-link. Zo start de download direct in plaats van na de rest van de pagina.
- InfoSnelheid
Page preloads 5 fonts (threshold: 4).
Each preloaded font competes with other critical resources for bandwidth during early page load. Limit preloads to the 2-3 fonts visible above the fold, lazy-load the rest, and consider variable fonts to reduce file count. Use `next/font` in Next.js for automatic subsetting.
Zo los je het op
Beperk het aantal fontbestanden: kies één of twee families en alleen de gewichten die je echt gebruikt. Elk extra fontbestand vertraagt de eerste weergave.
- InfoMobiel
8 links have very short anchor text (≤2 chars), likely producing small tap targets.
Ensure interactive elements have a minimum 48x48px touch area. Use padding or min-height/min-width on short-text links.
Zo los je het op
Maak knoppen en links minimaal 44 bij 44 pixels groot (of geef ze ruimere padding) en houd wat afstand tussen tikbare elementen. Duimen zijn onnauwkeuriger dan muispijlen.
- InfoVeiligheid
No `/.well-known/security.txt` published.
Publish a `security.txt` (RFC 9116) at `/.well-known/security.txt`. Even a one-line `Contact: mailto:[email protected]` plus an `Expires:` date is enough; it gives white-hat researchers somewhere to send reports instead of giving up.
Zo los je het op
Plaats een security.txt op /.well-known/security.txt met een contactadres voor beveiligingsmeldingen. Zo weten onderzoekers waar ze een lek kunnen melden.
- InfoVeiligheid
Missing `Cross-Origin-Opener-Policy` + `Cross-Origin-Embedder-Policy`. Cross-origin isolation lets you use SharedArrayBuffer and high-resolution timers safely.
Send `Cross-Origin-Opener-Policy: same-origin` and `Cross-Origin-Embedder-Policy: require-corp`. Note this requires every embedded resource to send `Cross-Origin-Resource-Policy`.
Zo los je het op
Voeg Cross-Origin-Opener-Policy: same-origin toe (en waar mogelijk Cross-Origin-Embedder-Policy). Dit isoleert je site van vensters die door andere origins zijn geopend.
- InfoVeiligheid
No `Cross-Origin-Resource-Policy` header. Without it, side-channel attacks via Spectre-style speculative execution stay viable.
Send `Cross-Origin-Resource-Policy: same-origin` for HTML responses, and `cross-origin` for assets you intentionally publish (e.g. fonts, JS bundles).
Zo los je het op
Voeg Cross-Origin-Resource-Policy: same-origin (of same-site) toe aan je responses, zodat andere sites je bestanden niet zomaar kunnen insluiten.
- InfoVeiligheid
robots.txt Disallow lines reveal sensitive paths: /admin/.
Listing a path under `Disallow:` doesn't hide it — it advertises it. Either move the resource behind auth and remove the Disallow line, or stop linking the path entirely so it never gets indexed.
- InfoStructured data
Page has no JSON-LD structured data in the initial HTML.
Server-render JSON-LD in the HTML response. If this is currently injected after hydration (for example with next/script afterInteractive), static crawlers and AI bots may not see it.
- InfoContent
Text-to-HTML ratio is 1.4% (target ≥ 2%).
Very low ratios usually mean the hydration payload, inline RSC blob or a vendor script is bigger than the rendered prose. Inspect the largest scripts and externalise or split them.
- InfoTechniek
2 crawled page(s) are not listed in any sitemap.
Add these URLs to your sitemap or noindex them. Example: https://televisieselectie.nl/kalender, https://televisieselectie.nl/tools
- InfoTechniek
Crawl stopped at the max-pages limit (6); 280 sitemap URLs were not visited but might still be reachable.
Re-run with `--max-pages 2000` (or higher) before trusting orphan-from-sitemap counts.
- InfoTechniek
No HTML sitemap link found on the homepage. Placing one in the footer is an industry best practice for UX and crawler/AI discovery.
Add a link to a user-facing HTML sitemap (e.g. `/sitemap`, not `sitemap.xml`) inside the <footer>. An HTML sitemap acts as a structural overview for lost visitors and as a fallback discovery surface for search engines and AI crawlers.
- InfoKwaliteitsindruk
Homepage has no `<link rel="icon">` — browsers will request /favicon.ico which may 404.
Add a custom favicon that reflects your brand. A missing favicon causes extra 404 log noise and looks unprofessional in browser tabs and bookmarks.
- InfoPrivacy
1 phone-shaped string(s) appear in main content. Examples: 866341225.
If the phone numbers are intentional public contact info, ignore this finding. If they're personal numbers (employees, customer testimonials), redact or replace with a routing alias.
Volledige audit uitgevoerd op 15 juli 2026.
Meer uit het keurmerkregister
Andere websites met een actief WebYes-keurmerk. Elk rapport is openbaar en op dezelfde vier pijlers gekeurd.