# Prüfpunkte-Katalog v19 — 224 echte Einzelprüfungen

Dieser Katalog wird aus `src/modules/checkpoints.js` erzeugt. Jeder Punkt besitzt eine eigene Testfunktion und wird bei jedem Scan in `results.checkpoints` bewertet.

## Zusammenfassung

- Kategorien: 14
- Einzelprüfungen: 224
- API-Katalog: `GET /api/checkpoints/catalog`
- PDF-Ausgabe: vollständige Prüfpunkte-Matrix im Ergebnisbericht

## SSL & Verschlüsselung (16)

01. `ssl_transport.https_url` — **Website wird per HTTPS aufgerufen**
    - Schweregrad: hoch
    - Prüfung: Die geprüfte URL nutzt verschlüsseltes HTTPS.
02. `ssl_transport.no_http_forms` — **Keine Formularziele mit http://**
    - Schweregrad: hoch
    - Prüfung: Formulare senden nicht unverschlüsselt an HTTP-Endpunkte.
03. `ssl_transport.no_http_scripts` — **Keine unsicheren Script-Ressourcen**
    - Schweregrad: hoch
    - Prüfung: Scripts werden nicht über http:// geladen.
04. `ssl_transport.no_http_styles` — **Keine unsicheren CSS-Ressourcen**
    - Schweregrad: mittel
    - Prüfung: Stylesheets werden nicht über http:// geladen.
05. `ssl_transport.no_http_images` — **Keine unsicheren Bild-Ressourcen**
    - Schweregrad: niedrig
    - Prüfung: Bilder werden nicht über http:// geladen.
06. `ssl_transport.no_http_iframes` — **Keine unsicheren iframe-Ressourcen**
    - Schweregrad: hoch
    - Prüfung: iframes werden nicht über http:// geladen.
07. `ssl_transport.no_http_media` — **Keine unsicheren Audio-/Videoquellen**
    - Schweregrad: niedrig
    - Prüfung: Media-Quellen werden nicht über http:// geladen.
08. `ssl_transport.no_http_downloads` — **Keine Downloadlinks auf http://**
    - Schweregrad: mittel
    - Prüfung: PDF/ZIP/Office-Downloads werden verschlüsselt verlinkt.
09. `ssl_transport.canonical_https` — **Canonical-URL nutzt HTTPS**
    - Schweregrad: niedrig
    - Prüfung: Canonical-Links verweisen nicht auf http://.
10. `ssl_transport.og_url_https` — **OpenGraph-URL nutzt HTTPS**
    - Schweregrad: niedrig
    - Prüfung: Social-Preview-URL verweist nicht auf http://.
11. `ssl_transport.hsts_present` — **HSTS-Header vorhanden**
    - Schweregrad: mittel
    - Prüfung: Strict-Transport-Security ist gesetzt.
12. `ssl_transport.hsts_one_year` — **HSTS max-age mindestens ein Jahr**
    - Schweregrad: mittel
    - Prüfung: HSTS schützt langfristig vor Downgrade-Angriffen.
13. `ssl_transport.hsts_subdomains` — **HSTS includeSubDomains aktiv**
    - Schweregrad: niedrig
    - Prüfung: Subdomains sind in HSTS eingeschlossen.
14. `ssl_transport.hsts_preload` — **HSTS preload vorbereitet**
    - Schweregrad: niedrig
    - Prüfung: preload ist im HSTS-Header gesetzt.
15. `ssl_transport.secure_cookie_flag` — **Cookies mit Secure-Flag**
    - Schweregrad: mittel
    - Prüfung: Set-Cookie nutzt Secure oder es werden keine Cookies gesetzt.
16. `ssl_transport.samesite_cookie_flag` — **Cookies mit SameSite-Attribut**
    - Schweregrad: niedrig
    - Prüfung: Set-Cookie nutzt SameSite oder es werden keine Cookies gesetzt.

## DSGVO & Recht (16)

01. `dsgvo_legal.impressum_link` — **Impressum-Link vorhanden**
    - Schweregrad: mittel
    - Prüfung: Die Seite enthält einen Impressumslink oder Impressumstext.
02. `dsgvo_legal.privacy_link` — **Datenschutz-Link vorhanden**
    - Schweregrad: mittel
    - Prüfung: Die Seite enthält Datenschutz/Privacy-Hinweis.
03. `dsgvo_legal.footer_legal_links` — **Rechtliche Links im Footer**
    - Schweregrad: mittel
    - Prüfung: Impressum und Datenschutz sind im Seitenfuß erreichbar.
04. `dsgvo_legal.cookie_consent_signal` — **Cookie-/Consent-Hinweis erkennbar**
    - Schweregrad: mittel
    - Prüfung: Cookie-Banner, Consent-Tool oder Einwilligungstext ist erkennbar.
05. `dsgvo_legal.cookie_reject_signal` — **Ablehnen-Option erkennbar**
    - Schweregrad: mittel
    - Prüfung: Cookie-Hinweis enthält eine Ablehnen-/Nicht zustimmen-Option.
06. `dsgvo_legal.form_privacy_context` — **Formulare mit Datenschutzkontext**
    - Schweregrad: mittel
    - Prüfung: Bei Formularen ist Datenschutz/Einwilligung in der Nähe erkennbar.
07. `dsgvo_legal.newsletter_optin_context` — **Newsletter mit Opt-in/Abmeldehinweis**
    - Schweregrad: niedrig
    - Prüfung: Newsletter-Signale haben Opt-in, Abmelden oder Datenschutzkontext.
08. `dsgvo_legal.no_google_fonts_external` — **Keine externen Google Fonts**
    - Schweregrad: mittel
    - Prüfung: Kein fonts.googleapis.com/fonts.gstatic.com im Quelltext.
