ogjg.nl
Better than 14% (national)
Better than 68% (national)
Better than 18% (national)
Better than 0% (national)
Machine-readable verification: /api/verify/ogjg.nl
Certified on 9 July 2026 · 8 pages checked · 16 improvements found
Full certification report
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
- ErrorAccessibilityAutomatically checked
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.
- ErrorAccessibilityAutomatically checked
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").
- ErrorAccessibilityAutomatically checked
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).
- WarningAccessibilityAutomatically checked
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.
More from the register
Other websites holding an active WebYes certification. Every report is public and audited on the same four pillars.