{
    "schema": "https://saferpage.de/schemas/measurement-model.v1",
    "schema_id": "measurement-model.v1",
    "title": "SaferPage Messmodell und KPIs",
    "description": "Datenschutzarmes Messmodell für SaferPage: Produkt-Events, Betreiber-KPIs, Search-/Web-Vitals-Ziele und klare Grenzen ohne öffentliche Besucherlogs.",
    "canonical": "https://saferpage.de/messmodell",
    "events": [
        {
            "name": "scan_start",
            "purpose": "Domain-Check gestartet",
            "trigger": "Suchformular abgesendet",
            "kpi": "Scan-Start-Rate je Landingpage",
            "allowed_payload_keys": [
                "event",
                "page_path",
                "target_path",
                "report_host",
                "report_score_bucket",
                "surface",
                "timestamp_bucket"
            ],
            "forbidden_payload_keys": [
                "ip_address",
                "raw_user_agent",
                "email",
                "session_id",
                "full_url_with_query",
                "entered_domain",
                "cookie_id",
                "crm_contact_id"
            ],
            "storage_policy": "nur DataLayer/CustomEvent; keine eigene sendBeacon-, fetch- oder Storage-Persistenz"
        },
        {
            "name": "scan_complete",
            "purpose": "Scan erfolgreich oder fehlerhaft abgeschlossen",
            "trigger": "Frontend erhaelt Ergebnis oder Fehlerzustand",
            "kpi": "Scan-Completion-Rate",
            "allowed_payload_keys": [
                "event",
                "page_path",
                "target_path",
                "report_host",
                "report_score_bucket",
                "surface",
                "timestamp_bucket"
            ],
            "forbidden_payload_keys": [
                "ip_address",
                "raw_user_agent",
                "email",
                "session_id",
                "full_url_with_query",
                "entered_domain",
                "cookie_id",
                "crm_contact_id"
            ],
            "storage_policy": "nur DataLayer/CustomEvent; keine eigene sendBeacon-, fetch- oder Storage-Persistenz"
        },
        {
            "name": "report_evidence_open",
            "purpose": "Nachweisbereich oder Evidence-Hub geoeffnet",
            "trigger": "Link zu Evidence, Export oder Nachweisbereich",
            "kpi": "Evidence-Oeffnungsrate",
            "allowed_payload_keys": [
                "event",
                "page_path",
                "target_path",
                "report_host",
                "report_score_bucket",
                "surface",
                "timestamp_bucket"
            ],
            "forbidden_payload_keys": [
                "ip_address",
                "raw_user_agent",
                "email",
                "session_id",
                "full_url_with_query",
                "entered_domain",
                "cookie_id",
                "crm_contact_id"
            ],
            "storage_policy": "nur DataLayer/CustomEvent; keine eigene sendBeacon-, fetch- oder Storage-Persistenz"
        },
        {
            "name": "report_guide_open",
            "purpose": "Hintergrund-Link oder Fixpfad geoeffnet",
            "trigger": "Hintergrund-, Fixpfad- oder Evidence-Link",
            "kpi": "Hintergrund-Link-CTR pro Report",
            "allowed_payload_keys": [
                "event",
                "page_path",
                "target_path",
                "report_host",
                "report_score_bucket",
                "surface",
                "timestamp_bucket"
            ],
            "forbidden_payload_keys": [
                "ip_address",
                "raw_user_agent",
                "email",
                "session_id",
                "full_url_with_query",
                "entered_domain",
                "cookie_id",
                "crm_contact_id"
            ],
            "storage_policy": "nur DataLayer/CustomEvent; keine eigene sendBeacon-, fetch- oder Storage-Persistenz"
        },
        {
            "name": "report_share",
            "purpose": "Report, Badge oder Druckansicht geteilt",
            "trigger": "Share-, Badge-, Print- oder Kopieraktion",
            "kpi": "Report-Share-Rate",
            "allowed_payload_keys": [
                "event",
                "page_path",
                "target_path",
                "report_host",
                "report_score_bucket",
                "surface",
                "timestamp_bucket"
            ],
            "forbidden_payload_keys": [
                "ip_address",
                "raw_user_agent",
                "email",
                "session_id",
                "full_url_with_query",
                "entered_domain",
                "cookie_id",
                "crm_contact_id"
            ],
            "storage_policy": "nur DataLayer/CustomEvent; keine eigene sendBeacon-, fetch- oder Storage-Persistenz"
        },
        {
            "name": "report_correction_open",
            "purpose": "Kontakt-/Korrekturpfad geoeffnet",
            "trigger": "Korrektur-, Kontakt- oder False-Positive-Link",
            "kpi": "Korrekturanfrage-Rate",
            "allowed_payload_keys": [
                "event",
                "page_path",
                "target_path",
                "report_host",
                "report_score_bucket",
                "surface",
                "timestamp_bucket"
            ],
            "forbidden_payload_keys": [
                "ip_address",
                "raw_user_agent",
                "email",
                "session_id",
                "full_url_with_query",
                "entered_domain",
                "cookie_id",
                "crm_contact_id"
            ],
            "storage_policy": "nur DataLayer/CustomEvent; keine eigene sendBeacon-, fetch- oder Storage-Persistenz"
        },
        {
            "name": "portfolio_cta_click",
            "purpose": "Portfolio-/Monitoring-Interesse",
            "trigger": "Portfolio-, Monitoring- oder Mehr-Domain-Link",
            "kpi": "B2B-/Portfolio-Interesse",
            "allowed_payload_keys": [
                "event",
                "page_path",
                "target_path",
                "report_host",
                "report_score_bucket",
                "surface",
                "timestamp_bucket"
            ],
            "forbidden_payload_keys": [
                "ip_address",
                "raw_user_agent",
                "email",
                "session_id",
                "full_url_with_query",
                "entered_domain",
                "cookie_id",
                "crm_contact_id"
            ],
            "storage_policy": "nur DataLayer/CustomEvent; keine eigene sendBeacon-, fetch- oder Storage-Persistenz"
        },
        {
            "name": "api_interest",
            "purpose": "API- oder Integrationsinteresse",
            "trigger": "API-, Integrations- oder Webhook-Link",
            "kpi": "API-/Integrations-Interesse",
            "allowed_payload_keys": [
                "event",
                "page_path",
                "target_path",
                "report_host",
                "report_score_bucket",
                "surface",
                "timestamp_bucket"
            ],
            "forbidden_payload_keys": [
                "ip_address",
                "raw_user_agent",
                "email",
                "session_id",
                "full_url_with_query",
                "entered_domain",
                "cookie_id",
                "crm_contact_id"
            ],
            "storage_policy": "nur DataLayer/CustomEvent; keine eigene sendBeacon-, fetch- oder Storage-Persistenz"
        },
        {
            "name": "about_trust_open",
            "purpose": "Trust-, Methodik- oder Anbieterinformationen geoeffnet",
            "trigger": "Über-, Methodik-, Impressum-, Datenschutz- oder Security-Link",
            "kpi": "Trust-Content-Nutzung",
            "allowed_payload_keys": [
                "event",
                "page_path",
                "target_path",
                "report_host",
                "report_score_bucket",
                "surface",
                "timestamp_bucket"
            ],
            "forbidden_payload_keys": [
                "ip_address",
                "raw_user_agent",
                "email",
                "session_id",
                "full_url_with_query",
                "entered_domain",
                "cookie_id",
                "crm_contact_id"
            ],
            "storage_policy": "nur DataLayer/CustomEvent; keine eigene sendBeacon-, fetch- oder Storage-Persistenz"
        },
        {
            "name": "score_explainer_open",
            "purpose": "Score-Erklärung im Report geoeffnet oder sichtbar geworden",
            "trigger": "Score-Methodik-Link oder Score-Erklärungsbereich",
            "kpi": "Score-Erklärungs-Nutzung",
            "allowed_payload_keys": [
                "event",
                "page_path",
                "target_path",
                "report_host",
                "report_score_bucket",
                "surface",
                "timestamp_bucket"
            ],
            "forbidden_payload_keys": [
                "ip_address",
                "raw_user_agent",
                "email",
                "session_id",
                "full_url_with_query",
                "entered_domain",
                "cookie_id",
                "crm_contact_id"
            ],
            "storage_policy": "nur DataLayer/CustomEvent; keine eigene sendBeacon-, fetch- oder Storage-Persistenz"
        }
    ],
    "kpis": [
        {
            "group": "Aktivierung",
            "metric": "Scan-Start-Rate, Scan-Completion-Rate, Time-to-first-report",
            "source": "Frontend-Event-Hooks und Scan-Abschluss ohne öffentliche Rohlogs",
            "minimum_public_grain": "aggregiert pro Seite und Zeitraum"
        },
        {
            "group": "Report-Nutzbarkeit",
            "metric": "Evidence-Oeffnungsrate, Score-Erklärungs-Nutzung, Hintergrund-Link-CTR, Share-Rate",
            "source": "DataLayer-/CustomEvent-Hooks; Auswertung nur aggregiert",
            "minimum_public_grain": "aggregiert pro Reporttyp, nicht pro Nutzer"
        },
        {
            "group": "Korrektur und Vertrauen",
            "metric": "Korrekturpfad-Oeffnungen, Trust-Seiten-Oeffnungen, Sicherheitskontakt-Oeffnungen",
            "source": "Kontakt-/Trust-Linkevents und öffentliche Smoke-Verträge",
            "minimum_public_grain": "aggregierte Zähler ohne Kontaktinhalt"
        },
        {
            "group": "Suche und Indexierung",
            "metric": "GSC-Impressions, CTR, indexierte Kurzreports, noindex-Exports",
            "source": "Search Console, Sitemap, SEO/PWA-Smoke und Robots-/Canonical-Prüfung",
            "minimum_public_grain": "GSC-/Indexierungsaggregate"
        },
        {
            "group": "Performance und Usability",
            "metric": "Core Web Vitals am 75. Perzentil, LCP, INP, CLS, Report-Ladezeit",
            "source": "Lab-/Feldmessung nur aggregiert; keine Besucheridentitäten in Public Evidence",
            "minimum_public_grain": "75. Perzentil oder Labwert pro Seitentyp"
        }
    ],
    "dashboard_blueprint": {
        "status": "no_secret_blueprint_ready",
        "summary": "KPI-Dashboard-Blueprint für Betreiber- und Produktentscheidungen: Panels, Entscheidungsfragen, Datenquellen, Stop-Regeln und Public-Grain-Grenzen ohne produktives Tracking.",
        "panels": [
            {
                "id": "activation_funnel",
                "title": "Scan-Aktivierung",
                "operator_question": "Starten Besucher den Kurzcheck und landen sie auf einem verwertbaren Report?",
                "primary_metric": "Scan-Completion-Rate",
                "secondary_metrics": [
                    "Scan-Start-Rate",
                    "Time-to-first-report",
                    "Scan-Fehlerquote"
                ],
                "input_events": [
                    "scan_start",
                    "scan_complete"
                ],
                "evidence_source": "Frontend-Events, HTTP-Smokes und Report-Route nur aggregiert.",
                "decision_rule": "Wenn Start hoch, Completion niedrig oder Time-to-first-report steigt, zuerst Formular, Queue, Redirect und Fehlercopy prüfen.",
                "stop_rule": "Keine Optimierung als Erfolg claimen, solange Fehlerursache, Zeitraum und Seitentyp nicht getrennt sind.",
                "public_grain": "aggregiert pro Landingpage und Kalenderwoche",
                "responsibility": "Produkt/Entwicklung",
                "claim_boundary": "Dashboard-Blueprint: keine Besucherprofile, keine Rohlogs, keine Conversion-Rate, keine Core-Web-Vitals-Felddaten ohne separate Messung und keine produktive Analytics-Freigabe."
            },
            {
                "id": "report_understanding",
                "title": "Report-Verstaendnis",
                "operator_question": "Verstehen Betreiber Score, Grenzen und Nachweise, bevor sie Details lesen?",
                "primary_metric": "Score-Erklärungs-Nutzung",
                "secondary_metrics": [
                    "Evidence-Oeffnungsrate",
                    "Scrolltiefe bis Kurzfazit",
                    "Korrekturpfad-Oeffnung"
                ],
                "input_events": [
                    "score_explainer_open",
                    "report_evidence_open",
                    "report_correction_open"
                ],
                "evidence_source": "Score-Erklärungs-, Evidence- und Korrektur-Hooks ohne Besucherprofil.",
                "decision_rule": "Wenn Score-Erklärung selten genutzt wird und Korrekturpfad steigt, Wording, Entlastungssignale und Claim-Grenzen nachschaerfen.",
                "stop_rule": "Keine Score-/Warncopy ausrollen, wenn False-Positive-Fallledger oder Report-Quality-Smoke regressieren.",
                "public_grain": "aggregiert pro Reporttyp und Score-Bucket",
                "responsibility": "Produkt/Qualität",
                "claim_boundary": "Dashboard-Blueprint: keine Besucherprofile, keine Rohlogs, keine Conversion-Rate, keine Core-Web-Vitals-Felddaten ohne separate Messung und keine produktive Analytics-Freigabe."
            },
            {
                "id": "remediation_path",
                "title": "Fixpfad-Nutzung",
                "operator_question": "Öffnen Betreiber nach belegten Befunden die passenden ausgelagerten Hintergrund-Links oder Nachweispositionen?",
                "primary_metric": "Hintergrund-Link-CTR pro Report",
                "secondary_metrics": [
                    "Nachweisposition-Link-CTR",
                    "Re-Scan-Rate",
                    "Evidence-Oeffnungsrate"
                ],
                "input_events": [
                    "report_guide_open",
                    "report_evidence_open",
                    "scan_complete"
                ],
                "evidence_source": "Hintergrund-/Nachweisposition-/Evidence-Links, nur als aggregierte Reporttyp-Signale.",
                "decision_rule": "Wenn Befunde hoch und Hintergrund-Link-CTR niedrig ist, Linkziel, Label und Priorisierung im Report prüfen, nicht Hintergrundtexte einbetten.",
                "stop_rule": "Keine Link-Performance als Behebung claimen, solange kein Re-Scan oder Betreiber-Nachweis vorliegt.",
                "public_grain": "aggregiert pro Modul und Hintergrund-Linkziel",
                "responsibility": "Produkt/Betreibererfolg",
                "claim_boundary": "Dashboard-Blueprint: keine Besucherprofile, keine Rohlogs, keine Conversion-Rate, keine Core-Web-Vitals-Felddaten ohne separate Messung und keine produktive Analytics-Freigabe."
            },
            {
                "id": "trust_correction",
                "title": "Trust und Korrektur",
                "operator_question": "Finden Betreiber Korrektur-, Trust- und Sicherheitskontakte ohne private Inhalte offenzulegen?",
                "primary_metric": "Korrekturanfrage-Rate",
                "secondary_metrics": [
                    "Trust-Content-Nutzung",
                    "Sicherheitskontakt-Oeffnung",
                    "Report-Share-Rate"
                ],
                "input_events": [
                    "report_correction_open",
                    "about_trust_open",
                    "report_share"
                ],
                "evidence_source": "Kontakt-/Trust-/Share-Linkevents, keine Kontaktinhalte und keine Empfänger.",
                "decision_rule": "Wenn Korrekturpfad hoch ist, Fallledger, Methodikgrenzen und Betreiberangaben priorisiert prüfen.",
                "stop_rule": "Keine Trust-Verbesserung behaupten, wenn Impressum/Datenschutz/Kontakt oder security.txt-Smokes fehlschlagen.",
                "public_grain": "aggregiert pro Trust-Surface und Monat",
                "responsibility": "Trust/Compliance",
                "claim_boundary": "Dashboard-Blueprint: keine Besucherprofile, keine Rohlogs, keine Conversion-Rate, keine Core-Web-Vitals-Felddaten ohne separate Messung und keine produktive Analytics-Freigabe."
            },
            {
                "id": "search_indexing",
                "title": "Suche und Indexierung",
                "operator_question": "Werden öffentliche Kurzreports, Hintergrundseiten und Hubs auffindbar, während Exporte noindex bleiben?",
                "primary_metric": "GSC-Impressions und CTR",
                "secondary_metrics": [
                    "Indexierte Kurzreports",
                    "noindex-Export-Coverage",
                    "Sitemap-Abdeckung"
                ],
                "input_events": [
                    "report_evidence_open",
                    "report_guide_open"
                ],
                "evidence_source": "Search Console, Sitemap-, Robots-, Canonical- und SEO/PWA-Smoke-Aggregate.",
                "decision_rule": "Wenn Impressions wachsen, CTR aber fällt, Titel, Meta Description und Score-Grenze prüfen.",
                "stop_rule": "Keine SEO-Steigerung claimen, wenn Search-Console-Daten fehlen oder Exporte indexierbar werden.",
                "public_grain": "aggregiert pro Seitentyp und Suchkategorie",
                "responsibility": "SEO/Produkt",
                "claim_boundary": "Dashboard-Blueprint: keine Besucherprofile, keine Rohlogs, keine Conversion-Rate, keine Core-Web-Vitals-Felddaten ohne separate Messung und keine produktive Analytics-Freigabe."
            },
            {
                "id": "performance_quality",
                "title": "Performance und Qualität",
                "operator_question": "Bleiben Startseite, Reports, Hintergrundseiten und Evidence-Routen schnell und stabil genug für wiederholte Nutzung?",
                "primary_metric": "Core-Web-Vitals-Passrate am 75. Perzentil",
                "secondary_metrics": [
                    "LCP",
                    "INP",
                    "CLS",
                    "Route-P95",
                    "Smoke-Fehlerquote"
                ],
                "input_events": [
                    "scan_start",
                    "scan_complete",
                    "report_evidence_open"
                ],
                "evidence_source": "Web-Vitals-Felddaten, Labwerte und Competitive-/SEO-Smokes nur aggregiert.",
                "decision_rule": "Wenn P95 oder CWV kippen, Assets, Caching, Querypfade und Drittanbieterlast priorisieren.",
                "stop_rule": "Keine Performanceverbesserung behaupten, solange nur ein einzelner Labwert ohne Zeitraum vorliegt.",
                "public_grain": "75. Perzentil pro Seitentyp oder Smoke-P95",
                "responsibility": "Entwicklung/Plattform",
                "claim_boundary": "Dashboard-Blueprint: keine Besucherprofile, keine Rohlogs, keine Conversion-Rate, keine Core-Web-Vitals-Felddaten ohne separate Messung und keine produktive Analytics-Freigabe."
            }
        ],
        "claim_boundary": "Der Dashboard-Blueprint aktiviert kein produktives Tracking, erzeugt keine Besucherprofile und beweist keine reale Besucherzahl, keine Conversion-Rate und keine Core-Web-Vitals-Felddaten."
    },
    "guardrails": [
        "Keine personenbezogenen Besucherlogs in öffentlichen Evidence-Artefakten.",
        "Keine vollständige IP-Adresse, kein roher User-Agent, keine E-Mail, kein CRM-Kontakt und keine Session-ID in öffentlichen KPI-Ausgaben.",
        "Keine Domain-Eingaben einzelner Nutzer in öffentlichen Produktmess-Artefakten.",
        "Der aktuelle Frontend-Vertrag nutzt DataLayer und CustomEvent, aber keine sendBeacon-, fetch- oder Storage-Persistenz für Produktmessung.",
        "Wenn produktive Analytics aktiviert wird, dann nur mit Rechtsgrundlage, Zweckbindung, Aggregation, Löschkonzept und dokumentierter Betreiberfreigabe."
    ],
    "exports": {
        "json": "https://saferpage.de/messmodell-json",
        "csv": "https://saferpage.de/messmodell-csv",
        "markdown": "https://saferpage.de/messmodell-md"
    },
    "links": {
        "competitive_smoke": "https://saferpage.de/evidence/competitive-evidence-health-smoke.json",
        "seo_pwa_smoke": "https://saferpage.de/evidence/seo-pwa-smoke.json",
        "experiments": "https://saferpage.de/experimente"
    },
    "metrics": {
        "event_count": 10,
        "kpi_group_count": 5,
        "guardrail_count": 5,
        "dashboard_panel_count": 6,
        "dashboard_decision_rule_count": 6,
        "dashboard_stop_rule_count": 6,
        "dashboard_public_grain_count": 6,
        "export_count": 3,
        "allowed_payload_key_count": 7,
        "forbidden_payload_key_count": 8,
        "no_visitor_log_boundary": 1
    },
    "claim_boundary": "Dieses Messmodell beweist keine reale Besucherzahl, keine Conversion-Rate, keine Core-Web-Vitals-Felddaten und keine Analytics-Freigabe.",
    "publisher": {
        "@type": "Organization",
        "name": "HXT GmbH",
        "url": "https://saferpage.de/impressum",
        "email": "kontakt@peoplecheck.de",
        "telephone": "+49 30 84425144"
    }
}