09. `dsgvo_legal.no_meta_pixel` — **Kein Meta/Facebook Pixel erkennbar**
    - Schweregrad: mittel
    - Prüfung: fbq/connect.facebook.net/facebook.com/tr wird nicht gefunden.
10. `dsgvo_legal.no_tiktok_pixel` — **Kein TikTok Pixel erkennbar**
    - Schweregrad: mittel
    - Prüfung: TikTok Tracking-Code wird nicht gefunden.
11. `dsgvo_legal.no_hotjar` — **Kein Hotjar Tracking erkennbar**
    - Schweregrad: niedrig
    - Prüfung: Hotjar-Code wird nicht gefunden.
12. `dsgvo_legal.no_recaptcha_without_context` — **reCAPTCHA nur mit Datenschutzkontext**
    - Schweregrad: niedrig
    - Prüfung: Wenn reCAPTCHA vorkommt, ist Datenschutztext vorhanden.
13. `dsgvo_legal.youtube_privacy_context` — **YouTube-Embeds mit Datenschutzkontext**
    - Schweregrad: niedrig
    - Prüfung: YouTube-Embeds haben Privacy-Kontext oder youtube-nocookie.
14. `dsgvo_legal.maps_privacy_context` — **Maps-Einbindung mit Datenschutzkontext**
    - Schweregrad: niedrig
    - Prüfung: Google-Maps-Einbindungen werden mit Datenschutzkontext erkannt.
15. `dsgvo_legal.no_placeholder_legal` — **Keine Pflichttext-Platzhalter**
    - Schweregrad: mittel
    - Prüfung: Musterimpressum/Musterdatenschutz/Platzhalter wird nicht sichtbar.
16. `dsgvo_legal.responsible_entity_visible` — **Verantwortlicher/Rechtsform erkennbar**
    - Schweregrad: niedrig
    - Prüfung: Rechtsform, Inhaber oder Verantwortlicher ist sichtbar.

## Sicherheits-Header (16)

01. `security_headers.csp_present` — **Content-Security-Policy vorhanden**
    - Schweregrad: mittel
    - Prüfung: CSP-Header ist gesetzt.
02. `security_headers.csp_default_src` — **CSP default-src definiert**
    - Schweregrad: mittel
    - Prüfung: CSP enthält default-src.
03. `security_headers.csp_script_src` — **CSP script-src definiert**
    - Schweregrad: mittel
    - Prüfung: Script-Quellen sind eingeschränkt.
04. `security_headers.csp_no_unsafe_inline` — **CSP ohne unsafe-inline**
    - Schweregrad: mittel
    - Prüfung: unsafe-inline wird nicht erlaubt.
05. `security_headers.csp_no_unsafe_eval` — **CSP ohne unsafe-eval**
    - Schweregrad: mittel
    - Prüfung: unsafe-eval wird nicht erlaubt.
06. `security_headers.csp_object_none` — **CSP object-src none**
    - Schweregrad: niedrig
    - Prüfung: Alte Plugin-/Object-Einbettung ist blockiert.
07. `security_headers.csp_base_uri` — **CSP base-uri definiert**
    - Schweregrad: niedrig
    - Prüfung: base-uri ist eingeschränkt.
08. `security_headers.frame_protection` — **Frame-/Clickjacking-Schutz vorhanden**
    - Schweregrad: mittel
    - Prüfung: X-Frame-Options oder CSP frame-ancestors ist gesetzt.
09. `security_headers.xfo_valid` — **X-Frame-Options ist gültig**
    - Schweregrad: mittel
    - Prüfung: XFO ist DENY oder SAMEORIGIN, wenn vorhanden.
10. `security_headers.xcto_nosniff` — **X-Content-Type-Options nosniff**
    - Schweregrad: niedrig
    - Prüfung: nosniff verhindert Content-Type-Raten.
11. `security_headers.referrer_policy` — **Referrer-Policy vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Referrer-Policy ist gesetzt.
12. `security_headers.permissions_policy` — **Permissions-Policy vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Browser-Funktionen sind eingeschränkt.
13. `security_headers.no_x_powered_by` — **X-Powered-By nicht sichtbar**
    - Schweregrad: niedrig
    - Prüfung: Technologie-Leaks werden vermieden.
14. `security_headers.server_no_version` — **Server-Header ohne exakte Version**
    - Schweregrad: niedrig
    - Prüfung: Server-Versionsnummern werden nicht verraten.
15. `security_headers.content_type_present` — **Content-Type vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Antwort enthält Content-Type.
16. `security_headers.cache_control_present` — **Cache-Control vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Caching ist per Header geregelt.

## E-Mail-Sicherheit (16)

01. `email_security.spf_checked` — **SPF wurde geprüft**
    - Schweregrad: niedrig
    - Prüfung: Auswertung aus DNS-Befunden und sichtbaren Kontaktkanälen.
02. `email_security.spf_not_missing` — **SPF fehlt nicht**
    - Schweregrad: mittel
    - Prüfung: Auswertung aus DNS-Befunden und sichtbaren Kontaktkanälen.
03. `email_security.spf_no_plus_all` — **SPF nutzt nicht +all**
    - Schweregrad: mittel
    - Prüfung: Auswertung aus DNS-Befunden und sichtbaren Kontaktkanälen.
04. `email_security.spf_no_neutral` — **SPF nutzt nicht ?all**
    - Schweregrad: mittel
    - Prüfung: Auswertung aus DNS-Befunden und sichtbaren Kontaktkanälen.
05. `email_security.dmarc_checked` — **DMARC wurde geprüft**
    - Schweregrad: niedrig
    - Prüfung: Auswertung aus DNS-Befunden und sichtbaren Kontaktkanälen.
