{
  "produkt": "Website-Check Scherzinger",
  "analyse_id": "8df40737-1c3a-4d21-8087-1f079e6a4755",
  "url": "https://www.hg-fluegel.de/",
  "erstellt": "2026-10-18T17:57:33.013098+00:00",
  "gesamtscore": 99,
  "datenabdeckung": 0.948,
  "kategorien": {
    "geo": {
      "note": "",
      "grade": "sehr gut",
      "label": "KI-Bereitschaft (GEO)",
      "score": 97,
      "capped": false,
      "failed": 6,
      "passed": 34,
      "status": "heuristic",
      "category": "geo",
      "checks_total": 52,
      "checks_evaluated": 40
    },
    "local": {
      "note": "",
      "grade": "gut",
      "label": "Lokale Sichtbarkeit",
      "score": 89,
      "capped": false,
      "failed": 2,
      "passed": 10,
      "status": "heuristic",
      "category": "local",
      "checks_total": 13,
      "checks_evaluated": 12
    },
    "onpage": {
      "note": "",
      "grade": "sehr gut",
      "label": "Inhalte & Onpage",
      "score": 100,
      "capped": false,
      "failed": 3,
      "passed": 41,
      "status": "heuristic",
      "category": "onpage",
      "checks_total": 44,
      "checks_evaluated": 44
    },
    "search": {
      "note": "Keine Daten.",
      "grade": "n/a",
      "label": "Google-Suchleistung",
      "score": null,
      "capped": false,
      "failed": 0,
      "passed": 0,
      "status": "unavailable",
      "category": "search",
      "checks_total": 0,
      "checks_evaluated": 0
    },
    "security": {
      "note": "",
      "grade": "sehr gut",
      "label": "Sicherheit",
      "score": 94,
      "capped": false,
      "failed": 3,
      "passed": 31,
      "status": "heuristic",
      "category": "security",
      "checks_total": 39,
      "checks_evaluated": 34
    },
    "marketing": {
      "note": "",
      "grade": "kritisch",
      "label": "Marketing & Tracking",
      "score": 38,
      "capped": false,
      "failed": 2,
      "passed": 2,
      "status": "measured",
      "category": "marketing",
      "checks_total": 17,
      "checks_evaluated": 4
    },
    "technical": {
      "note": "",
      "grade": "sehr gut",
      "label": "Technisches SEO",
      "score": 100,
      "capped": false,
      "failed": 2,
      "passed": 53,
      "status": "heuristic",
      "category": "technical",
      "checks_total": 60,
      "checks_evaluated": 55
    },
    "conversion": {
      "note": "",
      "grade": "sehr gut",
      "label": "Kundenfreundlichkeit",
      "score": 100,
      "capped": false,
      "failed": 0,
      "passed": 35,
      "status": "heuristic",
      "category": "conversion",
      "checks_total": 40,
      "checks_evaluated": 35
    },
    "performance": {
      "note": "",
      "grade": "sehr gut",
      "label": "Ladegeschwindigkeit",
      "score": 97,
      "capped": false,
      "failed": 2,
      "passed": 37,
      "status": "heuristic",
      "category": "performance",
      "checks_total": 43,
      "checks_evaluated": 39
    },
    "accessibility": {
      "note": "",
      "grade": "sehr gut",
      "label": "Barrierefreiheit",
      "score": 100,
      "capped": false,
      "failed": 2,
      "passed": 32,
      "status": "heuristic",
      "category": "accessibility",
      "checks_total": 39,
      "checks_evaluated": 34
    }
  },
  "zusammenfassung": {
    "notes": [],
    "home_ms": 39,
    "problems": 18,
    "sitemaps": [
      {
        "url": "https://www.hg-fluegel.de/sitemap.xml",
        "urls": 158,
        "index": false,
        "status": 200
      }
    ],
    "final_url": "https://www.hg-fluegel.de/",
    "redirects": [],
    "crawl_limit": 25,
    "home_status": 200,
    "links_total": 1378,
    "checks_total": 338,
    "pages_failed": 0,
    "sitemap_urls": 158,
    "crawl_limited": true,
    "pages_crawled": 25,
    "robots_status": 200,
    "checks_katalog": 343,
    "links_internal": 1269,
    "checks_bewertet": 300,
    "external_checked": 11,
    "blocked_by_robots": 0
  },
  "befunde": [
    {
      "code": "onpage.placeholder_text",
      "kategorie": "onpage",
      "titel": "Kein Platzhalter- oder Beispieltext auf den Seiten",
      "bestanden": true,
      "schwere": "high",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.title_present",
      "kategorie": "onpage",
      "titel": "Alle Seiten haben einen Title",
      "bestanden": true,
      "schwere": "high",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.noindex_pages",
      "kategorie": "technical",
      "titel": "1 Unterseite ist auf „noindex“ gestellt",
      "bestanden": false,
      "schwere": "high",
      "datenstatus": "measured",
      "beschreibung": "Diese Seiten werden von Google nicht in den Suchergebnissen angezeigt. Das ist bei Impressum, Datenschutz oder Danke-Seiten gewollt, bei Leistungs- und Infoseiten nicht.",
      "ursache": "",
      "loesung": "Prüfen Sie jede Seite: Soll sie gefunden werden, entfernen Sie noindex im meta-robots-Tag bzw. im SEO-Plugin.",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/aktuelles/"
      ],
      "belege": [
        "https://www.hg-fluegel.de/aktuelles/: meta robots = noindex, follow"
      ],
      "prioritaet": 1
    },
    {
      "code": "tech.robots_search_bots",
      "kategorie": "technical",
      "titel": "robots.txt lässt Googlebot und Bingbot alle eigenen Seiten zu",
      "bestanden": true,
      "schwere": "high",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.staging_references",
      "kategorie": "technical",
      "titel": "Keine Verweise auf Vorschau- oder Testadressen",
      "bestanden": true,
      "schwere": "high",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.viewport",
      "kategorie": "technical",
      "titel": "Alle Seiten haben ein Viewport-Meta-Tag",
      "bestanden": true,
      "schwere": "high",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.aria_hidden_focus",
      "kategorie": "accessibility",
      "titel": "1 versteckte(r) Bereich(e) mit bedienbaren Elementen",
      "bestanden": false,
      "schwere": "medium",
      "datenstatus": "heuristic",
      "beschreibung": "Mit aria-hidden=\"true\" ausgeblendete Bereiche enthalten Links/Buttons, die per Tastatur trotzdem erreichbar sind: Nutzer landen auf einem Element, das der Screenreader nicht kennt.",
      "ursache": "",
      "loesung": "Zusätzlich tabindex=\"-1\" bzw. das Attribut inert setzen oder aria-hidden entfernen.",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/galerie/"
      ],
      "belege": [
        "<button class=\"lb-close\" type=\"button\">Schließen</button>"
      ],
      "prioritaet": 7
    },
    {
      "code": "geo.citable_facts",
      "kategorie": "geo",
      "titel": "Zitierfähige Fakten: 1 von 4 Arten gefunden",
      "bestanden": false,
      "schwere": "medium",
      "datenstatus": "heuristic",
      "beschreibung": "Gefunden: Preise. Konkrete Zahlen, Preise und Zeiten werden von KI-Systemen bevorzugt übernommen (heuristische Textsuche).",
      "ursache": "",
      "loesung": "Konkrete Fakten ergänzen: Preise \"ab … €\", Jahre Erfahrung, Öffnungszeiten, Einzugsgebiet.",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": 3
    },
    {
      "code": "geo.schema_refs",
      "kategorie": "geo",
      "titel": "488 von 490 @id-Verweisen führen zu einem Knoten",
      "bestanden": false,
      "schwere": "medium",
      "datenstatus": "measured",
      "beschreibung": "Diese Verweise zeigen auf Knoten, die nirgends definiert sind: https://www.hg-fluegel.de/aktuelles/3d-druck-ersatzteile/#webpage, https://www.hg-fluegel.de/aktuelles/weinlese-heppenheim/#webpage. Ein Verweis ins Leere hilft keiner Maschine.",
      "ursache": "",
      "loesung": "Den fehlenden Knoten (z. B. die Organisation) mit genau dieser @id im Graphen ergänzen oder den Verweis entfernen.",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/aktuelles/"
      ],
      "belege": [
        "https://www.hg-fluegel.de/aktuelles/3d-druck-ersatzteile/#webpage",
        "https://www.hg-fluegel.de/aktuelles/weinlese-heppenheim/#webpage"
      ],
      "prioritaet": 8
    },
    {
      "code": "local.hours_visible",
      "kategorie": "local",
      "titel": "Öffnungszeiten nicht gefunden",
      "bestanden": false,
      "schwere": "medium",
      "datenstatus": "heuristic",
      "beschreibung": "Im sichtbaren Text sind keine Öffnungs- oder Erreichbarkeitszeiten erkennbar (heuristische Suche).",
      "ursache": "",
      "loesung": "Öffnungszeiten bzw. Erreichbarkeit als Text im Footer oder auf der Kontaktseite nennen.",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": 4
    },
    {
      "code": "onpage.description_present",
      "kategorie": "onpage",
      "titel": "Alle Seiten haben eine Meta-Description",
      "bestanden": true,
      "schwere": "medium",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.duplicate_content",
      "kategorie": "onpage",
      "titel": "Kein doppelter Inhalt zwischen den Seiten gefunden",
      "bestanden": true,
      "schwere": "medium",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.img_alt",
      "kategorie": "onpage",
      "titel": "Alle Bilder haben ein alt-Attribut",
      "bestanden": true,
      "schwere": "medium",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.inbound_links",
      "kategorie": "onpage",
      "titel": "Jede gecrawlte Seite ist intern verlinkt",
      "bestanden": true,
      "schwere": "medium",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.thin_content",
      "kategorie": "onpage",
      "titel": "1 Seite hat dünnen Inhalt (unter 300 Wörter) (Stichprobe: begrenzter Crawl)",
      "bestanden": false,
      "schwere": "medium",
      "datenstatus": "heuristic",
      "beschreibung": "Sehr kurze Seiten liefern Google wenig Anlass, sie für eine Suche zu ranken. Impressum, Datenschutz und Kontakt sind ausgenommen.",
      "ursache": "",
      "loesung": "Ergänzen Sie hilfreichen Text: Leistungen, Ablauf, Preise/Beispiele, häufige Fragen. Qualität vor Länge, Füllwörter helfen nicht.",
      "aufwand": "high",
      "nutzen": "high",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/aktuelles/"
      ],
      "belege": [
        "https://www.hg-fluegel.de/aktuelles/: 115 Wörter"
      ],
      "prioritaet": 2
    },
    {
      "code": "onpage.title_duplicate",
      "kategorie": "onpage",
      "titel": "Alle Titles sind einzigartig",
      "bestanden": true,
      "schwere": "medium",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.alt_host_tls",
      "kategorie": "security",
      "titel": "Die zweite Adressvariante (mit/ohne www) zeigt eine Zertifikatswarnung",
      "bestanden": false,
      "schwere": "medium",
      "datenstatus": "measured",
      "beschreibung": "Wer die Adresse mit bzw. ohne „www“ eintippt, bekommt vom Browser eine Sicherheitswarnung, noch bevor eine Weiterleitung greift.",
      "ursache": "Das Zertifikat gilt nicht für diese Adressvariante.",
      "loesung": "Beim Hoster beide Varianten (mit und ohne www) als Domain eintragen, damit beide ein Zertifikat bekommen.",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [
        "https://hg-fluegel.de/"
      ],
      "belege": [
        "[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1032)"
      ],
      "prioritaet": 5
    },
    {
      "code": "sec.mail.dmarc",
      "kategorie": "security",
      "titel": "Kein DMARC-Eintrag für hg-fluegel.de",
      "bestanden": false,
      "schwere": "medium",
      "datenstatus": "measured",
      "beschreibung": "Ohne DMARC-Eintrag entscheidet jeder Empfänger selbst, ob eine Mail im Namen Ihrer Domain echt ist; Sie erfahren auch nicht, wenn jemand Ihren Namen missbraucht.",
      "ursache": "",
      "loesung": "TXT-Eintrag auf _dmarc.<Domain> setzen, zum Start: v=DMARC1; p=none; rua=mailto:dmarc@<Domain> – später auf p=quarantine bzw. p=reject schärfen.",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": 6
    },
    {
      "code": "tech.canonical_conflicts",
      "kategorie": "technical",
      "titel": "Canonical-Tags sind widerspruchsfrei",
      "bestanden": true,
      "schwere": "medium",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.canonical_present",
      "kategorie": "technical",
      "titel": "Alle Seiten haben ein Canonical-Tag",
      "bestanden": true,
      "schwere": "medium",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.js_dependency",
      "kategorie": "technical",
      "titel": "Die Startseite enthält ihren Text bereits im HTML",
      "bestanden": true,
      "schwere": "medium",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "high",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.nofollow_internal",
      "kategorie": "technical",
      "titel": "Keine eigene Seite und kein interner Link ist auf nofollow gestellt",
      "bestanden": true,
      "schwere": "medium",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.redirect_chains",
      "kategorie": "technical",
      "titel": "Keine mehrstufigen Weiterleitungsketten",
      "bestanden": true,
      "schwere": "medium",
      "datenstatus": "measured",
      "beschreibung": "Jede zusätzliche Weiterleitung kostet Ladezeit und Crawl-Budget; Google folgt langen Ketten nicht zuverlässig.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.robots_assets",
      "kategorie": "technical",
      "titel": "robots.txt lässt Stylesheets und Skripte für Google zu",
      "bestanden": true,
      "schwere": "medium",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.sitemap_bad_urls",
      "kategorie": "technical",
      "titel": "Alle gecrawlten Sitemap-URLs sind direkt abrufbar",
      "bestanden": true,
      "schwere": "medium",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.sitemap_noindex",
      "kategorie": "technical",
      "titel": "Alle geprüften Sitemap-Seiten sind indexierbar und kanonisch",
      "bestanden": true,
      "schwere": "medium",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.soft_404_pages",
      "kategorie": "technical",
      "titel": "Keine Seite meldet „nicht gefunden“ mit Status 200",
      "bestanden": true,
      "schwere": "medium",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.lh.label-content-name-mismatch",
      "kategorie": "accessibility",
      "titel": "Elemente mit sichtbarem Textlabel haben keine passenden barrierefreien Namen.",
      "bestanden": false,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "Von Lighthouse (axe-core) gemeldet; betrifft 2 Element(e) auf der Startseite.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": 12
    },
    {
      "code": "a11y.link_identical",
      "kategorie": "accessibility",
      "titel": "1 Linktext(e) führen zu verschiedenen Zielen",
      "bestanden": false,
      "schwere": "low",
      "datenstatus": "heuristic",
      "beschreibung": "Derselbe Linktext (z. B. „Mehr erfahren“) führt auf einer Seite zu mindestens drei verschiedenen Zielen. Wer Links als Liste vorgelesen bekommt oder per Tastatur springt, kann sie nicht unterscheiden (WCAG 2.4.4 / 2.4.9). Heuristik: Karten mit zugehöriger Überschrift können im Einzelfall genügen.",
      "ursache": "",
      "loesung": "Linktexte eindeutig machen („Mehr zur Heizungswartung“) oder den Zweck per aria-label ergänzen.",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/ratgeber/"
      ],
      "belege": [
        "„antwort lesen“ führt zu 11 verschiedenen Zielen"
      ],
      "prioritaet": 15
    },
    {
      "code": "geo.answer_pages",
      "kategorie": "geo",
      "titel": "11 von 12 Seiten beginnen mit einer zitierfähigen Antwort",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "heuristic",
      "beschreibung": "Auf diesen Seiten steht oben kein Absatz (15–90 Wörter) mit Festlegung oder Zahl, den eine Antwortmaschine zitieren könnte. Heuristische Einschätzung.",
      "ursache": "",
      "loesung": "Jede Seite mit einem Absatz beginnen, der die Frage der Überschrift in zwei bis drei Sätzen beantwortet – mit einer Zahl oder klaren Festlegung.",
      "aufwand": "medium",
      "nutzen": "high",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/galerie/"
      ],
      "belege": [
        "/galerie/"
      ],
      "prioritaet": null
    },
    {
      "code": "geo.sameas_count",
      "kategorie": "geo",
      "titel": "sameAs verweist auf 2 Profil(e)",
      "bestanden": false,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "Mit nur ein bis zwei Profilen in sameAs können Maschinen die Firma schwerer wiedererkennen.",
      "ursache": "",
      "loesung": "Google-Unternehmensprofil, Branchenverzeichnisse und aktive Social-Media-Profile in sameAs aufnehmen.",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [
        "https://www.google.com/maps/place/Haus+und+Geb%C3%A4ude+Service+Fl%C3%BCgel/@49.6191649,8.8291828,17z/",
        "https://www.11880.com/branchenbuch/grasellenbach/060692243B113692209/hausmeisterservice-fluegel.html"
      ],
      "prioritaet": 16
    },
    {
      "code": "geo.structured_content",
      "kategorie": "geo",
      "titel": "10 von 11 langen Seiten sind gegliedert",
      "bestanden": false,
      "schwere": "low",
      "datenstatus": "heuristic",
      "beschreibung": "Lange Seiten ohne Liste oder Tabelle: Antwortmaschinen übernehmen strukturierte Blöcke deutlich häufiger als Fließtext.",
      "ursache": "",
      "loesung": "Vergleiche als Tabelle, Abläufe als nummerierte Liste, Eigenschaften als Aufzählung darstellen.",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/galerie/"
      ],
      "belege": [],
      "prioritaet": 18
    },
    {
      "code": "mkt.analytics",
      "kategorie": "marketing",
      "titel": "Keine Webanalyse im Seitencode erkennbar",
      "bestanden": false,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "Im HTML wurde keine Besucher-Auswertung (z. B. GA4, Matomo, Plausible) gefunden. Ohne Messung ist nicht erkennbar, welche Seiten Anfragen bringen. Eine serverseitige Auswertung oder ein bewusster Verzicht aus Datenschutzgründen ist von außen nicht sichtbar – dann ist dieser Hinweis gegenstandslos.",
      "ursache": "",
      "loesung": "Eine datensparsame Webanalyse (z. B. Plausible, Matomo oder GA4 mit Einwilligung) einrichten und Anfragen als Ziel messen.",
      "aufwand": "medium",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": 9
    },
    {
      "code": "mkt.social",
      "kategorie": "marketing",
      "titel": "Social-Media-Profile verlinkt: 0",
      "bestanden": false,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "Es wurden keine Links zu Social-Media-Profilen gefunden (Instagram, Facebook, LinkedIn, TikTok, YouTube, Xing). Das ist nur sinnvoll, wenn Sie dort aktiv sind.",
      "ursache": "",
      "loesung": "Aktive Profile im Footer sichtbar verlinken (und im Schema per sameAs).",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": 14
    },
    {
      "code": "onpage.anchor_text",
      "kategorie": "onpage",
      "titel": "Linktexte sind aussagekräftig",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.content_pages",
      "kategorie": "onpage",
      "titel": "Die Website hat 28 inhaltliche Seiten",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "high",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.description_duplicate",
      "kategorie": "onpage",
      "titel": "Alle Descriptions sind einzigartig",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.description_length",
      "kategorie": "onpage",
      "titel": "Alle Descriptions haben eine gute Länge (70–160 Zeichen)",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.h1",
      "kategorie": "onpage",
      "titel": "Jede Seite hat genau eine H1-Überschrift",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.heading_hierarchy",
      "kategorie": "onpage",
      "titel": "Die Überschriften-Hierarchie ist durchgängig",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.inbound_min",
      "kategorie": "onpage",
      "titel": "Jede Unterseite wird von mindestens zwei anderen Seiten verlinkt",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.keyword_density",
      "kategorie": "onpage",
      "titel": "1 Seite wiederholt ein Wort übermäßig oft (Stichprobe: begrenzter Crawl)",
      "bestanden": false,
      "schwere": "low",
      "datenstatus": "heuristic",
      "beschreibung": "Macht ein einzelnes Wort mehr als jedes zwanzigste Wort des Textes aus, liest er sich wie für Suchmaschinen geschrieben und wird auch so bewertet.",
      "ursache": "",
      "loesung": "Ersetzen Sie Wiederholungen durch Synonyme, Pronomen und konkrete Beschreibungen.",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/galerie/"
      ],
      "belege": [
        "https://www.hg-fluegel.de/galerie/: „nachher“ 13 %"
      ],
      "prioritaet": 17
    },
    {
      "code": "onpage.keyword_overlap",
      "kategorie": "onpage",
      "titel": "Jede Seite besetzt einen eigenen Hauptbegriff",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.knowledge_content",
      "kategorie": "onpage",
      "titel": "Es gibt Wissensinhalte (13 Ratgeber-/Blogseiten)",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "high",
      "nutzen": "high",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/ratgeber/gartengeraete-ruhezeiten/",
        "https://www.hg-fluegel.de/ratgeber/gartenpflege-kosten/",
        "https://www.hg-fluegel.de/ratgeber/gebaeudereinigung-kosten/",
        "https://www.hg-fluegel.de/ratgeber/grabpflege-kosten/",
        "https://www.hg-fluegel.de/ratgeber/hausmeisterservice-hausverwaltung/",
        "https://www.hg-fluegel.de/ratgeber/heckenschnitt-schonzeit/",
        "https://www.hg-fluegel.de/ratgeber/richtangebot-preis/",
        "https://www.hg-fluegel.de/ratgeber/steinreinigung-kosten/",
        "https://www.hg-fluegel.de/ratgeber/treppenhausreinigung-haeufigkeit/",
        "https://www.hg-fluegel.de/ratgeber/winterdienst-kosten/"
      ],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.open_graph",
      "kategorie": "onpage",
      "titel": "Open-Graph-Angaben der Startseite sind vollständig",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.own_text_share",
      "kategorie": "onpage",
      "titel": "Der größte Teil jeder Seite ist eigener Inhalt",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "high",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.subheadings",
      "kategorie": "onpage",
      "titel": "Lange Texte sind durch Zwischenüberschriften gegliedert",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.template_pages",
      "kategorie": "onpage",
      "titel": "Seiten gleicher Art sind einzeln geschrieben",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "high",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [
        "/leistungen/: 5 Seiten, im Schnitt 35 % gleiche Wörter",
        "/ratgeber/: 7 Seiten, im Schnitt 26 % gleiche Wörter"
      ],
      "prioritaet": null
    },
    {
      "code": "onpage.title_h1_match",
      "kategorie": "onpage",
      "titel": "Title-Begriffe tauchen in H1 und Text auf",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.title_length",
      "kategorie": "onpage",
      "titel": "Alle Titles haben eine gute Länge (30–60 Zeichen)",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.title_pattern",
      "kategorie": "onpage",
      "titel": "Die Titles folgen nicht alle demselben Schema",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.title_stuffing",
      "kategorie": "onpage",
      "titel": "Kein Wort wird im Title gestapelt",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.topic_areas",
      "kategorie": "onpage",
      "titel": "Die Website ist in 3 Themenbereiche gegliedert",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "high",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [
        "/ratgeber/ (11 Seiten)",
        "/leistungen/ (5 Seiten)",
        "/aktuelles/ (2 Seiten)"
      ],
      "prioritaet": null
    },
    {
      "code": "onpage.topic_overview",
      "kategorie": "onpage",
      "titel": "Jeder Themenbereich hat eine Übersichtsseite",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.cache_ttl",
      "kategorie": "performance",
      "titel": "Statische Dateien werden lange zwischengespeichert",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "Bilder, Skripte und Styles bleiben lange im Browser-Cache; Folgebesuche laden schnell.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.dom_size",
      "kategorie": "performance",
      "titel": "Die Seite hat wenige Elemente",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "Die gerenderte Startseite besteht aus 565 Elementen (gut: bis 1.500). Ein großer Aufbau verlangsamt Darstellung und Bedienung, besonders auf älteren Handys.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.hero_priority",
      "kategorie": "performance",
      "titel": "Das erste Bild der Startseite wird nicht bevorzugt geladen",
      "bestanden": false,
      "schwere": "low",
      "datenstatus": "heuristic",
      "beschreibung": "Der Browser erfährt nicht, dass das erste große Bild wichtig ist, und lädt es nicht mit Vorrang. Das verschiebt den sichtbaren Aufbau der Seite (LCP). (Schätzung: erstes Inhaltsbild.)",
      "ursache": "",
      "loesung": "fetchpriority=\"high\" an das erste große Bild setzen oder es per <link rel=\"preload\" as=\"image\"> vorladen.",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/"
      ],
      "belege": [],
      "prioritaet": 11
    },
    {
      "code": "perf.image_delivery",
      "kategorie": "performance",
      "titel": "Bilder könnten 365 KB kleiner ausgeliefert werden",
      "bestanden": false,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "Lighthouse schätzt, dass sich 365 KB an Bilddaten sparen ließen (moderne Formate wie WebP/AVIF, Größe passend zur Darstellung, stärkere Kompression). Das verkürzt besonders mobil die Ladezeit.",
      "ursache": "",
      "loesung": "Bilder als WebP/AVIF ausliefern, in der dargestellten Größe (srcset) bereitstellen und komprimieren.",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [
        "div.paar-bilder > figure > picture > img",
        "div.paar-bilder > figure > picture > img",
        "div.paar-bilder > figure > picture > img"
      ],
      "prioritaet": 10
    },
    {
      "code": "perf.savings",
      "kategorie": "performance",
      "titel": "Keine großen Ladezeit-Einsparungen offen",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "Lighthouse findet keine Einzelmaßnahme mit nennenswertem Zeitgewinn.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [
        "Nicht verwendetes CSS reduzieren: 0 ms",
        "CSS verkleinern (minimieren): 0 ms"
      ],
      "prioritaet": null
    },
    {
      "code": "sec.cookies",
      "kategorie": "security",
      "titel": "1 Cookie(s) ohne volle Schutz-Attribute",
      "bestanden": false,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "Cookies ohne Secure, HttpOnly oder SameSite lassen sich leichter abgreifen bzw. seitenübergreifend missbrauchen – betroffen sind Sitzungs-/Login-Cookies.",
      "ursache": "",
      "loesung": "Beim Setzen des Cookies Secure; HttpOnly; SameSite=Lax ergänzen. Django: SESSION_COOKIE_SECURE = True, CSRF_COOKIE_SECURE = True, SESSION_COOKIE_HTTPONLY = True, SESSION_COOKIE_SAMESITE = 'Lax'.",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/"
      ],
      "belege": [
        "csrftoken: HttpOnly fehlt"
      ],
      "prioritaet": 13
    },
    {
      "code": "tech.canonical_absolute",
      "kategorie": "technical",
      "titel": "Canonical-Tags sind absolute URLs",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.charset",
      "kategorie": "technical",
      "titel": "Der Zeichensatz ist deklariert",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.favicon",
      "kategorie": "technical",
      "titel": "Favicon und Handy-Symbol sind im HTML eingetragen",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.html_lang",
      "kategorie": "technical",
      "titel": "Alle Seiten geben ihre Sprache an (html lang)",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.html_valid",
      "kategorie": "technical",
      "titel": "Der HTML-Aufbau der Seiten ist sauber",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.internal_link_redirects",
      "kategorie": "technical",
      "titel": "Interne Links führen direkt zur Zielseite",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.link_variants",
      "kategorie": "technical",
      "titel": "Jede Seite wird immer unter derselben Adresse verlinkt",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.not_found_page",
      "kategorie": "technical",
      "titel": "Die 404-Seite ist gestaltet und führt weiter",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.parameter_urls",
      "kategorie": "technical",
      "titel": "Keine indexierbaren Parameter-Adressen",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.redirect_temporary",
      "kategorie": "technical",
      "titel": "Interne Weiterleitungen sind dauerhaft (301/308)",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.robots_sitemap_ref",
      "kategorie": "technical",
      "titel": "robots.txt verweist auf die Sitemap",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [
        "Sitemap: https://www.hg-fluegel.de/sitemap.xml"
      ],
      "prioritaet": null
    },
    {
      "code": "tech.sitemap_coverage",
      "kategorie": "technical",
      "titel": "Alle gecrawlten Seiten stehen in der Sitemap",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.sitemap_size",
      "kategorie": "technical",
      "titel": "Keine Sitemap-Datei ist überfüllt (unter 50.000 URLs)",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.url_structure",
      "kategorie": "technical",
      "titel": "Die URLs sind sauber und lesbar",
      "bestanden": true,
      "schwere": "low",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.accessible_names_aria",
      "kategorie": "accessibility",
      "titel": "Bedienelemente mit ARIA-Rolle haben Namen",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "Lighthouse hat dies nicht ausgewertet (nicht anwendbar, nicht geliefert oder ältere Messung).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.alt_quality",
      "kategorie": "accessibility",
      "titel": "Alt-Texte beschreiben die Bilder",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Keine Alt-Texte, die nur aus Dateinamen oder Platzhalterwörtern bestehen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.aria_required_parts",
      "kategorie": "accessibility",
      "titel": "ARIA-Rollen haben ihre Pflichtteile",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "ARIA-Rollen sind vollständig aufgebaut (Pflichtattribute, Kind- und Elternelemente).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.aria_valid",
      "kategorie": "accessibility",
      "titel": "ARIA-Angaben sind in sich stimmig",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Alle ARIA-Verweise und -Rollen sind stimmig.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.autocomplete",
      "kategorie": "accessibility",
      "titel": "Persönliche Felder tragen autocomplete",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Alle erkannten persönlichen Felder haben autocomplete.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.autoplay",
      "kategorie": "accessibility",
      "titel": "Kein automatisch startendes Video mit Ton",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Kein Autoplay-Video mit Ton gefunden.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.button_names",
      "kategorie": "accessibility",
      "titel": "Buttons haben einen Namen",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Alle geprüften Buttons haben Text oder ARIA-Namen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.color_contrast",
      "kategorie": "accessibility",
      "titel": "Texte haben ausreichenden Farbkontrast",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Lighthouse (axe-core) findet auf der Startseite keine Texte mit zu geringem Kontrast.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.dup_ids",
      "kategorie": "accessibility",
      "titel": "IDs sind eindeutig",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Keine doppelten IDs gefunden.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.empty_headings",
      "kategorie": "accessibility",
      "titel": "Keine leeren Überschriften",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Keine leere Überschrift gefunden.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.fake_controls",
      "kategorie": "accessibility",
      "titel": "Bedienelemente sind echte Buttons und Links",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Keine Schein-Buttons (div/span mit onclick) gefunden.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.focus_visible",
      "kategorie": "accessibility",
      "titel": "Keine entfernte Fokus-Umrandung erkannt",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Im Inline-CSS wurde keine entfernte Fokus-Umrandung erkannt (externe CSS-Dateien nicht geprüft).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.form_labels",
      "kategorie": "accessibility",
      "titel": "Formularfelder sind beschriftet",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Alle geprüften Eingabefelder haben ein Label oder einen ARIA-Namen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.headings",
      "kategorie": "accessibility",
      "titel": "Überschriftenstruktur ist durchgängig",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Jede geprüfte Seite hat eine H1 und keine übersprungenen Ebenen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.iframe_title",
      "kategorie": "accessibility",
      "titel": "Eingebettete Frames haben einen Titel",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Alle iframes haben einen Titel.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.img_alt",
      "kategorie": "accessibility",
      "titel": "Alle Bilder haben ein Alt-Attribut",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Alle geprüften <img>-Tags haben ein alt-Attribut (die Qualität der Texte ist damit nicht bewertet).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.landmarks",
      "kategorie": "accessibility",
      "titel": "Hauptbereich (<main>) vorhanden",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "<main> ist vorhanden.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.lang",
      "kategorie": "accessibility",
      "titel": "Seitensprache ist angegeben",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Das lang-Attribut ist gesetzt.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.lang_valid",
      "kategorie": "accessibility",
      "titel": "Sprachcode ist gültig aufgebaut",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Alle lang-Angaben sind gültig aufgebaut.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.lighthouse.score",
      "kategorie": "accessibility",
      "titel": "Lighthouse-Barrierefreiheit: 100/100",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Google Lighthouse (axe-core) bewertet die Startseite mobil mit 100 von 100 Punkten. Darin enthalten ist u. a. die Prüfung der Farbkontraste (Audit „color-contrast“), die wir nicht selbst nachrechnen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "high",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/"
      ],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.link_distinguishable",
      "kategorie": "accessibility",
      "titel": "Links im Fließtext sind nicht nur an der Farbe erkennbar",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Links im Fließtext unterscheiden sich auch ohne Farbe (z. B. Unterstreichung).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.link_names",
      "kategorie": "accessibility",
      "titel": "Links haben einen Namen",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Alle geprüften Links haben einen Namen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.lists",
      "kategorie": "accessibility",
      "titel": "Listen sind korrekt aufgebaut",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Listen bestehen aus <ul>/<ol> mit direkten <li>-Kindern.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.main_single",
      "kategorie": "accessibility",
      "titel": "Jede Seite hat höchstens einen Hauptbereich",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Keine Seite hat mehrere Hauptbereiche.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.manual_note",
      "kategorie": "accessibility",
      "titel": "Hinweis: Automatische Prüfung ersetzt keine manuelle WCAG-Prüfung",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Automatisierte Prüfungen ersetzen keine vollständige manuelle WCAG-Prüfung.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.meta_refresh",
      "kategorie": "accessibility",
      "titel": "Keine automatische Neuladung",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Kein verzögerter Meta-Refresh gefunden.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.nav_landmark",
      "kategorie": "accessibility",
      "titel": "Navigation als <nav> ausgezeichnet",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "<nav> ist vorhanden.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.object_alt",
      "kategorie": "accessibility",
      "titel": "Eingebettete Objekte haben einen Ersatztext",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "Nicht anwendbar: auf den abgerufenen Seiten gibt es nichts, was diese Prüfung betrifft.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.skip_link",
      "kategorie": "accessibility",
      "titel": "Sprunglink „Zum Inhalt“ vorhanden",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Ein Sprunglink am Seitenanfang erlaubt Tastatur-Nutzern, das Menü zu überspringen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.tabindex",
      "kategorie": "accessibility",
      "titel": "Kein positiver tabindex",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Kein positiver tabindex vorhanden.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.table_headers",
      "kategorie": "accessibility",
      "titel": "Tabellen haben Kopfzellen",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Keine Tabelle ohne Kopfzellen gefunden.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.target_size",
      "kategorie": "accessibility",
      "titel": "Tippflächen sind groß genug",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Bedienelemente haben ausreichend große Tippflächen (mindestens 24 × 24 Pixel).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.th_data_cells",
      "kategorie": "accessibility",
      "titel": "Tabellenköpfe passen zu ihren Datenzellen",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Kopfzellen haben Datenzellen, headers-Verweise stimmen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.title",
      "kategorie": "accessibility",
      "titel": "Seitentitel vorhanden",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Alle Seiten haben einen Titel.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.video_captions",
      "kategorie": "accessibility",
      "titel": "Videos mit Ton haben Untertitel",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "Nicht anwendbar: auf den abgerufenen Seiten gibt es nichts, was diese Prüfung betrifft.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "a11y.zoom",
      "kategorie": "accessibility",
      "titel": "Zoomen ist erlaubt",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Der Viewport erlaubt Zoomen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.accessibility_statement",
      "kategorie": "conversion",
      "titel": "Erklärung zur Barrierefreiheit nicht einschlägig (kein Onlineshop erkannt)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "Das Barrierefreiheitsstärkungsgesetz (BFSG) betrifft vor allem Onlineshops und Dienste für Verbraucher; Kleinstunternehmen sind ausgenommen. Bei dieser Website wurde kein Shop erkannt.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.click_to_call",
      "kategorie": "conversion",
      "titel": "Telefon per Fingertipp wählbar (tel:-Link) ja",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Die Nummer ist als tel:-Link hinterlegt – auf dem Handy genügt ein Tipp.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [
        "+491608168007",
        "+491608168007"
      ],
      "prioritaet": null
    },
    {
      "code": "conv.contact_form",
      "kategorie": "conversion",
      "titel": "Kontaktformular vorhanden",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Ein Formular mit E-Mail-/Nachrichtenfeld wurde gefunden (nicht abgesendet).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.contact_in_nav",
      "kategorie": "conversion",
      "titel": "Kontakt in der Navigation ja",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Im Kopfbereich gibt es einen Kontakt-/Anfrage-Link.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [
        "Preise",
        "Kontakt"
      ],
      "prioritaet": null
    },
    {
      "code": "conv.cookies_before_consent",
      "kategorie": "conversion",
      "titel": "Erste Antwort setzt 1 Cookie(s), davon 0 Tracking-Cookie(s)",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Beim ersten Abruf der Startseite wird kein Tracking-Cookie gesetzt.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [
        "csrftoken"
      ],
      "prioritaet": null
    },
    {
      "code": "conv.copyright_year",
      "kategorie": "conversion",
      "titel": "Urheberrechtsangabe nennt 2026",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Das Jahr im Fußbereich ist aktuell.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.early_cta",
      "kategorie": "conversion",
      "titel": "Handlungsaufforderung früh sichtbar",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Im oberen Viertel der Seite gibt es einen Button/Link mit klarer Aufforderung (heuristisch aus dem Quelltext).",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [
        "Kontakt",
        "Richtangebot"
      ],
      "prioritaet": null
    },
    {
      "code": "conv.email",
      "kategorie": "conversion",
      "titel": "E-Mail-Adresse vorhanden",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "mailto:-Link vorhanden.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [
        "info@hg-fluegel.de",
        "info@hg-fluegel.de"
      ],
      "prioritaet": null
    },
    {
      "code": "conv.email_domain",
      "kategorie": "conversion",
      "titel": "E-Mail-Adresse auf eigener Domain",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Alle gefundenen Adressen gehören zur eigenen Domain.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.embeds_consent",
      "kategorie": "conversion",
      "titel": "Einbettungen nicht einschlägig (keine Videos oder Karten gefunden)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.form_inputs",
      "kategorie": "conversion",
      "titel": "Formularfelder: 11 von 11 Angaben passend",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "E-Mail-, Telefon- und Namensfelder haben den passenden Typ und autocomplete.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.form_length",
      "kategorie": "conversion",
      "titel": "Formularlänge: bis zu 3 Pflichtfelder",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Die Zahl der Pflichtfelder ist überschaubar.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.form_privacy",
      "kategorie": "conversion",
      "titel": "Datenschutzhinweis an 3 von 3 Formularen",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Am Formular steht ein Hinweis auf Datenschutz bzw. Einwilligung.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.form_required",
      "kategorie": "conversion",
      "titel": "Pflichtfelder: 8 von 8 sichtbar gekennzeichnet",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Pflichtfelder sind für Besucher erkennbar (Stern oder Hinweis).",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.form_spam",
      "kategorie": "conversion",
      "titel": "Spamschutz an 3 von 3 Formularen erkennbar",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Honigtopf-Feld oder Captcha erkannt.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.google_fonts",
      "kategorie": "conversion",
      "titel": "Google-Schriften werden nicht von fremden Servern geladen",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Es werden keine Schriften von fonts.googleapis.com oder fonts.gstatic.com geladen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.imprint",
      "kategorie": "conversion",
      "titel": "Impressum-Link vorhanden",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Impressum ist verlinkt.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [
        "/impressum/"
      ],
      "prioritaet": null
    },
    {
      "code": "conv.imprint_content",
      "kategorie": "conversion",
      "titel": "Impressum nennt 5 von 5 Grundangaben",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Name, Anschrift, E-Mail und ein zweiter Kontaktweg sind im Impressum zu finden.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/impressum/"
      ],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.imprint_register",
      "kategorie": "conversion",
      "titel": "Registerangaben nicht einschlägig (keine eingetragene Rechtsform erkannt)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "Einzelunternehmen haben kein Registergericht – hier gibt es nichts zu prüfen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.imprint_sitewide",
      "kategorie": "conversion",
      "titel": "Impressum ist auf 25 von 25 Seiten verlinkt",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Der Impressum-Link steht auf allen gecrawlten Seiten.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.legal_links_footer",
      "kategorie": "conversion",
      "titel": "Impressum und Datenschutz im Fußbereich verlinkt",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Impressum und Datenschutzerklärung stehen im Fußbereich, wo Besucher sie erwarten.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.legal_outdated",
      "kategorie": "conversion",
      "titel": "Keine überholten Rechtshinweise gefunden",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Weder alte Gesetzesverweise (TMG/RStV) noch der entfallene OS-Plattform-Hinweis wurden gefunden.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.logo_home",
      "kategorie": "conversion",
      "titel": "Logo führt überall zur Startseite",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Der Klick auf das Logo bringt Besucher zur Startseite zurück.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.messenger",
      "kategorie": "conversion",
      "titel": "WhatsApp/Messenger-Kontakt vorhanden",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Ein Chat-Link wurde gefunden.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [
        "https://wa.me/491608168007"
      ],
      "prioritaet": null
    },
    {
      "code": "conv.navigation",
      "kategorie": "conversion",
      "titel": "Navigation vorhanden",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Ein Navigationsbereich mit mindestens drei Links wurde gefunden.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.offer",
      "kategorie": "conversion",
      "titel": "Leistungen/Preise erkennbar",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Die Startseite verweist auf Leistungen oder Preise.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [
        "Leistungen und Richtpreise",
        "Festes Angebot"
      ],
      "prioritaet": null
    },
    {
      "code": "conv.page_cta",
      "kategorie": "conversion",
      "titel": "20 von 20 Inhaltsseiten führen zum Kontakt",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Jede geprüfte Unterseite bietet im Inhalt einen Weg zu Kontakt, Telefon oder Formular.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.phone_visible",
      "kategorie": "conversion",
      "titel": "Telefonnummer sichtbar",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Eine Telefonnummer ist auf der Seite zu finden.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/"
      ],
      "belege": [
        "0160 8168007"
      ],
      "prioritaet": null
    },
    {
      "code": "conv.price_info",
      "kategorie": "conversion",
      "titel": "Preise oder Preisrahmen genannt",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Preisangaben stehen auf 17 von 25 Seiten.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [
        "/",
        "/leistungen/",
        "/richtangebot/"
      ],
      "prioritaet": null
    },
    {
      "code": "conv.price_vat",
      "kategorie": "conversion",
      "titel": "10 von 10 Seiten mit Preisen nennen die Steuer",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Bei den Preisen steht, ob Umsatzsteuer enthalten ist (bzw. § 19 UStG).",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.privacy",
      "kategorie": "conversion",
      "titel": "Datenschutzerklärung-Link vorhanden",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Datenschutzerklärung ist verlinkt.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [
        "/datenschutz/"
      ],
      "prioritaet": null
    },
    {
      "code": "conv.privacy_content",
      "kategorie": "conversion",
      "titel": "Datenschutzerklärung: 6 von 6 Pflichtangaben gefunden",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Verantwortlicher, Rechtsgrundlage, Speicherdauer, Betroffenenrechte, Beschwerderecht und Hosting werden genannt.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/datenschutz/"
      ],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.privacy_sitewide",
      "kategorie": "conversion",
      "titel": "Datenschutz ist auf 25 von 25 Seiten verlinkt",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Der Datenschutz-Link steht auf allen gecrawlten Seiten.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.shop_agb",
      "kategorie": "conversion",
      "titel": "Allgemeine Geschäftsbedingungen (AGB) nicht einschlägig (kein Onlineshop erkannt)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "Es wurde kein Warenkorb oder Shop-System erkannt, daher wird die Verlinkung nicht gefordert.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.shop_widerruf",
      "kategorie": "conversion",
      "titel": "Widerrufsbelehrung nicht einschlägig (kein Onlineshop erkannt)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "Es wurde kein Warenkorb oder Shop-System erkannt, daher wird die Verlinkung nicht gefordert.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.slow_page",
      "kategorie": "conversion",
      "titel": "Mobile Ladeleistung 100/100",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Die mobile Ladeleistung steht Anfragen nicht im Weg.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.tel_format",
      "kategorie": "conversion",
      "titel": "Telefon-Links wählen die angezeigte Nummer",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Die angezeigte Telefonnummer und das Ziel des tel:-Links stimmen überein.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.tel_international",
      "kategorie": "conversion",
      "titel": "Telefonlinks mit Ländervorwahl: alle",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Alle tel:-Links tragen die Ländervorwahl.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.tel_sitewide",
      "kategorie": "conversion",
      "titel": "Telefon-Link auf 25 von 25 Seiten",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Auf jeder gecrawlten Seite steht ein anklickbarer Telefon-Link.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "conv.trust",
      "kategorie": "conversion",
      "titel": "Vertrauenselemente erkennbar",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Erkannt: Link zu Bewertungsplattform; Vertrauensbegriffe (bewertung, rezension). ",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [
        "https://www.google.com/maps/place/Haus+und+Geb%C3%A4ude+Service+Fl%C3%BCgel/@49.6191649,8.8291828,17z/",
        "https://www.google.com/maps/place/Haus+und+Geb%C3%A4ude+Service+Fl%C3%BCgel/@49.6191649,8.8291828,17z/"
      ],
      "prioritaet": null
    },
    {
      "code": "geo.ai_search_bots",
      "kategorie": "geo",
      "titel": "KI-Suchbots dürfen die Website lesen",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "OAI-SearchBot, PerplexityBot, Claude-SearchBot und ChatGPT-User sind nicht gesperrt.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.ai_training_bots",
      "kategorie": "geo",
      "titel": "KI-Trainings-Crawler: nicht gesperrt",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Training-Bots (GPTBot, CCBot, Google-Extended …) zu sperren ist eine Geschmacksfrage und beeinflusst die Sichtbarkeit in Antworten kaum. Nur zur Information.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.answer_first",
      "kategorie": "geo",
      "titel": "Einstiegsabsatz beantwortet Was/Wo",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Der erste Absatz nach der H1 ist knapp und nennt Leistung bzw. Ort. Heuristische Einschätzung.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [
        "HG Flügel Haus & Gebäudeservice aus Grasellenbach, Odenwald, ist ein Betrieb für Reinigung, Gartenpflege, Winterdienst …"
      ],
      "prioritaet": null
    },
    {
      "code": "geo.article_author",
      "kategorie": "geo",
      "titel": "9 von 9 Ratgebern nennen einen Autor",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Die Ratgeber nennen, wer sie geschrieben hat.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.article_date",
      "kategorie": "geo",
      "titel": "9 von 9 Ratgebern zeigen ein Datum",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Die Ratgeber nennen sichtbar ihr Datum.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.article_fields",
      "kategorie": "geo",
      "titel": "10 von 10 Artikeln mit Überschrift, Bild und Änderungsdatum im Schema",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Die Artikel nennen headline, image und dateModified.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.article_schema",
      "kategorie": "geo",
      "titel": "9 von 9 Ratgebern vollständig als Article ausgezeichnet",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Die Ratgeberseiten tragen Article-/BlogPosting-Schema mit Überschrift und Veröffentlichungsdatum.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.author_info",
      "kategorie": "geo",
      "titel": "Verantwortliche Personen erkennbar",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Erkannt: Person-Schema, author-Meta, Über-uns/Team-Seite.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.breadcrumb",
      "kategorie": "geo",
      "titel": "Brotkrumenpfad auf 21 von 21 Unterseiten ausgezeichnet",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "BreadcrumbList sagt Maschinen, wo eine Seite im Haus steht.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.breadcrumb_fields",
      "kategorie": "geo",
      "titel": "24 von 24 Brotkrumenpfaden mit allen Google-Feldern",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Jeder Brotkrumenpfad hat mindestens zwei Einträge mit Position, Namen und Adresse.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.event_required",
      "kategorie": "geo",
      "titel": "Veranstaltungs-Schema (Google-Pflichtangaben) nicht prüfbar (kein Event-Schema)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.faq",
      "kategorie": "geo",
      "titel": "FAQ mit Schema vorhanden",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "FAQPage-Auszeichnung gefunden – gut für direkte Antworten.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.faq_status",
      "kategorie": "geo",
      "titel": "FAQPage-Auszeichnung: Google zeigt die FAQ-Sonderdarstellung nicht mehr",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Laut Googles Dokumentation (Eintrag vom 08.05.2026, Seite mit Einträgen bis Oktober 2026) erscheint das FAQ-Rich-Result seit 07.05.2026 nicht mehr in der Google-Suche. Die Auszeichnung bleibt gültig und schadet nicht; sichtbare Fragen mit kurzen Antworten bleiben auch für KI-Antworten nützlich. Nur ein Hinweis, keine Wertung.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/richtangebot/",
        "https://www.hg-fluegel.de/ratgeber/",
        "https://www.hg-fluegel.de/leistungen/garten/",
        "https://www.hg-fluegel.de/leistungen/steinreinigung/",
        "https://www.hg-fluegel.de/leistungen/hausmeisterservice/"
      ],
      "belege": [
        "/richtangebot/",
        "/ratgeber/",
        "/leistungen/garten/"
      ],
      "prioritaet": null
    },
    {
      "code": "geo.faq_visible",
      "kategorie": "geo",
      "titel": "68 von 68 FAQ-Einträgen im Schema stehen sichtbar auf der Seite",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Jede ausgezeichnete Frage und Antwort steht auch im sichtbaren Text.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.feed",
      "kategorie": "geo",
      "titel": "Feed für neue Inhalte verlinkt",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Ein RSS-/Atom-Feed ist im Kopfbereich verlinkt.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.freshness",
      "kategorie": "geo",
      "titel": "Inhalte aktuell datiert",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Jüngstes erkennbares Datum: 17.10.2026.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.jobposting_required",
      "kategorie": "geo",
      "titel": "Stellenanzeigen-Schema (Google-Pflichtangaben) nicht prüfbar (kein JobPosting-Schema)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.llms_content",
      "kategorie": "geo",
      "titel": "llms.txt erfüllt 4 von 4 Aufbau-Merkmalen",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Die llms.txt hat Überschrift, Kurzbeschreibung, Abschnitte und verlinkte Kernseiten.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.llms_txt",
      "kategorie": "geo",
      "titel": "llms.txt vorhanden",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "llms.txt gefunden. Hinweis: Das ist kein Standard, eine Wirkung auf KI-Antworten ist nicht belegt.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [
        "# HG Flügel Haus & Gebäudeservice > Haus- und Gebäudeservice aus Grasellenbach"
      ],
      "prioritaet": null
    },
    {
      "code": "geo.logo_valid",
      "kategorie": "geo",
      "titel": "Logo im Unternehmens-Schema ist nutzbar",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Das Logo ist eine absolute https-Adresse in einem unterstützten Format und war abrufbar.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/"
      ],
      "belege": [
        "https://www.hg-fluegel.de/static/images/marke/hg-fluegel-logo.1717f3bfd1f9.png"
      ],
      "prioritaet": null
    },
    {
      "code": "geo.name_consistency",
      "kategorie": "geo",
      "titel": "Firmenname einheitlich",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Name in Schema, og:site_name und Seitentitel stimmt überein.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [
        "Schema: HG Flügel Haus & Gebäudeservice",
        "og:site_name: HG Flügel Haus & Gebäudeservice"
      ],
      "prioritaet": null
    },
    {
      "code": "geo.org_schema",
      "kategorie": "geo",
      "titel": "Unternehmens-Schema vollständig",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Gefunden: name, url, logo, sameAs, address/areaServed, telephone.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/"
      ],
      "belege": [
        "HG Flügel Haus & Gebäudeservice"
      ],
      "prioritaet": null
    },
    {
      "code": "geo.person_schema",
      "kategorie": "geo",
      "titel": "1 von 1 Autoren im Schema mit Profilbezug (url oder sameAs)",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Die ausgezeichneten Autoren nennen neben dem Namen eine Profil-Adresse (url oder sameAs).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.price_visible",
      "kategorie": "geo",
      "titel": "Sichtbarkeit der Schema-Preise nicht prüfbar (kein Angebot mit Preis)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.product_offer",
      "kategorie": "geo",
      "titel": "Produkt-Angebote nicht prüfbar (kein Product-Schema)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.product_required",
      "kategorie": "geo",
      "titel": "Produkt-Schema (Google-Pflichtangaben) nicht prüfbar (kein Product-Schema)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.question_headings",
      "kategorie": "geo",
      "titel": "10 von 12 Seiten mit Fragen als Überschrift",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Mindestens jede zweite Seite stellt Fragen, die Besucher wirklich tippen, als Überschrift.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.rating_visible",
      "kategorie": "geo",
      "titel": "Bewertungen im Schema nicht prüfbar (keine aggregateRating)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.recipe_required",
      "kategorie": "geo",
      "titel": "Rezept-Schema (Google-Pflichtangaben) nicht prüfbar (kein Recipe-Schema)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.review_snippet",
      "kategorie": "geo",
      "titel": "Bewertungs-Schema (Google-Vorgaben) nicht prüfbar (keine Review/AggregateRating)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.sameas_valid",
      "kategorie": "geo",
      "titel": "2 von 2 sameAs-Adressen sind gültige Profil-Adressen",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Alle sameAs-Einträge sind absolute https-Adressen auf fremde Profile.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [
        "https://www.google.com/maps/place/Haus+und+Geb%C3%A4ude+Service+Fl%C3%BCgel/@49.6191649,8.8291828,17z/",
        "https://www.11880.com/branchenbuch/grasellenbach/060692243B113692209/hausmeisterservice-fluegel.html"
      ],
      "prioritaet": null
    },
    {
      "code": "geo.schema_dates",
      "kategorie": "geo",
      "titel": "Datumsangaben im Schema plausibel",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "dateModified und datePublished sind stimmig.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.schema_entities",
      "kategorie": "geo",
      "titel": "JSON-LD frei von HTML-Entities",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Die Texte im JSON-LD sind sauber.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.schema_ids",
      "kategorie": "geo",
      "titel": "100 % der Schema-Knoten tragen eine @id",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Die Knoten haben stabile Kennungen (z. B. …/#organisation) und lassen sich wiedererkennen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.schema_json_pages",
      "kategorie": "geo",
      "titel": "JSON-LD der Unterseiten lesbar",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Alle JSON-LD-Blöcke der Unterseiten lassen sich lesen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.schema_linked",
      "kategorie": "geo",
      "titel": "Schema-Knoten verweisen auf 25 von 25 Seiten aufeinander",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Die Knoten sind über publisher, isPartOf, about o. ä. verknüpft.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.schema_ok",
      "kategorie": "geo",
      "titel": "Strukturierte Daten (JSON-LD) vorhanden und lesbar",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "1 JSON-LD-Block/Blöcke, Typen: HomeAndConstructionBusiness, Person, WebPage, WebSite.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [
        "HomeAndConstructionBusiness, Person, WebPage, WebSite"
      ],
      "prioritaet": null
    },
    {
      "code": "geo.schema_pages",
      "kategorie": "geo",
      "titel": "Strukturierte Daten auf 24 von 24 Unterseiten",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Jede gecrawlte Unterseite trägt strukturierte Daten.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.schema_parse_types",
      "kategorie": "geo",
      "titel": "Schema-Typen und @context sind gültig",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Alle @type-Angaben sind bekannte schema.org-Typen und jeder Block nennt schema.org als @context.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.semantic_html",
      "kategorie": "geo",
      "titel": "Semantische HTML5-Struktur: 4 von 4 Grundelementen",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Vorhanden: main, nav, header, footer.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.server_rendered",
      "kategorie": "geo",
      "titel": "Hauptinhalt im HTML: 768 Wörter",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Die Startseite enthält 768 Wörter im ausgelieferten HTML.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "high",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/"
      ],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.services",
      "kategorie": "geo",
      "titel": "Leistungen sind eindeutig erkennbar",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Service/Offer-Schema gefunden. 6 Leistungsseiten verlinkt.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [
        "https://www.hg-fluegel.de/leistungen/",
        "https://www.hg-fluegel.de/leistungen/garten/",
        "https://www.hg-fluegel.de/leistungen/hausmeisterservice/"
      ],
      "prioritaet": null
    },
    {
      "code": "geo.snippet_brake",
      "kategorie": "geo",
      "titel": "Keine Snippet-Bremse",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Weder nosnippet noch ein zu kleines max-snippet sind gesetzt.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.sources",
      "kategorie": "geo",
      "titel": "Quellenangaben in Ratgebern: 5 von 9 Artikeln",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Externe Belege (Behörden, Studien, Normen) machen Ratgeber zitierfähiger. Heuristische Stichprobe über die gecrawlten Artikel.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.video_markup_present",
      "kategorie": "geo",
      "titel": "Video-Auszeichnung nicht prüfbar (keine eingebetteten Videos)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.video_required",
      "kategorie": "geo",
      "titel": "Video-Schema (Google-Pflichtangaben) nicht prüfbar (kein VideoObject)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "geo.website_schema",
      "kategorie": "geo",
      "titel": "WebSite-Schema vorhanden",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Ein WebSite-Knoten benennt den Websitenamen eindeutig.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "local.address_structured",
      "kategorie": "local",
      "titel": "Anschrift im Schema vollständig aufgeschlüsselt",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Straße, PLZ, Ort und Land stehen getrennt im Schema.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "local.city_in_title",
      "kategorie": "local",
      "titel": "Ort \"Grasellenbach\" in Title/H1: ja",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Title: enthält den Ort; H1: ohne Ort.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [
        "Haus- & Gebäudeservice Grasellenbach, Odenwald | HG Flügel",
        "Hausmeister, Garten und Winterdienst im Odenwald"
      ],
      "prioritaet": null
    },
    {
      "code": "local.gbp_not_connected",
      "kategorie": "local",
      "titel": "Google-Unternehmensprofil nicht verbunden",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "Für eine vollständige Analyse muss das Google-Unternehmensprofil verbunden werden. Bewertungen, Kategorien, Fotos und Profilvollständigkeit sind ohne Verbindung nicht einsehbar.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "local.gbp_sameas",
      "kategorie": "local",
      "titel": "sameAs verweist auf das Google-Unternehmensprofil",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Das Schema verknüpft die Firma ausdrücklich mit ihrem Google-Profil.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [
        "https://www.google.com/maps/place/Haus+und+Geb%C3%A4ude+Service+Fl%C3%BCgel/@49.6191649,8.8291828,17z/"
      ],
      "prioritaet": null
    },
    {
      "code": "local.hours_schema",
      "kategorie": "local",
      "titel": "Öffnungszeiten im Schema maschinenlesbar",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "2 Zeitangabe(n) im Schema nutzen Wochentag und Uhrzeit im erwarteten Format.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/"
      ],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "local.maps",
      "kategorie": "local",
      "titel": "Google Maps eingebunden/verlinkt",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Kartenlink oder -einbettung gefunden.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [
        "https://www.google.com/maps/place/Haus+und+Geb%C3%A4ude+Service+Fl%C3%BCgel/@49.6191649,8.8291828,17z/"
      ],
      "prioritaet": null
    },
    {
      "code": "local.nap",
      "kategorie": "local",
      "titel": "Name, Adresse, Telefon auf der Website: 3 von 3",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Gefunden: Name, Adresse, Telefon.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/"
      ],
      "belege": [
        "64689 Grasellenbach"
      ],
      "prioritaet": null
    },
    {
      "code": "local.nap_consistency",
      "kategorie": "local",
      "titel": "Kontaktdaten in Schema und Text stimmen überein",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Übereinstimmend: Telefon, PLZ.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [
        "Telefon",
        "PLZ"
      ],
      "prioritaet": null
    },
    {
      "code": "local.nap_imprint",
      "kategorie": "local",
      "titel": "Kontaktdaten der Startseite stimmen mit dem Impressum überein",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Übereinstimmend: Telefon, Anschrift.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/",
        "https://www.hg-fluegel.de/impressum/"
      ],
      "belege": [
        "Telefon",
        "Anschrift"
      ],
      "prioritaet": null
    },
    {
      "code": "local.review_links",
      "kategorie": "local",
      "titel": "Link zu Bewertungsplattform vorhanden",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Die Website verweist auf Bewertungen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [
        "https://www.google.com/maps/place/Haus+und+Geb%C3%A4ude+Service+Fl%C3%BCgel/@49.6191649,8.8291828,17z/",
        "https://www.google.com/maps/place/Haus+und+Geb%C3%A4ude+Service+Fl%C3%BCgel/@49.6191649,8.8291828,17z/"
      ],
      "prioritaet": null
    },
    {
      "code": "local.schema",
      "kategorie": "local",
      "titel": "LocalBusiness-Schema vollständig",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Vorhanden: address, geo, openingHours, areaServed.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "local.service_area",
      "kategorie": "local",
      "titel": "Einzugsgebiet konkret und auf der Seite belegt",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "areaServed nennt Grasellenbach, Wald-Michelbach, Fürth; das Gebiet steht auch im sichtbaren Text.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/"
      ],
      "belege": [
        "Grasellenbach",
        "Wald-Michelbach",
        "Fürth"
      ],
      "prioritaet": null
    },
    {
      "code": "mkt.consent",
      "kategorie": "marketing",
      "titel": "Einwilligungs-Prüfung nicht relevant (kein einwilligungspflichtiges Tracking erkannt)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "Es wurde kein Tracking erkannt, das typischerweise eine Einwilligung braucht. Consent-Manager erkannt: keiner.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "mkt.consent_reject",
      "kategorie": "marketing",
      "titel": "Ablehnen-Knopf nicht einschlägig (kein einwilligungspflichtiges Tracking erkannt)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "mkt.consent_revoke",
      "kategorie": "marketing",
      "titel": "Widerruf der Einwilligung nicht einschlägig (kein Tracking erkannt)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "mkt.conversion_events",
      "kategorie": "marketing",
      "titel": "Conversion-Tracking nicht relevant (keine Werbe-Tags)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "mkt.gtm_container",
      "kategorie": "marketing",
      "titel": "Tag-Manager- und Messkennungen sind gültig aufgebaut",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "Es wurde keine Kennung für Tag Manager, GA4 oder Google Ads im Quelltext gefunden.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "mkt.newsletter_form",
      "kategorie": "marketing",
      "titel": "Newsletter-Anmeldung nennt Einwilligung und Abmeldung",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "Es wurde kein Newsletter-Formular im HTML gefunden. Über Skripte nachgeladene Anmeldeformulare (z. B. von Mailchimp) sind nicht sichtbar.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "mkt.pii_in_tracking",
      "kategorie": "marketing",
      "titel": "Kontaktdaten in Ereignissen nicht prüfbar (kein Messwerkzeug erkannt)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "mkt.privacy_services",
      "kategorie": "marketing",
      "titel": "Dienste in der Datenschutzerklärung nicht einschlägig (keine Fremd-Hosts im HTML)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "Im HTML werden keine Skripte, Frames oder Stylesheets von fremden Servern geladen. Was Skripte nachladen, ist von außen nicht sichtbar.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "mkt.sharing_buttons_privacy",
      "kategorie": "marketing",
      "titel": "Teilen-Schaltflächen laden nicht von Fremdservern vor dem Klick",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Es wurde kein Skript einer Teilen-Schaltfläche gefunden, das vor dem Klick von Fremdservern geladen wird (Einbettungen mit iframe: siehe conv.embeds_consent).",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "mkt.tools_detected",
      "kategorie": "marketing",
      "titel": "0 Mess-/Marketing-Werkzeuge erkannt",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Im Quelltext wurde kein Analyse- oder Werbe-Tag gefunden. Hinweis: Über einen Tag Manager geladene Werkzeuge sind von außen nicht sichtbar.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "mkt.tracking_duplicate",
      "kategorie": "marketing",
      "titel": "Doppelte Messwerkzeuge nicht prüfbar (kein Messwerkzeug erkannt)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "mkt.tracking_gated",
      "kategorie": "marketing",
      "titel": "Bindung der Tracking-Skripte an die Einwilligung nicht prüfbar (kein Cookie-Tool erkannt)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "Ob ein Cookie-Tool fehlt oder nur nicht erkannt wird, bewertet mkt.consent.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "mkt.ua_legacy",
      "kategorie": "marketing",
      "titel": "Veralteter Universal-Analytics-Code nicht vorhanden",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Kein veralteter UA-Code gefunden.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "mkt.utm_in_canonical",
      "kategorie": "marketing",
      "titel": "Canonical und Sitemap ohne Tracking-Parameter",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Canonical, og:url und Sitemap-Adressen enthalten keine Tracking-Parameter.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "mkt.utm_internal",
      "kategorie": "marketing",
      "titel": "UTM-Parameter in internen Links nicht gefunden",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Interne Links sind frei von UTM-Parametern.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.ai_phrases",
      "kategorie": "onpage",
      "titel": "Der Text enthält keine Häufung von Standardfloskeln",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.description_cta",
      "kategorie": "onpage",
      "titel": "Die Descriptions enthalten eine Handlungsaufforderung",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.h1_title_identical",
      "kategorie": "onpage",
      "titel": "H1 und Title sind unterschiedlich formuliert",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.heading_repeats",
      "kategorie": "onpage",
      "titel": "Überschriften wiederholen sich nicht innerhalb einer Seite",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.img_broken",
      "kategorie": "onpage",
      "titel": "Alle 12 geprüften Bilder sind erreichbar",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.img_filenames",
      "kategorie": "onpage",
      "titel": "2 Bilddateien haben Kamera- oder Zufallsnamen",
      "bestanden": false,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Dateinamen wie IMG_4711.jpg sagen der Bildersuche nichts; „entruempelung-halle-keller.webp“ sagt viel.",
      "ursache": "",
      "loesung": "Benennen Sie Bilder vor dem Hochladen beschreibend: Leistung, Ort, Motiv.",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/aktuelles/"
      ],
      "belege": [
        "f548ab175a414f21bbd835c209b279fb (https://www.hg-fluegel.de/aktuelles/)",
        "4f50045ac93048a7910aa57b762663bd (https://www.hg-fluegel.de/aktuelles/)"
      ],
      "prioritaet": null
    },
    {
      "code": "onpage.img_formats",
      "kategorie": "onpage",
      "titel": "99 % der Bilder nutzen moderne Formate (WebP/AVIF)",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.img_size",
      "kategorie": "onpage",
      "titel": "Alle Bilder haben Breite und Höhe",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.noscript_content",
      "kategorie": "onpage",
      "titel": "Kein relevanter Text nur im noscript-Block",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "high",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.og_image_valid",
      "kategorie": "onpage",
      "titel": "Open-Graph-Bild ist absolut, sicher eingebunden und erreichbar",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [
        "https://www.hg-fluegel.de/vorschaubild.jpg"
      ],
      "prioritaet": null
    },
    {
      "code": "onpage.og_url_match",
      "kategorie": "onpage",
      "titel": "og:url stimmt mit dem Canonical überein",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.open_graph_pages",
      "kategorie": "onpage",
      "titel": "Auch Unterseiten haben Open-Graph-Titel und -Bild",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.readability",
      "kategorie": "onpage",
      "titel": "Lesbarkeit (Flesch/Amstad) im Schnitt 53: mittel",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Der Index schätzt anhand von Satz- und Wortlänge, wie leicht der Text zu lesen ist (0 schwer bis 100 leicht; Fachtexte liegen oft bei 30 bis 50).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.title_brand",
      "kategorie": "onpage",
      "titel": "Der Markenname steht einheitlich im Title",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.title_special_chars",
      "kategorie": "onpage",
      "titel": "Titles ohne störende Sonderzeichen",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "onpage.twitter_card",
      "kategorie": "onpage",
      "titel": "Twitter/X-Card ist gesetzt",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.asset_count",
      "kategorie": "performance",
      "titel": "Nicht zu viele Skript- und Stylesheet-Dateien",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Höchstens 4 eigene Skript- und Stylesheet-Dateien je Seite.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.bfcache",
      "kategorie": "performance",
      "titel": "Seiten können im Vor-/Zurück-Cache bleiben",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Keine Seite trägt „no-store“ oder einen unload-Handler.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.blocking_scripts",
      "kategorie": "performance",
      "titel": "Keine blockierenden Skripte im Kopf der Seite",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "Nicht anwendbar: keine externen Skripte im <head>.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.cdn_libs",
      "kategorie": "performance",
      "titel": "Bibliotheken kommen vom eigenen Server",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Keine Seite lädt Skripte oder Styles von einem öffentlichen Bibliotheks-CDN.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.console_errors",
      "kategorie": "performance",
      "titel": "Keine Fehlermeldungen der eigenen Seite in der Browser-Konsole",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Die eigene Seite erzeugt keine Konsolenfehler.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.deprecations",
      "kategorie": "performance",
      "titel": "Keine veralteten Browser-Schnittstellen im eigenen Code",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Der eigene Code nutzt keine veralteten Browser-Schnittstellen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.desktop.cls",
      "kategorie": "performance",
      "titel": "Cumulative Layout Shift Desktop: 0.000",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Gemessen: 0.000. Gut ist bis 0.100, schlecht ab 0.250 (Labordaten).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.desktop.fcp",
      "kategorie": "performance",
      "titel": "First Contentful Paint Desktop: 255 ms",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Gemessen: 255 ms. Gut ist bis 1.8 s, schlecht ab 3.0 s (Labordaten).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.desktop.lcp",
      "kategorie": "performance",
      "titel": "Largest Contentful Paint Desktop: 342 ms",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Gemessen: 342 ms. Gut ist bis 2.5 s, schlecht ab 4.0 s (Labordaten).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.desktop.score",
      "kategorie": "performance",
      "titel": "Lighthouse-Leistungswert Desktop: 100/100",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Google Lighthouse bewertet die Ladeleistung desktop mit 100 von 100 Punkten (Labormessung, simulierte Verbindung).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/"
      ],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.desktop.si",
      "kategorie": "performance",
      "titel": "Speed Index Desktop: 369 ms",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Gemessen: 369 ms. Gut ist bis 3.4 s, schlecht ab 5.8 s (Labordaten).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.desktop.tbt",
      "kategorie": "performance",
      "titel": "Total Blocking Time Desktop: 0 ms",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Gemessen: 0 ms. Gut ist bis 200 ms, schlecht ab 600 ms (Labordaten).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.desktop.ttfb",
      "kategorie": "performance",
      "titel": "Server-Antwortzeit Desktop: 8 ms",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Gemessen: 8 ms. Gut ist bis 800 ms, schlecht ab 1.8 s (Labordaten).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.duplicated_js",
      "kategorie": "performance",
      "titel": "Keine doppelten JavaScript-Module",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Kein nennenswerter Mehraufwand gemessen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.field.none",
      "kategorie": "performance",
      "titel": "Keine Felddaten echter Nutzer verfügbar",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "Google hat für diese Website zu wenige Chrome-Besuche, um Core Web Vitals echter Nutzer auszuweisen. Angezeigt werden nur Labormessungen. Es werden keine Werte erfunden.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.font_display",
      "kategorie": "performance",
      "titel": "Schriften blockieren den Text nicht",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Webschriften laden mit font-display (Text bleibt sichtbar).",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.html_compression",
      "kategorie": "performance",
      "titel": "HTML wird komprimiert ausgeliefert",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Alle abgerufenen Seiten kommen gzip- bzw. brotli-komprimiert an.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.html_size",
      "kategorie": "performance",
      "titel": "HTML-Seiten haben eine vernünftige Größe",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Keine abgerufene Seite hat mehr als 200 KB reinen HTML-Code.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.http2",
      "kategorie": "performance",
      "titel": "Eigene Dateien über HTTP/2 oder HTTP/3",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Die eigenen Dateien kommen über HTTP/2 oder HTTP/3 (mehrere Dateien parallel).",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.img_aspect",
      "kategorie": "performance",
      "titel": "Bilder erscheinen unverzerrt",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Alle Bilder werden im richtigen Seitenverhältnis angezeigt.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.img_srcset",
      "kategorie": "performance",
      "titel": "Bilder werden in mehreren Größen angeboten",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Inhaltsbilder bieten über srcset verschiedene Größen an.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.img_weight",
      "kategorie": "performance",
      "titel": "Einzelne Bilder sind nicht übergroß",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Kein Bild beim Aufruf der Startseite ist übergroß.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [
        "www.hg-fluegel.de/static/images/paare/paar_05-400.eb352fe2fecf.webp (80 KB)",
        "www.hg-fluegel.de/static/images/paare/paar_01-400.a36940836e8a.webp (63 KB)",
        "www.hg-fluegel.de/static/images/paare/paar_06-400.ff7c012060f9.webp (61 KB)"
      ],
      "prioritaet": null
    },
    {
      "code": "perf.inline_weight",
      "kategorie": "performance",
      "titel": "Eingebetteter CSS/JS-Code bleibt klein",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Der im HTML eingebettete Code ist klein.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.lazy_loading",
      "kategorie": "performance",
      "titel": "Bilder laden bedarfsgerecht (Lazy-Loading)",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Das erste Bild lädt sofort, spätere Bilder erst bei Bedarf.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [
        "167 von 169 späteren Bildern lazy"
      ],
      "prioritaet": null
    },
    {
      "code": "perf.lcp_discovery",
      "kategorie": "performance",
      "titel": "Das größte Bild wird früh entdeckt",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "Lighthouse hat das Ladeverhalten des größten Elements nicht ausgewertet (kein Bild als größtes Element oder nicht geliefert).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.legacy_js",
      "kategorie": "performance",
      "titel": "Kein unnötig altes JavaScript (Polyfills)",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Kein nennenswerter Mehraufwand gemessen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.mobile.cls",
      "kategorie": "performance",
      "titel": "Cumulative Layout Shift Mobil: 0.000",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Gemessen: 0.000. Gut ist bis 0.100, schlecht ab 0.250 (Labordaten).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.mobile.fcp",
      "kategorie": "performance",
      "titel": "First Contentful Paint Mobil: 953 ms",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Gemessen: 953 ms. Gut ist bis 1.8 s, schlecht ab 3.0 s (Labordaten).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.mobile.lcp",
      "kategorie": "performance",
      "titel": "Largest Contentful Paint Mobil: 1.4 s",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Gemessen: 1.4 s. Gut ist bis 2.5 s, schlecht ab 4.0 s (Labordaten).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.mobile.score",
      "kategorie": "performance",
      "titel": "Lighthouse-Leistungswert Mobil: 100/100",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Google Lighthouse bewertet die Ladeleistung mobil mit 100 von 100 Punkten (Labormessung, simulierte Verbindung).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "high",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/"
      ],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.mobile.si",
      "kategorie": "performance",
      "titel": "Speed Index Mobil: 953 ms",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Gemessen: 953 ms. Gut ist bis 3.4 s, schlecht ab 5.8 s (Labordaten).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.mobile.tbt",
      "kategorie": "performance",
      "titel": "Total Blocking Time Mobil: 0 ms",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Gemessen: 0 ms. Gut ist bis 200 ms, schlecht ab 600 ms (Labordaten).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.mobile.ttfb",
      "kategorie": "performance",
      "titel": "Server-Antwortzeit Mobil: 3 ms",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Gemessen: 3 ms. Gut ist bis 800 ms, schlecht ab 1.8 s (Labordaten).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.page_weight",
      "kategorie": "performance",
      "titel": "Seitengröße mobil: 0.6 MB",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Beim Laden der Startseite werden 0.6 MB übertragen. Gut ist bis 2 MB, problematisch ab 5 MB – besonders im Mobilfunk (Labormessung).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/"
      ],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.redirect_first",
      "kategorie": "performance",
      "titel": "Aufruf läuft ohne zeitraubende Weiterleitung",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Beim Aufruf der Seite gibt es keine nennenswerte Weiterleitung.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.third_party_hosts",
      "kategorie": "performance",
      "titel": "Wenige fremde Server je Seite",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Keine Seite lädt Ressourcen von mehr als drei fremden Servern.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.unminified",
      "kategorie": "performance",
      "titel": "CSS und JavaScript sind verkleinert",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Eigene CSS- und JavaScript-Dateien sind verkleinert (minifiziert).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "perf.unsized_images",
      "kategorie": "performance",
      "titel": "Bilder reservieren ihren Platz (keine Layout-Sprünge)",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Alle Bilder haben eine Größenangabe; der Browser hält den Platz frei.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.cache_sensitive",
      "kategorie": "security",
      "titel": "Seiten mit persönlichen Daten nicht zwischengespeichert",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "Nicht anwendbar: keine Konto-, Bestell- oder Dankeseite unter den abgerufenen Seiten.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.clickjacking",
      "kategorie": "security",
      "titel": "Schutz vor Einbettung in fremde Seiten (Clickjacking)",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Die Seite verbietet das Einbetten in fremde Seiten.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/"
      ],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.coop",
      "kategorie": "security",
      "titel": "Cross-Origin-Opener-Policy gesetzt",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Fenster fremder Seiten sind von dieser Seite getrennt.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/"
      ],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.cors_wildcard",
      "kategorie": "security",
      "titel": "Keine Freigabe für jede fremde Herkunft (CORS)",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Keine abgerufene Seite gibt ihren Inhalt für jede fremde Herkunft frei.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.csp",
      "kategorie": "security",
      "titel": "Content-Security-Policy gesetzt",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Eine Content-Security-Policy ist aktiv.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.csp_base_uri",
      "kategorie": "security",
      "titel": "CSP legt base-uri fest",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Die CSP schränkt <base>-Angaben ein.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/"
      ],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.debug_traces",
      "kategorie": "security",
      "titel": "Keine Fehlermeldungen oder Entwicklungsspuren sichtbar",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Auf 26 geprüften Seiten (inkl. Fehlerseite) zeigt sich keine Entwicklungs- oder Fehlerausgabe.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.dir_listing",
      "kategorie": "security",
      "titel": "Keine Verzeichnisauflistung",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Keine der abgerufenen Seiten ist eine Dateiliste des Servers.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.form_foreign",
      "kategorie": "security",
      "titel": "Formulare senden an die eigene Herkunft",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Alle 4 Formulare senden an die eigene Domain.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.form_http",
      "kategorie": "security",
      "titel": "Formulare senden verschlüsselt",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Kein Formular sendet seine Daten an eine http://-Adresse.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.headers_coverage",
      "kategorie": "security",
      "titel": "Sicherheits-Header auf allen Seiten",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Alle 24 weiteren Seiten tragen dieselben Sicherheits-Header wie die Startseite.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.hsts",
      "kategorie": "security",
      "titel": "HSTS aktiv",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "max-age=365 Tage",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.hsts_depth",
      "kategorie": "security",
      "titel": "HSTS mit einem Jahr Laufzeit und Unterdomänen",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "HSTS gilt ein Jahr und für alle Unterdomänen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.http_redirect",
      "kategorie": "security",
      "titel": "Aufrufe über HTTP werden auf HTTPS umgeleitet",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Die unverschlüsselte Adresse leitet auf die verschlüsselte um.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [
        "http://www.hg-fluegel.de/"
      ],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.https",
      "kategorie": "security",
      "titel": "Website nutzt HTTPS",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Die Startseite wird verschlüsselt (HTTPS) ausgeliefert.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "high",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/"
      ],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.inline_handlers",
      "kategorie": "security",
      "titel": "Keine Ereignisbehandlung direkt im HTML",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Im HTML stehen keine onclick-/onload-Angaben; eine strenge CSP wäre möglich.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.mail.apex_cname",
      "kategorie": "security",
      "titel": "Kein CNAME auf dem Hauptnamen",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Der Hauptname verwendet keinen CNAME.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.mail.dkim",
      "kategorie": "security",
      "titel": "DKIM-Schlüssel gefunden",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "Unter 18 gängigen Selectoren wurde kein DKIM-Schlüssel gefunden. Das beweist nicht, dass DKIM fehlt: der Selector steht nur im Kopf einer Mail und kann beliebig heißen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.mail.dmarc_policy",
      "kategorie": "security",
      "titel": "DMARC weist Fälschungen nicht nur beobachtend ab",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "Kein DMARC-Eintrag – der Mangel steht bei „DMARC-Eintrag vorhanden“.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.mail.mx",
      "kategorie": "security",
      "titel": "Domain kann E-Mail empfangen",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "1 Mailserver eingetragen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [
        "0 mail.webador.com"
      ],
      "prioritaet": null
    },
    {
      "code": "sec.mail.spf",
      "kategorie": "security",
      "titel": "SPF-Eintrag schützt vor gefälschten Absendern",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "SPF ist eingerichtet.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [
        "v=spf1 include:_spf.webador.com ~all"
      ],
      "prioritaet": null
    },
    {
      "code": "sec.mixed_content",
      "kategorie": "security",
      "titel": "Keine unverschlüsselten Ressourcen auf HTTPS-Seiten",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Auf den geprüften Seiten werden Skripte, Styles und Bilder über HTTPS geladen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.nosniff",
      "kategorie": "security",
      "titel": "Header X-Content-Type-Options: nosniff",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Der Browser darf Dateitypen nicht „erraten“.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/"
      ],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.outdated_js",
      "kategorie": "security",
      "titel": "Keine veralteten JavaScript-Bibliotheken erkannt",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Anhand von Dateinamen und Kommentaren wurde keine bekannte verwundbare Bibliothek (jQuery, Bootstrap, AngularJS, lodash) gefunden. Die Erkennung ist nicht vollständig.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.paste_prevent",
      "kategorie": "security",
      "titel": "Einfügen in Eingabefelder nicht blockiert",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Eingabefelder erlauben das Einfügen aus der Zwischenablage.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.permission_prompts",
      "kategorie": "security",
      "titel": "Keine Berechtigungsabfrage beim Seitenaufruf",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Beim Aufruf der Startseite wird keine Berechtigung (Standort, Benachrichtigungen) abgefragt.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.permissions_policy",
      "kategorie": "security",
      "titel": "Permissions-Policy gesetzt",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Browser-Funktionen wie Kamera oder Standort sind eingeschränkt.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/"
      ],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.referrer_policy",
      "kategorie": "security",
      "titel": "Referrer-Policy gesetzt",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Referrer-Policy: strict-origin-when-cross-origin",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/"
      ],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.scope_note",
      "kategorie": "security",
      "titel": "Hinweis zum Umfang der Sicherheitsprüfung",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "Geprüft werden nur öffentlich sichtbare Merkmale (Verschlüsselung, Sicherheits-Header, Seiteninhalte). Das ist kein Penetrationstest und keine vollständige Sicherheitsprüfung.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.security_txt",
      "kategorie": "security",
      "titel": "security.txt ist vorhanden und gültig",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Die Datei /.well-known/security.txt enthält Contact und ein gültiges Ablaufdatum.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/.well-known/security.txt"
      ],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.sri",
      "kategorie": "security",
      "titel": "Fremde Bibliotheken mit Integritätsprüfung (SRI)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "Nicht anwendbar: keine Bibliothek von einem öffentlichen Bibliotheks-CDN eingebunden. (Dienste wie Google Tag Manager oder Maps können technisch kein SRI tragen.)",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.target_blank",
      "kategorie": "security",
      "titel": "Externe Links in neuem Fenster mit rel=noopener",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Alle 13 externen Links mit target=\"_blank\" tragen rel=\"noopener\".",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.tls.cert",
      "kategorie": "security",
      "titel": "TLS-Zertifikat ist gültig",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Aussteller Let's Encrypt, gültig bis 2026-12-21 (noch 63 Tage).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.tls.version",
      "kategorie": "security",
      "titel": "Verschlüsselungsprotokoll TLS 1.3",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Ausgehandelt wurde TLSv1.3; das gilt als sicher.",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.version_disclosure",
      "kategorie": "security",
      "titel": "Keine Software-Versionen in Headern",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Server- und X-Powered-By-Header nennen keine Versionsnummern.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "sec.wp_version",
      "kategorie": "security",
      "titel": "Keine CMS-Version im Generator-Tag",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Das HTML verrät keine WordPress-Version.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.broken_anchors",
      "kategorie": "technical",
      "titel": "Sprungmarken führen zu vorhandenen Abschnitten",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.broken_external",
      "kategorie": "technical",
      "titel": "Alle 11 geprüften externen Links sind erreichbar",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.broken_internal",
      "kategorie": "technical",
      "titel": "Keine defekten internen Links gefunden",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.canonical_target_indexable",
      "kategorie": "technical",
      "titel": "Canonical zeigt auf eine indexierbare Seite",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "unavailable",
      "beschreibung": "Kein Canonical verweist auf eine andere, gecrawlte Seite.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.charset_early",
      "kategorie": "technical",
      "titel": "Zeichensatz steht früh im Kopf",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.empty_href",
      "kategorie": "technical",
      "titel": "Keine leeren oder unbrauchbaren Linkziele",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.home_status",
      "kategorie": "technical",
      "titel": "Die Startseite antwortet mit Status 200 (OK)",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Die Startseite lässt sich normal abrufen.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "high",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.hreflang",
      "kategorie": "technical",
      "titel": "Keine hreflang-Angaben (bei einsprachigen Websites nicht nötig)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.hreflang_lang_match",
      "kategorie": "technical",
      "titel": "Sprache der Seite und hreflang (nicht zutreffend)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.hreflang_targets",
      "kategorie": "technical",
      "titel": "hreflang-Ziele (nicht zutreffend)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.http_redirect",
      "kategorie": "technical",
      "titel": "HTTP wird dauerhaft auf HTTPS weitergeleitet",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [
        "http://www.hg-fluegel.de/ -> 301 -> https://www.hg-fluegel.de/"
      ],
      "prioritaet": null
    },
    {
      "code": "tech.link_depth",
      "kategorie": "technical",
      "titel": "Alle gecrawlten Seiten liegen höchstens 3 Klicks tief",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": " Der Crawl ist begrenzt, tiefere Ebenen wurden evtl. nicht erfasst.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.links_http_external",
      "kategorie": "technical",
      "titel": "Externe Links nutzen https",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.links_per_page",
      "kategorie": "technical",
      "titel": "Seiten haben keine übermäßige Linkzahl",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.noindex_home",
      "kategorie": "technical",
      "titel": "Die Startseite ist indexierbar",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.not_found_status",
      "kategorie": "technical",
      "titel": "Nicht vorhandene Seiten liefern korrekt Status 404",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.orphans",
      "kategorie": "technical",
      "titel": "Keine verwaisten Seiten in der Sitemap gefunden",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": " Der Crawl war begrenzt, es wurden nur bereits gecrawlte Seiten betrachtet.",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.page_size_outlier",
      "kategorie": "technical",
      "titel": "1 Seite ist dreimal so groß wie der Durchschnitt der Website",
      "bestanden": false,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Eine Seite, die viel größer ist als alle anderen, enthält meist eingebettete Daten oder ein Base64-Bild, das dort nicht hingehört.",
      "ursache": "",
      "loesung": "Sehen Sie sich die auffällig große Seite an und lagern Sie eingebettete Daten aus.",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [
        "https://www.hg-fluegel.de/galerie/"
      ],
      "belege": [
        "https://www.hg-fluegel.de/galerie/: 181 KB (Median 36 KB)"
      ],
      "prioritaet": null
    },
    {
      "code": "tech.pagination_canonical",
      "kategorie": "technical",
      "titel": "Seitenfolgen (nicht zutreffend)",
      "bestanden": null,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.plugins_frames",
      "kategorie": "technical",
      "titel": "Keine veralteten Plugins oder Frames",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "high",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.response_time",
      "kategorie": "technical",
      "titel": "Antwortzeit der Startseite: 39 ms",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "Zeit bis zur vollständigen Auslieferung des HTML von unserem Prüfserver aus (inkl. Verbindungsaufbau).",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.response_time_pages",
      "kategorie": "technical",
      "titel": "Typische Antwortzeit der Unterseiten: 29 ms",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.robots_blocks",
      "kategorie": "technical",
      "titel": "robots.txt sperrt die Website nicht",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.robots_meta_conflict",
      "kategorie": "technical",
      "titel": "Meta-robots und X-Robots-Tag widersprechen sich nicht",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.robots_present",
      "kategorie": "technical",
      "titel": "robots.txt ist vorhanden und erreichbar",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.robots_txt_valid",
      "kategorie": "technical",
      "titel": "robots.txt ist fehlerfrei aufgebaut",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.sitemap",
      "kategorie": "technical",
      "titel": "XML-Sitemap gefunden mit 158 URLs",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [
        "https://www.hg-fluegel.de/sitemap.xml (158 Einträge)"
      ],
      "prioritaet": null
    },
    {
      "code": "tech.sitemap_host_match",
      "kategorie": "technical",
      "titel": "Sitemap nennt nur Adressen der Hauptvariante",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.sitemap_http_urls",
      "kategorie": "technical",
      "titel": "Sitemap enthält keine http-Adressen",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.sitemap_lastmod",
      "kategorie": "technical",
      "titel": "Sitemap pflegt lastmod glaubwürdig",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "heuristic",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.sitemap_relative_ref",
      "kategorie": "technical",
      "titel": "Sitemap-Angabe in der robots.txt ist eine vollständige Adresse",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "low",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.url_hygiene",
      "kategorie": "technical",
      "titel": "Adressen ohne Leerzeichen und doppelte Schrägstriche",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "low",
      "betroffene_urls": [],
      "belege": [],
      "prioritaet": null
    },
    {
      "code": "tech.www_consolidation",
      "kategorie": "technical",
      "titel": "Nur eine Adressvariante (www/ohne www) ist erreichbar",
      "bestanden": true,
      "schwere": "info",
      "datenstatus": "measured",
      "beschreibung": "",
      "ursache": "",
      "loesung": "",
      "aufwand": "medium",
      "nutzen": "medium",
      "betroffene_urls": [],
      "belege": [
        "Alternative nicht erreichbar (tls)"
      ],
      "prioritaet": null
    }
  ],
  "hinweis": "Scores sind eigene, regelbasierte Bewertungen (Methodik: /methodik/). Kein offizieller Google-Wert."
}