{
    "scan_id": "public-20260419-060000-vE",
    "url": "https://veiligbaden.nl",
    "status": "done",
    "created_at": "2026-04-19 06:52:03",
    "completed_at": "2026-04-19 06:54:27",
    "scores": {
        "mobile": {
            "scores": {
                "performance": 73,
                "accessibility": 94,
                "best-practices": 100,
                "seo": 100
            },
            "cwv": {
                "LCP": "4.7 s",
                "FCP": "3.6 s",
                "CLS": "0.048",
                "TBT": "0 ms",
                "Speed Index": "5.0 s",
                "Time to Interactive": "4.7 s"
            },
            "top_opportunities": [
                {
                    "id": "unused-css-rules",
                    "title": "Reduce unused CSS",
                    "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
                    "saving_ms": 150,
                    "score": 0,
                    "items": [
                        {
                            "url": "https://veiligbaden.nl/assets/css/styles.css?v=20260412",
                            "bytes": 60241,
                            "wasted_ms": 0,
                            "wasted_bytes": 34279
                        },
                        {
                            "url": "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css",
                            "bytes": 18663,
                            "wasted_ms": 0,
                            "wasted_bytes": 18434
                        }
                    ]
                },
                {
                    "id": "unminified-css",
                    "title": "Minify CSS",
                    "description": "Minifying CSS files can reduce network payload sizes. [Learn how to minify CSS](https://developer.chrome.com/docs/lighthouse/performance/unminified-css/).",
                    "saving_ms": 150,
                    "score": 0,
                    "items": [
                        {
                            "url": "https://veiligbaden.nl/assets/css/styles.css?v=20260412",
                            "bytes": 60548,
                            "wasted_ms": 0,
                            "wasted_bytes": 21661
                        },
                        {
                            "url": "https://veiligbaden.nl/assets/css/chatbot.css",
                            "bytes": 10186,
                            "wasted_ms": 0,
                            "wasted_bytes": 3146
                        }
                    ]
                },
                {
                    "id": "unused-javascript",
                    "title": "Reduce unused JavaScript",
                    "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
                    "saving_ms": 150,
                    "score": 0,
                    "items": [
                        {
                            "url": "https://veiligbaden.nl/assets/js/chatbot.js",
                            "bytes": 31314,
                            "wasted_ms": 0,
                            "wasted_bytes": 25645
                        }
                    ]
                },
                {
                    "id": "unminified-javascript",
                    "title": "Minify JavaScript",
                    "description": "Minifying JavaScript files can reduce payload sizes and script parse time. [Learn how to minify JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unminified-javascript/).",
                    "saving_ms": 150,
                    "score": 0,
                    "items": [
                        {
                            "url": "https://veiligbaden.nl/assets/js/chatbot.js",
                            "bytes": 31314,
                            "wasted_ms": 0,
                            "wasted_bytes": 13750
                        },
                        {
                            "url": "https://veiligbaden.nl/assets/js/main.js",
                            "bytes": 11134,
                            "wasted_ms": 0,
                            "wasted_bytes": 4609
                        }
                    ]
                }
            ],
            "a11y_violations": [
                {
                    "id": "image-delivery-insight",
                    "title": "Improve image delivery",
                    "description": "Reducing the download time of images can improve the perceived load time of the page and LCP. [Learn more about optimizing image size](https://developer.chrome.com/docs/performance/insights/image-deli",
                    "score": 0,
                    "items": [
                        {
                            "selector": "div.ps-grid > div.ps-card > div.ps-image > img",
                            "snippet": "",
                            "explanation": ""
                        },
                        {
                            "selector": "div.ps-grid > div.ps-card > div.ps-image > img",
                            "snippet": "",
                            "explanation": ""
                        },
                        {
                            "selector": "div.solutions-grid > div.solution-card > div.solution-image > img",
                            "snippet": "",
                            "explanation": ""
                        }
                    ]
                },
                {
                    "id": "color-contrast",
                    "title": "Background and foreground colors do not have a sufficient contrast ratio.",
                    "description": "Low-contrast text is difficult or impossible for many users to read. [Learn how to provide sufficient color contrast](https://dequeuniversity.com/rules/axe/4.11/color-contrast).",
                    "score": 0,
                    "items": [
                        {
                            "selector": "header#siteHeader > div.container > div.header-actions > a.btn",
                            "snippet": "",
                            "explanation": "Fix any of the following:\n  Element has insufficient color contrast of 3.05 (foreground color: #ffffff, background color"
                        },
                        {
                            "selector": "div.trust-item > div.trust-content > strong.trust-stat-line > span.js-counter-re",
                            "snippet": "",
                            "explanation": "Fix any of the following:\n  Element has insufficient color contrast of 3.66 (foreground color: #8a7d74, background color"
                        },
                        {
                            "selector": "div.trust-grid > div.trust-item > div.trust-content > span",
                            "snippet": "",
                            "explanation": "Fix any of the following:\n  Element has insufficient color contrast of 3.66 (foreground color: #8a7d74, background color"
                        }
                    ]
                },
                {
                    "id": "label-content-name-mismatch",
                    "title": "Elements with visible text labels do not have matching accessible names.",
                    "description": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.11/l",
                    "score": 0,
                    "items": [
                        {
                            "selector": "body > div#chatbotWidget > button#chatbotToggle",
                            "snippet": "",
                            "explanation": "Fix any of the following:\n  Text inside the element is not included in the accessible name"
                        }
                    ]
                },
                {
                    "id": "heading-order",
                    "title": "Heading elements are not in a sequentially-descending order",
                    "description": "Properly ordered headings that do not skip levels convey the semantic structure of the page, making it easier to navigate and understand when using assistive technologies. [Learn more about heading or",
                    "score": 0,
                    "items": [
                        {
                            "selector": "div.container > div.voordelen-grid > div.voordeel-card > h4",
                            "snippet": "",
                            "explanation": "Fix any of the following:\n  Heading order invalid"
                        }
                    ]
                }
            ],
            "avg": 92
        },
        "desktop": {
            "error": "http_400",
            "avg": 0
        }
    },
    "findings": {
        "meta": {
            "type": "meta",
            "title": "Veilige badkamers voor senioren | SaniSafe Badkamers",
            "description": "SaniSafe Badkamers - Specialist in veilige inloopdouches en badkamerrenovaties voor senioren. Binnen 1 dag klaar. Gratis advies!",
            "ogImage": "https://veiligbaden.nl/assets/images/hero-badkamer.webp",
            "canonical": "https://veiligbaden.nl/",
            "h1Count": 1,
            "imgCount": 40,
            "imgNoAlt": 0,
            "hasFavicon": true,
            "viewport": true,
            "msg": "📝 Title: Veilige badkamers voor senioren | SaniSafe Badkame · H1: 1 · Images zonder alt: 0/40",
            "ts": 1776574384.487,
            "page_url": "https://veiligbaden.nl",
            "page_label": "Homepage",
            "page_index": 0
        },
        "linkcheck": {
            "type": "linkcheck",
            "total": 45,
            "checked": 8,
            "ok": 8,
            "bad": 0,
            "bad_links": [],
            "msg": "🔗 8/8 links OK",
            "ts": 1776574384.47,
            "page_url": "https://veiligbaden.nl",
            "page_label": "Homepage",
            "page_index": 0
        },
        "errors": {
            "type": "errors",
            "count": 0,
            "errors": [],
            "msg": "✓ Geen JS errors",
            "ts": 1776574384.487,
            "page_url": "https://veiligbaden.nl",
            "page_label": "Homepage",
            "page_index": 0
        },
        "schema": {
            "type": "schema",
            "count": 1,
            "types": [
                "HomeAndConstructionBusiness"
            ],
            "msg": "📊 Schema.org: 1 blocks (HomeAndConstructionBusiness)",
            "ts": 1776574384.492,
            "page_url": "https://veiligbaden.nl",
            "page_label": "Homepage",
            "page_index": 0
        },
        "security": {
            "type": "security",
            "hsts": false,
            "csp": false,
            "xfo": false,
            "xcto": false,
            "referrer": false,
            "permissions_policy": false,
            "server": "Apache",
            "https": true,
            "present": 0,
            "total": 5,
            "msg": "🛡️ Security: 0/5 headers aanwezig · HTTPS ✓",
            "ts": 1776574384.492,
            "page_url": "https://veiligbaden.nl",
            "page_label": "Homepage",
            "page_index": 0
        },
        "content": {
            "type": "content",
            "word_count": 1303,
            "reading_min": 7,
            "top_keywords": [
                {
                    "k": "badkamer",
                    "v": 23
                },
                {
                    "k": "gratis",
                    "v": 18
                },
                {
                    "k": "inloopdouche",
                    "v": 13
                },
                {
                    "k": "binnen",
                    "v": 13
                },
                {
                    "k": "advies",
                    "v": 12
                },
                {
                    "k": "wandpanelen",
                    "v": 11
                },
                {
                    "k": "offerte",
                    "v": 11
                },
                {
                    "k": "renovatie",
                    "v": 10
                },
                {
                    "k": "sanitair",
                    "v": 10
                },
                {
                    "k": "garantie",
                    "v": 9
                },
                {
                    "k": "antislip",
                    "v": 8
                },
                {
                    "k": "inmeting",
                    "v": 8
                },
                {
                    "k": "contact",
                    "v": 7
                },
                {
                    "k": "veilige",
                    "v": 7
                },
                {
                    "k": "douche",
                    "v": 7
                }
            ],
            "h1": [
                "Veilig douchen zonder zorgen – binnen 1 dag klaar"
            ],
            "h2": [
                "Van onveilig bad naar veilige douche",
                "Onze oplossingen",
                "Onze werkwijze",
                "Onze garanties",
                "Waarom SaniSafe?",
                "Before & After",
                "Zie uw nieuwe badkamer in 30 seconden",
                "Vraag nu gratis advies aan",
                "Veelgestelde vragen",
                "Wat onze klanten zeggen"
            ],
            "h3_count": 32,
            "nap": {
                "kvk": null,
                "btw": null,
                "tel": "+310103220556",
                "email": "info@sanisafe.nl",
                "postcode": null,
                "cities": [
                    "Rotterdam",
                    "Eindhoven",
                    "Tilburg",
                    "Breda"
                ]
            },
            "readability": {
                "flesch": 32,
                "avg_words_per_sentence": 16.9,
                "avg_syllables_per_word": 2.06,
                "passive_pct": 1
            },
            "language": {
                "html_lang": "nl",
                "hreflangs": [],
                "is_multilang": false
            },
            "images": {
                "total": 40,
                "webp": 30,
                "jpg": 0,
                "png": 0,
                "svg": 10,
                "gif": 0,
                "lazy": 37,
                "large": [
                    {
                        "src": "https://veiligbaden.nl/assets/images/portfolio/after/sanisafe-badkamer-houtlook-inloopdouche-after-2.webp",
                        "dims": "1366x2048"
                    },
                    {
                        "src": "https://veiligbaden.nl/assets/images/portfolio/before/sanisafe-badkamer-ligbad-douche-before.webp",
                        "dims": "1884x4080"
                    },
                    {
                        "src": "https://veiligbaden.nl/assets/images/portfolio/after/sanisafe-badkamer-houtlook-inloopdouche-after-3.webp",
                        "dims": "1366x2048"
                    },
                    {
                        "src": "https://veiligbaden.nl/assets/images/portfolio/after/sanisafe-badkamer-houtlook-inloopdouche-after-2.webp",
                        "dims": "1366x2048"
                    },
                    {
                        "src": "https://veiligbaden.nl/assets/images/portfolio/after/sanisafe-badkamer-dubbele-wastafel-led-spiegel-after.webp",
                        "dims": "1366x2048"
                    }
                ],
                "noLazy": 3,
                "noDims": 0,
                "webp_pct": 75
            },
            "socials": [],
            "gdpr": {
                "has_banner": false,
                "has_tracking": false,
                "banner_text": null,
                "gdpr_risk": false
            },
            "msg": "📖 1303 woorden · Flesch 32 · 0 socials · 40 images (75% WebP)",
            "ts": 1776574384.484,
            "page_url": "https://veiligbaden.nl",
            "page_label": "Homepage",
            "page_index": 0
        },
        "techstack": {
            "type": "techstack",
            "cms": null,
            "framework": null,
            "ecommerce": null,
            "analytics": [],
            "cdn": null,
            "hosting": "Apache",
            "builder": null,
            "server_header": "apache",
            "msg": "⚙️ Tech-stack: Apache",
            "ts": 1776574384.491,
            "page_url": "https://veiligbaden.nl",
            "page_label": "Homepage",
            "page_index": 0
        },
        "whois": {
            "domain": "veiligbaden.nl",
            "registrar": "Domain Robot",
            "created": "2025-11-05",
            "updated": "2026-03-05",
            "expires": null,
            "age_days": 165,
            "days_to_expiry": null,
            "nameservers": [],
            "tld": "nl"
        },
        "cta": {
            "text": "Gratis advies",
            "msg": "🖱️ Hover: \"Gratis advies\" → /offerte.php"
        },
        "subpages": [],
        "web_intel": {
            "mentions": [],
            "reviews": [],
            "news": []
        },
        "vision": {
            "first_impression": "Een professionele en overzichtelijke website met een rustige uitstraling die vertrouwen uitstraalt.",
            "visual_grade": "A",
            "strengths": [
                "Duidelijke hiërarchie en logische opbouw van de pagina",
                "Sterke visuele bewijsvoering door middel van voor-en-na sliders",
                "Goede balans tussen tekst en witruimte"
            ],
            "issues": [
                "De cookiebar overlapt de hero-sectie en de 'Gratis advies' knop bij initiële landing",
                "De typografie in de 'Before & After' sectie is erg klein en lastig leesbaar op desktop",
                "Sommige secties missen een duidelijke 'call-to-action' om de gebruiker door de funnel te leiden"
            ],
            "design_tips": [
                "Verplaats de cookiebar naar de onderkant van het scherm zodat de hero-sectie volledig zichtbaar blijft",
                "Vergroot de lettergrootte van de beschrijvende teksten onder de voor-en-na afbeeldingen voor betere toegankelijkheid",
                "Voeg meer contrast toe aan de secundaire knoppen om de conversie in de lagere secties te verhogen"
            ],
            "primary_colors": [
                "#c59d5f",
                "#332d2a",
                "#ffffff"
            ]
        },
        "gmb": null,
        "kvk_validation": null,
        "ssl_dns": {
            "ssl": {
                "valid_to": "2026-10-07",
                "valid_from": "2026-04-10",
                "days_left": 171,
                "issuer": "Sectigo Public Server Authentication CA DV R36",
                "cn": "veiligbaden.nl",
                "sans": 2,
                "expires_soon": false
            },
            "dns": {
                "spf": null,
                "spf_ok": false,
                "dmarc": "v=DMARC1;p=reject;",
                "dmarc_ok": true,
                "mx_count": 1,
                "mx_hosts": [
                    "smtp.rzone.de"
                ],
                "has_mail": true
            }
        },
        "robots": {
            "robots_txt": false,
            "sitemap_xml": false,
            "sitemap_count": 0,
            "blocks_all": false
        }
    },
    "action_plan": {
        "summary": "Veiligbaden.nl is een website gericht op senioren die veilige badkamers willen. De site heeft een goede SEO-score, maar kan verbeterd worden op het gebied van prestaties. Dit is belangrijk voor de business, omdat een snelle en gebruiksvriendelijke website essentieel is voor het aantrekken en behouden van klanten. De website biedt diensten zoals badkamerrenovatie en inloopdouches, en moet dus een goede gebruikerservaring bieden om conversie te stimuleren.",
        "grade": "B",
        "actions": [
            {
                "priority": 1,
                "icon": "⚡",
                "title": "Optimaliseer prestaties",
                "why": "Een snelle website is essentieel voor senioren die snel informatie nodig hebben over badkamerrenovatie",
                "how": "Optimaliseer afbeeldingen en reduceer ongebruikte CSS en JavaScript",
                "impact": "hoog",
                "price_estimate": "€495"
            },
            {
                "priority": 2,
                "icon": "🔤",
                "title": "Verbeter mobiele ervaring",
                "why": "Senioren gebruiken vaak mobiele apparaten om informatie op te zoeken, dus een goede mobiele ervaring is cruciaal",
                "how": "Optimaliseer de website voor mobiele apparaten en zorg voor een gebruikersvriendelijke interface",
                "impact": "hoog",
                "price_estimate": "€750"
            },
            {
                "priority": 3,
                "icon": "🖼️",
                "title": "Toevoegen alt-tags",
                "why": "Alt-tags helpen senioren met visuele beperkingen om afbeeldingen te begrijpen",
                "how": "Voeg alt-tags toe aan alle afbeeldingen op de website",
                "impact": "middel",
                "price_estimate": "€150"
            },
            {
                "priority": 4,
                "icon": "🔗",
                "title": "Controleer broken links",
                "why": "Broken links kunnen senioren frustreren en ze wegjagen van de website",
                "how": "Controleer regelmatig op broken links en repareer ze",
                "impact": "laag",
                "price_estimate": "€295"
            },
            {
                "priority": 5,
                "icon": "📱",
                "title": "Verbeter canonical",
                "why": "Een goede canonical-tag helpt zoekmachines om de juiste versie van de website te indexeren",
                "how": "Controleer en verbeter de canonical-tag op de website",
                "impact": "laag",
                "price_estimate": "€295"
            }
        ]
    },
    "sector_analysis": {
        "sector_key": "badkamerspecialist",
        "sector_label": "Badkamerspecialist",
        "sbi": "4332",
        "gmb": "GMB",
        "matched_services": [
            {
                "title": "Badkamer renovatie",
                "slug": "badkamer-renovatie",
                "hits": 1
            }
        ],
        "confidence": 1,
        "benchmark": {
            "n_scans": 6,
            "perf_mobile_avg": 72,
            "perf_desktop_avg": 95,
            "seo_mobile_avg": 100,
            "seo_desktop_avg": 100
        },
        "total_sector_services": 7,
        "competitors": [
            {
                "domain": "badkamerspecialist.nl",
                "naam": "Badkamerspecialist",
                "waarom": "Grootste speler in Nederland"
            },
            {
                "domain": "badkamerxxl.nl",
                "naam": "Badkamer XXL",
                "waarom": "Meerdere vestigingen in regio Rotterdam"
            },
            {
                "domain": "sanitairwinkel.nl",
                "naam": "Sanitairwinkel",
                "waarom": "Brede range aan badkamerspecialist producten"
            }
        ],
        "keywords": {
            "covered": [
                "badkamer verbouwen",
                "badkamerrenovatie",
                "badkamer plaatsen",
                "sanitair installeren",
                "lekkage badkamer",
                "douche plaatsen",
                "douchecabine installeren",
                "onderhoud badkamer",
                "badkamer check"
            ],
            "missing": [
                "waterlekkage",
                "toilet plaatsen",
                "wc installeren",
                "bad installeren",
                "ligbad plaatsen"
            ],
            "coverage_pct": 64,
            "total_sector_keywords": 14
        },
        "cbs": {
            "total": 230,
            "solo": 210,
            "small": 20,
            "medium": 0,
            "large": 0,
            "period": "2026KW02",
            "sbi_key": "433200",
            "source": "CBS StatLine (tabel 81589NED)"
        }
    },
    "pdf_url": "/website-scan/runs/public-20260419-060000-vE/report.pdf",
    "video_url": "/website-scan/runs/public-20260419-060000-vE/scan.mp4",
    "exported_at": "2026-04-19T14:49:25+00:00",
    "exported_by": "IT Live Website Scanner"
}