06. `email_security.dmarc_not_missing` — **DMARC fehlt nicht**
    - Schweregrad: mittel
    - Prüfung: Auswertung aus DNS-Befunden und sichtbaren Kontaktkanälen.
07. `email_security.dmarc_policy_active` — **DMARC ist nicht nur p=none**
    - Schweregrad: mittel
    - Prüfung: Auswertung aus DNS-Befunden und sichtbaren Kontaktkanälen.
08. `email_security.dkim_checked` — **DKIM wurde geprüft**
    - Schweregrad: niedrig
    - Prüfung: Auswertung aus DNS-Befunden und sichtbaren Kontaktkanälen.
09. `email_security.dkim_not_missing` — **DKIM fehlt nicht**
    - Schweregrad: mittel
    - Prüfung: Auswertung aus DNS-Befunden und sichtbaren Kontaktkanälen.
10. `email_security.mta_sts_checked` — **MTA-STS wurde geprüft**
    - Schweregrad: niedrig
    - Prüfung: Auswertung aus DNS-Befunden und sichtbaren Kontaktkanälen.
11. `email_security.tls_rpt_checked` — **TLS-RPT wurde geprüft**
    - Schweregrad: niedrig
    - Prüfung: Auswertung aus DNS-Befunden und sichtbaren Kontaktkanälen.
12. `email_security.bimi_checked` — **BIMI wurde geprüft**
    - Schweregrad: niedrig
    - Prüfung: Auswertung aus DNS-Befunden und sichtbaren Kontaktkanälen.
13. `email_security.mx_checked` — **MX/Mailserver wurde geprüft**
    - Schweregrad: niedrig
    - Prüfung: Auswertung aus DNS-Befunden und sichtbaren Kontaktkanälen.
14. `email_security.no_dns_error` — **DNS-Prüfung ohne Fehler**
    - Schweregrad: mittel
    - Prüfung: Auswertung aus DNS-Befunden und sichtbaren Kontaktkanälen.
15. `email_security.email_visible` — **Geschäftliche E-Mail oder Kontaktkanal sichtbar**
    - Schweregrad: niedrig
    - Prüfung: Auswertung aus DNS-Befunden und sichtbaren Kontaktkanälen.
16. `email_security.mailto_no_public_many` — **Nicht zu viele Mailto-Adressen sichtbar**
    - Schweregrad: niedrig
    - Prüfung: Auswertung aus DNS-Befunden und sichtbaren Kontaktkanälen.

## SEO & Sichtbarkeit (16)

01. `seo_visibility.title_present` — **Seitentitel vorhanden**
    - Schweregrad: mittel
    - Prüfung: title-Element existiert und ist aussagekräftig.
02. `seo_visibility.title_length` — **Seitentitel nicht zu lang**
    - Schweregrad: niedrig
    - Prüfung: Titel bleibt in Suchergebnissen lesbar.
03. `seo_visibility.description_present` — **Meta-Description vorhanden**
    - Schweregrad: mittel
    - Prüfung: Meta-Description ist gesetzt.
04. `seo_visibility.description_length` — **Meta-Description sinnvoll lang**
    - Schweregrad: niedrig
    - Prüfung: Description ist nicht deutlich zu lang.
05. `seo_visibility.h1_present` — **H1 vorhanden**
    - Schweregrad: mittel
    - Prüfung: Eine Hauptüberschrift ist vorhanden.
06. `seo_visibility.h1_single` — **Nur eine H1**
    - Schweregrad: niedrig
    - Prüfung: Die Seite hat eine klare Hauptüberschrift.
07. `seo_visibility.viewport_present` — **Mobile Viewport gesetzt**
    - Schweregrad: mittel
    - Prüfung: Mobile Darstellung ist technisch vorbereitet.
08. `seo_visibility.canonical_present` — **Canonical-Link vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Canonical-Signal ist gesetzt.
09. `seo_visibility.no_noindex` — **Keine noindex-Meta-Anweisung**
    - Schweregrad: hoch
    - Prüfung: Die Seite sperrt Suchmaschinen nicht per noindex aus.
10. `seo_visibility.sitemap_signal` — **Sitemap-Signal vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Sitemap-Link oder sitemap.xml wird erwähnt.
11. `seo_visibility.og_title` — **OpenGraph-Title vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Social Sharing hat einen Titel.
12. `seo_visibility.og_description` — **OpenGraph-Description vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Social Sharing hat eine Beschreibung.
13. `seo_visibility.og_image` — **OpenGraph-Bild vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Social Sharing hat ein Bild.
14. `seo_visibility.schema_present` — **Strukturierte Daten vorhanden**
    - Schweregrad: niedrig
    - Prüfung: JSON-LD oder Microdata sind vorhanden.
15. `seo_visibility.alt_ratio` — **Bilder haben überwiegend Alt-Texte**
    - Schweregrad: mittel
    - Prüfung: Mindestens 80 Prozent der Bilder haben Alt-Attribut.
16. `seo_visibility.favicon_present` — **Favicon vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Favicon ist verlinkt.

## Performance & Speed (16)

01. `performance.response_under_2s` — **Serverantwort unter 2 Sekunden**
    - Schweregrad: mittel
    - Prüfung: Gemessene Antwortzeit liegt unter 2 Sekunden.
02. `performance.response_under_5s` — **Serverantwort unter 5 Sekunden**
    - Schweregrad: hoch
    - Prüfung: Gemessene Antwortzeit liegt unter 5 Sekunden.
03. `performance.html_under_1mb` — **HTML kleiner als 1 MB**
    - Schweregrad: mittel
    - Prüfung: HTML-Dokument ist nicht übermäßig groß.
04. `performance.html_under_500kb` — **HTML kleiner als 500 KB**
    - Schweregrad: niedrig
    - Prüfung: HTML-Dokument bleibt schlank.
