ogjg.nl
Certified on 9 July 2026 · 8 pages checked · 16 improvements found
Full audit
Part of the WebYes certification: beyond the four pillars we also audit SEO, structured data, content, links, privacy and AI findability. These extra categories do not count towards the certification score.
Findings (28)
- ErrorAccessibility
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.
How to fix it
Link every form field to a label via for/id, or use aria-label. A placeholder alone is not enough: it disappears as soon as someone types.
- ErrorAccessibility
1 <button> element(s) have no accessible name.
Add visible text content, aria-label="...", or aria-labelledby="..." to every <button>.
How to fix it
Some buttons have no name, such as a hamburger or close button with only an icon. Add an aria-label (for example aria-label="Open menu").
- ErrorAccessibility
14 link(s) have no accessible name (no text, aria-label, or title).
Add visible link text or aria-label to every <a> element so screen readers can announce the destination.
How to fix it
Some links have no readable name, usually icon links. Give them an aria-label or visually hidden text so a screen reader announces more than just 'link'.
- ErrorSpam signals
Page CSS/HTML suggests hidden/off-screen text patterns often associated with cloaking.
Remove display:none / zero-font-size blocks used to inject extra keywords. Use visible, user-facing content only.
- WarningSpeed
48 render-blocking <link rel="stylesheet"> in <head> (target: ≤2).
Inline critical CSS, lazy-load the rest with the `<link rel="preload" as="style" onload="this.rel='stylesheet'">` pattern, or split chunks per route. Each blocking stylesheet adds round-trips to LCP.
How to fix it
Reduce render-blocking CSS: inline the critical above-the-fold styles and load the rest asynchronously. Also remove CSS that is no longer used anywhere.
- WarningSpeed
1 parser-blocking <script src> in <head> (no defer/async).
Add `defer` or `async` to every external <script> in <head>. Parser-blocking scripts directly inflate INP and TBT.
How to fix it
Give script tags in the head a defer or async attribute, or move them to the end of the body. Right now they block page rendering.
- WarningSpeed
Likely LCP image has `loading="lazy"` — this is a known anti-pattern.
Remove `loading="lazy"` from the hero image (https://www.oudgeleerdjonggedaan.nl/wp-content/uploads/2025/01/icon-locaties.svg). Lazy-loading the LCP image delays it until intersection-observer fires.
How to fix it
Remove loading="lazy" from the largest above-the-fold image. Lazy loading delays exactly that download and slows down your LCP.
- WarningSpeed
Critical-path payload too heavy: 2 budgets breached simultaneously.
Breaches: 48 blocking <link rel="stylesheet">; 1 blocking <script src> without defer/async. Each one alone is borderline; together they translate to a multi-second LCP on slow networks. Inline only the above-the-fold critical CSS, defer everything else, and split route-specific bundles.
- WarningSpeed
8 image(s) lack explicit width/height or aspect-ratio, risking layout shifts.
Examples: https://www.oudgeleerdjonggedaan.nl/wp-content/uploads/2025/01/icon-locaties.svg, https://www.oudgeleerdjonggedaan.nl/wp-content/uploads/2025/12/Aafje.png, https://www.oudgeleerdjonggedaan.nl/wp-content/uploads/2025/12/Amtelring.png. Always set width and height attributes (or CSS aspect-ratio) on <img> so the browser reserves space before the image loads. In Next.js, use the `width`/`height` props or `fill` with a sized parent.
How to fix it
Give every image a width and height attribute (or CSS aspect-ratio). The browser then reserves space and the page does not shift while loading (CLS).
- WarningAccessibility
13 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">.
- WarningSecurity
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.
How to fix it
Add a Content-Security-Policy header that defines which sources may load scripts and styles. Start with a report-only policy if needed and tighten it from there.
- WarningOn-page SEO
Title is too long (78 chars, max 60); will be truncated in SERPs.
Trim to ~60 characters and keep the most important keywords on the left.
- WarningOn-page SEO
Page has multiple <h1> tags (2).
Consolidate to a single <h1> per page; use <h2>-<h6> for subsections.
- WarningStructured data
Page looks like a watch page (1 content video, 0 words) but has no VideoObject structured data.
This page reads as a dedicated watch page (one video, minimal other text). Add a VideoObject JSON-LD block (name, description, thumbnailUrl, contentUrl, uploadDate, duration, url/embedUrl pointing at this page) so Google can index it as a video result. If the clip is only supplementary (e.g. a homepage promo), keep it inline without schema instead.
- WarningContent
Title overlaps significantly with 2 other page(s).
Differentiate titles to avoid cannibalisation. Similar pages: https://www.oudgeleerdjonggedaan.nl/colleges/online/, https://www.oudgeleerdjonggedaan.nl/colleges/op-locatie/
- WarningSpam signals
Term "colleges" appears unusually often (12×, 5% of words).
Rewrite for natural language — repeated exact-match phrases can trigger spam classifiers.
- InfoSpeed
Likely LCP image is missing `fetchpriority="high"`.
Add `fetchpriority="high"` to the hero image (https://www.oudgeleerdjonggedaan.nl/wp-content/uploads/2025/01/icon-locaties.svg) so the browser fetches it ahead of low-priority resources. Saves 100-300ms LCP on typical pages.
How to fix it
Prioritise your largest above-the-fold image with fetchpriority="high" or a preload link. The download then starts immediately instead of after the rest of the page.
- InfoSpeed
4 image(s) ≥800px wide without srcset or <picture> for responsive delivery.
Use `srcset` with multiple resolutions or wrap images in `<picture>` with WebP/AVIF sources. In Next.js, use `next/image` which handles this automatically. Without responsive images, mobile users download desktop-sized assets.
How to fix it
Serve images in a modern format (WebP or AVIF), scaled to the size at which they are displayed. An image service or build step (such as next/image) handles this automatically.
- InfoSpeed
Likely unminified JS/CSS: 6 inline blocks + 17 external files.
Minify JavaScript and CSS to cut bytes and parse time. Examples: https://js.mollie.com/v1/mollie.js?ver=1.8.2, https://pretix.eu/widget/v2.nl.js, https://www.oudgeleerdjonggedaan.nl/wp-content/plugins/talkie-text-to-speech//js/scripts.js (heuristic — external file contents are not fetched)
How to fix it
CSS or JavaScript files are served unminified. Enable minification in your build process; virtually every bundler does this by default in production.
- InfoSecurity
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`.
How to fix it
Add Cross-Origin-Opener-Policy: same-origin (and where possible Cross-Origin-Embedder-Policy). This isolates your site from windows opened by other origins.
- InfoSecurity
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).
How to fix it
Add Cross-Origin-Resource-Policy: same-origin (or same-site) to your responses so other sites cannot freely embed your files.
- InfoSecurity
robots.txt Disallow lines reveal sensitive paths: /wp-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.
- InfoOn-page SEO
Heading level jumps from h1 to h3, skipping h2.
- InfoOn-page SEO
8/25 images lack explicit width/height or aspect-ratio (CLS risk).
Set width+height attributes, or use `style="aspect-ratio: w / h"` on the <img> or its wrapper to reserve layout space.
- 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.
- InfoTechnical
Crawl stopped at the max-pages limit (6); 671 sitemap URLs were not visited but might still be reachable.
Re-run with `--max-pages 2000` (or higher) before trusting orphan-from-sitemap counts.
- InfoTechnical
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.
- InfoQuality impression
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.
Full audit performed on 9 July 2026.
More from the register
Other websites holding an active WebYes certification. Every report is public and audited on the same four pillars.