05. `performance.scripts_limited` — **Script-Anzahl begrenzt**
    - Schweregrad: niedrig
    - Prüfung: Weniger als 35 Script-Dateien sind eingebunden.
06. `performance.styles_limited` — **Stylesheet-Anzahl begrenzt**
    - Schweregrad: niedrig
    - Prüfung: Weniger als 15 Stylesheets sind eingebunden.
07. `performance.third_party_limited` — **Drittanbieter-Ressourcen begrenzt**
    - Schweregrad: niedrig
    - Prüfung: Weniger als 25 externe Ressourcen sind eingebunden.
08. `performance.lazy_images` — **Bilder nutzen Lazy Loading**
    - Schweregrad: niedrig
    - Prüfung: Bei mehreren Bildern ist Lazy Loading sichtbar.
09. `performance.defer_or_async_scripts` — **Scripts nutzen defer/async**
    - Schweregrad: niedrig
    - Prüfung: Mehrere externe Scripts sind nicht komplett render-blockierend.
10. `performance.preconnect_or_dns_prefetch` — **Preconnect/DNS-Prefetch genutzt**
    - Schweregrad: niedrig
    - Prüfung: Drittanbieter können vorab verbunden werden.
11. `performance.preload_critical` — **Preload-Signal vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Kritische Ressourcen können vorgeladen werden.
12. `performance.no_autoplay_video` — **Keine Autoplay-Videos**
    - Schweregrad: niedrig
    - Prüfung: Autoplay-Videos belasten Ladezeit/Nutzererlebnis nicht.
13. `performance.compression_header` — **Komprimierung erkennbar**
    - Schweregrad: niedrig
    - Prüfung: Content-Encoding nutzt gzip/br/zstd oder ist nicht ausgewiesen.
14. `performance.cache_control_static` — **Caching per Header geregelt**
    - Schweregrad: niedrig
    - Prüfung: Cache-Control ist vorhanden.
15. `performance.pagespeed_no_bad_finding` — **Keine kritischen PageSpeed-Befunde**
    - Schweregrad: mittel
    - Prüfung: Vorhandene PageSpeed-Findings enthalten keine kritischen Probleme.
16. `performance.image_count_reasonable` — **Bildanzahl angemessen**
    - Schweregrad: niedrig
    - Prüfung: Weniger als 80 Bilder auf der Einstiegsseite.

## Barrierefreiheit (16)

01. `accessibility.html_lang` — **HTML-Sprache gesetzt**
    - Schweregrad: mittel
    - Prüfung: html lang ist vorhanden.
02. `accessibility.image_alt_ratio` — **Bilder haben Alt-Texte**
    - Schweregrad: mittel
    - Prüfung: Mindestens 80 Prozent der Bilder haben Alt-Attribut.
03. `accessibility.form_labels` — **Formularfelder haben Labels**
    - Schweregrad: mittel
    - Prüfung: Inputs/Textareas/Selects haben Label, aria-label oder placeholder.
04. `accessibility.button_text` — **Buttons haben zugänglichen Text**
    - Schweregrad: mittel
    - Prüfung: Buttons enthalten Text oder aria-label.
05. `accessibility.link_text` — **Links haben Text**
    - Schweregrad: niedrig
    - Prüfung: Links sind nicht leer.
06. `accessibility.h1_present` — **H1 für Screenreader vorhanden**
    - Schweregrad: mittel
    - Prüfung: Eine H1-Hauptüberschrift existiert.
07. `accessibility.heading_order` — **Überschriften-Hierarchie ohne grobe Sprünge**
    - Schweregrad: niedrig
    - Prüfung: H1-H6-Struktur springt nicht stark.
08. `accessibility.landmarks` — **Semantische Landmarken vorhanden**
    - Schweregrad: niedrig
    - Prüfung: main/header/nav/footer/section/article sind sichtbar.
09. `accessibility.skip_link` — **Skip-Link vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Ein Skip-Link erleichtert Tastaturbedienung.
10. `accessibility.viewport_zoom_allowed` — **Viewport blockiert Zoom nicht**
    - Schweregrad: mittel
    - Prüfung: user-scalable=no oder maximum-scale=1 wird nicht genutzt.
11. `accessibility.required_fields_marked` — **Pflichtfelder erkennbar**
    - Schweregrad: niedrig
    - Prüfung: required-Felder haben Pflichtfeld-/ARIA-Hinweis.
12. `accessibility.iframe_titles` — **iframes haben Titel**
    - Schweregrad: niedrig
    - Prüfung: iframes besitzen title-Attribut.
13. `accessibility.no_empty_headings` — **Keine leeren Überschriften**
    - Schweregrad: mittel
    - Prüfung: H1-H6 sind nicht leer.
14. `accessibility.aria_hidden_focus` — **Keine fokussierbaren Elemente in aria-hidden**
    - Schweregrad: mittel
    - Prüfung: aria-hidden-Bereiche enthalten keine Links/Buttons/Inputs.
15. `accessibility.accessible_tables` — **Tabellen haben Kopfzellen oder Caption**
    - Schweregrad: niedrig
    - Prüfung: Tabellen besitzen th oder caption.
16. `accessibility.bfsg_statement_signal` — **Barrierefreiheits-/Accessibility-Hinweis**
    - Schweregrad: niedrig
    - Prüfung: Hinweis auf Barrierefreiheit oder Accessibility ist vorhanden.

## Vertrauen & Qualität (16)

01. `trust_quality.phone_visible` — **Telefonnummer sichtbar**
    - Schweregrad: niedrig
    - Prüfung: Telefon oder tel-Link ist vorhanden.
02. `trust_quality.email_visible` — **E-Mail sichtbar**
    - Schweregrad: niedrig
    - Prüfung: E-Mail-Adresse oder mailto-Link ist vorhanden.
03. `trust_quality.address_visible` — **Adresse sichtbar**
    - Schweregrad: niedrig
    - Prüfung: PLZ/Straße/Standortsignal ist vorhanden.
04. `trust_quality.contact_link` — **Kontaktseite erreichbar**
    - Schweregrad: niedrig
    - Prüfung: Kontakt-Link ist vorhanden.
05. `trust_quality.about_team_signal` — **Team-/Über-uns-Signal vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Team, Über uns, Inhaber oder Ansprechpartner ist sichtbar.
06. `trust_quality.opening_hours` — **Öffnungszeiten vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Öffnungszeiten oder Wochentage sind sichtbar.
07. `trust_quality.reviews_signal` — **Bewertungen/Kundenstimmen vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Bewertung, Rezension oder Kundenstimme ist sichtbar.
08. `trust_quality.social_links` — **Social-/Profil-Links vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Social-, Karten- oder Bewertungsprofil ist verlinkt.
09. `trust_quality.legal_trust` — **Impressum und Datenschutz stärken Vertrauen**
    - Schweregrad: mittel
    - Prüfung: Beide Pflichtlinks sind sichtbar.
10. `trust_quality.secure_forms` — **Formulare nutzen HTTPS oder relative Ziele**
    - Schweregrad: hoch
    - Prüfung: Formulare senden nicht an http://.
11. `trust_quality.no_placeholder_content` — **Keine Platzhaltertexte sichtbar**
    - Schweregrad: mittel
    - Prüfung: Lorem Ipsum, Musterstadt oder Platzhalter sind nicht sichtbar.
12. `trust_quality.no_dead_hash_links_many` — **Nicht zu viele leere Hash-Links**
    - Schweregrad: niedrig
    - Prüfung: Weniger als 5 Links zeigen nur auf #.
13. `trust_quality.no_error_text` — **Keine sichtbaren Fehlertexte**
    - Schweregrad: mittel
    - Prüfung: 404, Error, Exception oder Stack Trace sind nicht sichtbar.
14. `trust_quality.business_schema` — **Unternehmensschema vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Organization/LocalBusiness/ProfessionalService ist erkennbar.
15. `trust_quality.navigation_present` — **Navigation vorhanden**
    - Schweregrad: niedrig
    - Prüfung: nav-Element oder Navigationslinks sind vorhanden.
16. `trust_quality.footer_present` — **Footer vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Seitenfuß ist vorhanden.

## Cookie-Analyse (16)

01. `cookies_tracking.consent_banner_signal` — **Cookie-Banner-Signal vorhanden**
    - Schweregrad: mittel
    - Prüfung: Cookie/Consent/Einwilligung wird erwähnt.
02. `cookies_tracking.reject_option` — **Ablehnen-Option vorhanden**
    - Schweregrad: mittel
    - Prüfung: Ablehnen/Reject/Decline ist sichtbar.
03. `cookies_tracking.settings_option` — **Cookie-Einstellungen vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Cookie-Einstellungen/Details sind erreichbar.
04. `cookies_tracking.privacy_link` — **Datenschutzlink im Cookie-Kontext**
    - Schweregrad: niedrig
    - Prüfung: Datenschutz/Privacy ist im Cookie-Kontext vorhanden.
05. `cookies_tracking.no_google_analytics_raw` — **Kein Google Analytics ohne Kontext**
    - Schweregrad: mittel
    - Prüfung: GA/gtag/analytics wird nicht roh eingebunden oder Consent ist vorhanden.
06. `cookies_tracking.no_google_tag_manager_raw` — **Kein Google Tag Manager ohne Kontext**
    - Schweregrad: mittel
    - Prüfung: GTM ist nicht ohne Consent-Kontext sichtbar.
07. `cookies_tracking.no_meta_pixel_raw` — **Kein Meta Pixel ohne Kontext**
    - Schweregrad: mittel
    - Prüfung: Meta Pixel ist nicht ohne Consent-Kontext sichtbar.
08. `cookies_tracking.no_hotjar_raw` — **Kein Hotjar ohne Kontext**
    - Schweregrad: niedrig
    - Prüfung: Hotjar ist nicht ohne Consent-Kontext sichtbar.
09. `cookies_tracking.no_tiktok_raw` — **Kein TikTok Pixel ohne Kontext**
    - Schweregrad: mittel
    - Prüfung: TikTok Pixel ist nicht ohne Consent-Kontext sichtbar.
10. `cookies_tracking.no_linkedin_raw` — **Kein LinkedIn Insight ohne Kontext**
    - Schweregrad: niedrig
    - Prüfung: LinkedIn Tracking ist nicht ohne Consent-Kontext sichtbar.
11. `cookies_tracking.no_adservices_raw` — **Keine Adservices ohne Kontext**
    - Schweregrad: mittel
    - Prüfung: Google Ads/Doubleclick ist nicht ohne Consent-Kontext sichtbar.
12. `cookies_tracking.cookie_secure_flag` — **Cookies mit Secure-Flag**
    - Schweregrad: mittel
    - Prüfung: Set-Cookie nutzt Secure oder es werden keine Cookies gesetzt.
13. `cookies_tracking.cookie_samesite_flag` — **Cookies mit SameSite**
    - Schweregrad: niedrig
    - Prüfung: Set-Cookie nutzt SameSite oder es werden keine Cookies gesetzt.
14. `cookies_tracking.third_party_cookie_sources_limited` — **Drittanbieter-Scriptquellen begrenzt**
    - Schweregrad: niedrig
    - Prüfung: Weniger als 10 externe Tracking-/Scriptquellen.
15. `cookies_tracking.live_cookie_module_result` — **Live-Cookie-Modul hat Ergebnis**
    - Schweregrad: niedrig
    - Prüfung: Intensiv-Live-Analyse oder Cookie-Modul liefert ein Finding/Hinweis.
16. `cookies_tracking.no_cookie_wall_text` — **Keine harte Cookie-Wall erkennbar**
    - Schweregrad: niedrig
    - Prüfung: Nutzung wird nicht sichtbar vollständig an Zustimmung gekoppelt.

## Malware & Blacklist (16)

01. `malware_blacklist.no_eval_base64` — **Keine eval/base64-Verschleierung**
    - Schweregrad: hoch
    - Prüfung: eval(atob/base64) wird nicht gefunden.
02. `malware_blacklist.no_hidden_iframe` — **Keine versteckten iframes**
    - Schweregrad: hoch
    - Prüfung: iframes sind nicht offensichtlich versteckt.
03. `malware_blacklist.no_pharma_spam` — **Keine Pharma-Spam-Signale**
    - Schweregrad: hoch
    - Prüfung: Viagra/Casino/Spam-Signale sind nicht sichtbar.
04. `malware_blacklist.no_hacked_text` — **Kein Hacked-by-Hinweis**
    - Schweregrad: hoch
    - Prüfung: Hacked by/defaced wird nicht sichtbar.
05. `malware_blacklist.no_crypto_miner` — **Kein Crypto-Miner-Script**
    - Schweregrad: hoch
    - Prüfung: Coinhive/CryptoNight/Miner-Signaturen fehlen.
06. `malware_blacklist.no_suspicious_redirect` — **Keine verdächtigen Redirect-Scripts**
    - Schweregrad: mittel
    - Prüfung: document.location/window.location zu fremden Zielen ist nicht auffällig.
07. `malware_blacklist.no_blacklist_text` — **Kein sichtbarer Blacklist-Warntext**
    - Schweregrad: hoch
    - Prüfung: Malware/Phishing/Blacklist-Warntexte sind nicht sichtbar.
08. `malware_blacklist.no_executable_downloads` — **Keine ausführbaren Downloads verlinkt**
    - Schweregrad: mittel
    - Prüfung: EXE/MSI/APK-Dateien sind nicht direkt verlinkt.
09. `malware_blacklist.no_warez_terms` — **Keine Warez-/Crack-Begriffe**
    - Schweregrad: mittel
    - Prüfung: Crack/Warez/Keygen-Signale fehlen.
10. `malware_blacklist.no_suspicious_tld_scripts` — **Keine Scriptquellen aus Risiko-TLDs**
    - Schweregrad: niedrig
    - Prüfung: Scripts aus typischen Risiko-TLDs werden nicht gefunden.
11. `malware_blacklist.safe_browsing_result` — **Safe-Browsing-Modul hat Ergebnis**
    - Schweregrad: niedrig
    - Prüfung: Malware-Modul liefert OK, Warnung oder transparenten Hinweis.
12. `malware_blacklist.blacklist_result` — **Blacklist-Modul hat Ergebnis**
    - Schweregrad: niedrig
    - Prüfung: Blacklist-/DNSBL-Modul liefert OK, Warnung oder Hinweis.
13. `malware_blacklist.no_php_malware_pattern` — **Keine PHP-Malware-Muster im HTML**
    - Schweregrad: hoch
    - Prüfung: eval(base64_decode) und ähnliche Muster fehlen.
14. `malware_blacklist.no_inline_external_loader` — **Keine verdächtigen externen Loader**
    - Schweregrad: mittel
    - Prüfung: document.write externer Scripts ist nicht sichtbar.
15. `malware_blacklist.no_suspicious_popups` — **Keine aggressiven Popup-Signale**
    - Schweregrad: niedrig
    - Prüfung: window.open/onclick-Popup-Ketten sind nicht auffällig.
16. `malware_blacklist.no_unknown_encoded_payloads` — **Keine auffällig langen kodierten Payloads**
    - Schweregrad: mittel
    - Prüfung: Sehr lange Base64-artige Strings sind nicht sichtbar.

## Google Business & lokale Sichtbarkeit (16)

01. `google_business.maps_signal` — **Google-Maps-/Standortsignal vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Maps-Link, Embed oder Maps-API ist sichtbar.
02. `google_business.localbusiness_schema` — **LocalBusiness-Schema vorhanden**
    - Schweregrad: niedrig
    - Prüfung: LocalBusiness/ProfessionalService/PostalAddress ist sichtbar.
03. `google_business.address_text` — **Adresse als Text erkennbar**
    - Schweregrad: niedrig
    - Prüfung: PLZ, Straße oder Standortangaben sind sichtbar.
04. `google_business.phone_nap` — **Telefon als NAP-Signal**
    - Schweregrad: niedrig
    - Prüfung: Telefonnummer oder tel-Link ist vorhanden.
05. `google_business.opening_hours` — **Öffnungszeiten als Local-Signal**
    - Schweregrad: niedrig
    - Prüfung: Öffnungszeiten oder Wochentage sind sichtbar.
06. `google_business.reviews` — **Bewertungen/Rezensionen sichtbar**
    - Schweregrad: niedrig
    - Prüfung: Review-/Bewertungs-Signale sind vorhanden.
07. `google_business.route_signal` — **Anfahrt/Route vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Anfahrt, Route oder Standortseite ist sichtbar.
08. `google_business.city_signal` — **Ortsbezug vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Deutsche Orts-/Regionalbegriffe sind sichtbar.
09. `google_business.service_category_signal` — **Branchen-/Leistungsbegriffe sichtbar**
    - Schweregrad: niedrig
    - Prüfung: Gewerk/Branche/Leistung ist erkennbar.
10. `google_business.geo_coordinates` — **Geo-Koordinaten-Signal vorhanden**
    - Schweregrad: niedrig
    - Prüfung: latitude/longitude/geo ist im Markup sichtbar.
11. `google_business.sameas_profiles` — **sameAs/Profile-Signale vorhanden**
    - Schweregrad: niedrig
    - Prüfung: sameAs oder Profile sind in strukturierten Daten sichtbar.
12. `google_business.contact_page_local` — **Kontaktseite stärkt Local-Signal**
    - Schweregrad: niedrig
    - Prüfung: Kontakt/Standort/Anfahrt-Link ist vorhanden.
13. `google_business.no_google_plus` — **Keine veraltete Google+-Einbindung**
    - Schweregrad: niedrig
    - Prüfung: plus.google.com wird nicht verwendet.
14. `google_business.no_empty_map_embed` — **Keine leere Maps-Embed-URL**
    - Schweregrad: niedrig
    - Prüfung: Maps-Embed ist nicht offensichtlich leer.
15. `google_business.brand_signal` — **Unternehmensname/Branding erkennbar**
    - Schweregrad: niedrig
    - Prüfung: Brand, Praxis, Kanzlei, Agentur, Meisterbetrieb o.ä. ist sichtbar.
16. `google_business.local_landing_context` — **Lokaler Landingpage-Kontext vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Ort plus Leistung werden gemeinsam erkennbar.

## Datenleck & Datenschutz (16)

01. `breach_privacy.email_count_limited` — **Nicht zu viele E-Mail-Adressen sichtbar**
    - Schweregrad: niedrig
    - Prüfung: Maximal fünf E-Mail-Adressen stehen offen im HTML.
02. `breach_privacy.no_api_keys` — **Keine API-Key-Muster sichtbar**
    - Schweregrad: hoch
    - Prüfung: api_key/secret/token-Muster liegen nicht im Frontend.
03. `breach_privacy.no_jwt` — **Keine JWT-Tokens sichtbar**
    - Schweregrad: hoch
    - Prüfung: JWT-ähnliche Tokens werden nicht ausgeliefert.
04. `breach_privacy.no_private_ip` — **Keine internen IP-Adressen sichtbar**
    - Schweregrad: mittel
    - Prüfung: Private IP-Adressen sind nicht im HTML sichtbar.
05. `breach_privacy.no_password_value` — **Keine Passwortwerte im HTML**
    - Schweregrad: hoch
    - Prüfung: Password-Felder enthalten keinen value-Wert.
06. `breach_privacy.no_debug_stack` — **Keine Debug-/Stack-Ausgaben sichtbar**
    - Schweregrad: mittel
    - Prüfung: Stack Trace, var_dump, console.log sind nicht sichtbar.
07. `breach_privacy.no_env_vars` — **Keine ENV-Variablen sichtbar**
    - Schweregrad: hoch
    - Prüfung: SUPABASE/STRIPE/SECRET/KEY ENV-Namen sind nicht sichtbar.
08. `breach_privacy.no_source_maps` — **Keine Source-Maps öffentlich verlinkt**
    - Schweregrad: niedrig
    - Prüfung: map-Dateien sind nicht im HTML verlinkt.
09. `breach_privacy.no_internal_hostnames` — **Keine internen Hostnamen sichtbar**
    - Schweregrad: mittel
    - Prüfung: localhost, internal, staging Secrets sind nicht sichtbar.
10. `breach_privacy.no_iban_context` — **Keine IBAN/Bankdaten-Muster sichtbar**
    - Schweregrad: niedrig
    - Prüfung: IBAN-Muster oder Bankdaten stehen nicht unnötig im Frontend.
11. `breach_privacy.no_personal_id` — **Keine Ausweis-/Steuernummer-Muster sichtbar**
    - Schweregrad: hoch
    - Prüfung: Persönliche Nummern sind nicht sichtbar.
12. `breach_privacy.no_firebase_key_pattern` — **Keine Firebase-Key-Muster sichtbar**
    - Schweregrad: mittel
    - Prüfung: Firebase-Konfiguration/API-Key-Muster sind nicht sichtbar.
13. `breach_privacy.no_sentry_dsn_public` — **Keine Sentry-DSN im HTML**
    - Schweregrad: niedrig
    - Prüfung: Sentry DSN/Monitoring-DSN wird nicht offen ausgeliefert.
14. `breach_privacy.hibp_result` — **Datenleck-Modul hat Ergebnis**
    - Schweregrad: niedrig
    - Prüfung: HIBP/Darknet-Modul liefert Ergebnis oder transparenten Hinweis.
15. `breach_privacy.no_comment_secrets` — **Keine Secrets in HTML-Kommentaren**
    - Schweregrad: hoch
    - Prüfung: Kommentare enthalten keine password/token/secret Hinweise.
16. `breach_privacy.no_basic_auth_url` — **Keine Basic-Auth-URLs sichtbar**
    - Schweregrad: hoch
    - Prüfung: URLs mit user:pass@host werden nicht verlinkt.

## CMS & technische Sicherheit (16)

01. `cms_technical.no_wp_admin` — **Keine wp-admin Links sichtbar**
    - Schweregrad: niedrig
    - Prüfung: Technische Risiko-Signatur wird im HTML/Ressourcen geprüft.
02. `cms_technical.no_xmlrpc` — **Keine XML-RPC Hinweise sichtbar**
    - Schweregrad: niedrig
    - Prüfung: Technische Risiko-Signatur wird im HTML/Ressourcen geprüft.
03. `cms_technical.no_wp_users` — **Keine WordPress REST-User Links**
    - Schweregrad: mittel
    - Prüfung: Technische Risiko-Signatur wird im HTML/Ressourcen geprüft.
04. `cms_technical.no_git` — **Keine .git Hinweise sichtbar**
    - Schweregrad: hoch
    - Prüfung: Technische Risiko-Signatur wird im HTML/Ressourcen geprüft.
05. `cms_technical.no_env` — **Keine .env Hinweise sichtbar**
    - Schweregrad: hoch
    - Prüfung: Technische Risiko-Signatur wird im HTML/Ressourcen geprüft.
06. `cms_technical.no_backups` — **Keine Backup-Dateien verlinkt**
    - Schweregrad: hoch
    - Prüfung: Technische Risiko-Signatur wird im HTML/Ressourcen geprüft.
07. `cms_technical.no_phpinfo` — **Keine phpinfo-Hinweise sichtbar**
    - Schweregrad: hoch
    - Prüfung: Technische Risiko-Signatur wird im HTML/Ressourcen geprüft.
08. `cms_technical.no_composer` — **Keine Composer-Dateien verlinkt**
    - Schweregrad: hoch
    - Prüfung: Technische Risiko-Signatur wird im HTML/Ressourcen geprüft.
09. `cms_technical.no_lockfiles` — **Keine Lockfiles verlinkt**
    - Schweregrad: mittel
    - Prüfung: Technische Risiko-Signatur wird im HTML/Ressourcen geprüft.
10. `cms_technical.no_phpmyadmin` — **Keine phpMyAdmin/Adminer Links**
    - Schweregrad: hoch
    - Prüfung: Technische Risiko-Signatur wird im HTML/Ressourcen geprüft.
11. `cms_technical.no_debugbar` — **Keine Debug-Bar sichtbar**
    - Schweregrad: mittel
    - Prüfung: Technische Risiko-Signatur wird im HTML/Ressourcen geprüft.
12. `cms_technical.no_generator_version` — **Keine exakte Generator-Version**
    - Schweregrad: niedrig
    - Prüfung: Technische Risiko-Signatur wird im HTML/Ressourcen geprüft.
13. `cms_technical.no_old_jquery` — **Keine veralteten jQuery-1.x/2.x Hinweise**
    - Schweregrad: mittel
    - Prüfung: Technische Risiko-Signatur wird im HTML/Ressourcen geprüft.
14. `cms_technical.no_angularjs_1` — **Keine AngularJS-1.x Hinweise**
    - Schweregrad: mittel
    - Prüfung: Technische Risiko-Signatur wird im HTML/Ressourcen geprüft.
15. `cms_technical.no_flash` — **Keine Flash-/SWF-Einbettung**
    - Schweregrad: hoch
    - Prüfung: Technische Risiko-Signatur wird im HTML/Ressourcen geprüft.
16. `cms_technical.no_ftp_links` — **Keine FTP-Links**
    - Schweregrad: mittel
    - Prüfung: Technische Risiko-Signatur wird im HTML/Ressourcen geprüft.

## KI-Sichtbarkeit (16)

01. `ai_visibility.schema_present` — **Schema.org/JSON-LD vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Strukturierte Daten helfen Antwortmaschinen.
02. `ai_visibility.organization_schema` — **Organisation/LocalBusiness-Schema-Signal**
    - Schweregrad: niedrig
    - Prüfung: Organisation, LocalBusiness oder PostalAddress ist sichtbar.
03. `ai_visibility.faq_signal` — **FAQ-Signal vorhanden**
    - Schweregrad: niedrig
    - Prüfung: FAQPage, FAQ oder häufige Fragen sind sichtbar.
04. `ai_visibility.service_signal` — **Leistungs-/Service-Signal vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Services, Leistungen oder Angebote sind sichtbar.
05. `ai_visibility.contact_machine_readable` — **Kontaktinformationen maschinenlesbar**
    - Schweregrad: niedrig
    - Prüfung: telephone/email/PostalAddress/mailto/tel sind sichtbar.
06. `ai_visibility.rating_signal` — **Bewertungs-/Rating-Signal vorhanden**
    - Schweregrad: niedrig
    - Prüfung: AggregateRating/Review/Bewertungen sind sichtbar.
07. `ai_visibility.expert_signal` — **Autor-/Experten-Signal vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Autor, Inhaber, Meister, Experte oder Team ist sichtbar.
08. `ai_visibility.questions_signal` — **Fragen/Antworten im Content**
    - Schweregrad: niedrig
    - Prüfung: Fragezeichen oder typische W-Fragen sind sichtbar.
09. `ai_visibility.industry_terms` — **Branchen-/Leistungsbegriffe sichtbar**
    - Schweregrad: niedrig
    - Prüfung: Leistungen/Branche sind im Text erkennbar.
10. `ai_visibility.local_terms` — **Ortsbezug für lokale KI-Antworten**
    - Schweregrad: niedrig
    - Prüfung: Stadt-/Regionssignale sind sichtbar.
11. `ai_visibility.no_noindex` — **Keine noindex-Blockade**
    - Schweregrad: hoch
    - Prüfung: Crawler werden nicht per noindex ausgesperrt.
12. `ai_visibility.semantic_main` — **Semantische Hauptbereiche vorhanden**
    - Schweregrad: niedrig
    - Prüfung: main/article/section ist vorhanden.
13. `ai_visibility.lang_for_llm` — **Seitensprache für LLMs gesetzt**
    - Schweregrad: niedrig
    - Prüfung: html lang ist vorhanden.
14. `ai_visibility.og_context` — **OpenGraph-Kontext vorhanden**
    - Schweregrad: niedrig
    - Prüfung: og:title oder og:description ist vorhanden.
15. `ai_visibility.canonical_context` — **Canonical-Kontext vorhanden**
    - Schweregrad: niedrig
    - Prüfung: Canonical-Link ist vorhanden.
16. `ai_visibility.clear_headings` — **Klare Überschriftenstruktur für Antwortmaschinen**
    - Schweregrad: niedrig
    - Prüfung: H1 und mindestens eine H2 sind vorhanden.

