# SEO-Audit koeseo.de

**Health Score: 35/100** · Business-Type: ProfessionalService / B2B Local Service (AI- & IT-Infrastruktur, Bochum) · Stand: 2026-07-19

## Executive Summary

**Top-Findings (Critical/High):**
- [Critical] robots.txt fehlt — HTTP 404
- [Critical] Kritisches Thin-Content: 82 Wörter Hauptcontent (Minimum 500)
- [Critical] Keine Experience-Signale: Null Fallbeispiele, Referenzen oder Projektnachweise
- [Critical] Extreme Thin Content — keine zitierbaren Passagen (Citability-Killer #1)
- [Critical] llms.txt fehlt — keine maschinenlesbare AI-Inhaltsdeklaration
- [Critical] CRITICAL: Page-Type-Mismatch – 1-Seiter vs. dedizierte Location-Landing-Pages im SERP
- [Critical] CRITICAL: Thin Content – 230 sichtbare Wörter gegen 1.500-4.000-Wort-Konkurrenz
- [Critical] Kein Google Business Profile nachweisbar

**Quick-Wins:**
- robots.txt anlegen (+ Sitemap-Verweis)
- sitemap.xml (1 URL) + in GSC einreichen
- Canonical-Tag in <head>
- HSTS-Header in nginx
- favicon.ico/svg
- og:image + Twitter-Cards

## Kategorien

| Kategorie | Score |
|---|---|
| Technical SEO | 50/100 |
| Content Quality | 14/100 |
| AI Search Readiness (GEO/AEO) | 19/100 |
| Google SEO Data | 55/100 |
| Search Experience Optimization | 25/100 |
| Local SEO | 26/100 |
| Schema / Structured Data | 55/100 |


### Technical SEO — 50/100

**Was funktioniert:**
- HTTP→HTTPS 308 Permanent Redirect (curl-verifiziert: HTTP/1.1 308)
- www→non-www 308 Permanent Redirect (curl-verifiziert: HTTP/2 308, location: https://koeseo.de/)
- HTTP/2 aktiv + HTTP/3 via alt-svc bereit (alt-svc: h3=":443"; ma=2592000)
- Desktop Lighthouse Performance: 100/100, LCP 0.6s, TBT 0ms, CLS 0
- Basis-Security-Header vorhanden: x-content-type-options: nosniff, x-frame-options: SAMEORIGIN, referrer-policy, permissions-policy
- Meta-Tags korrekt: title, description, robots=index,follow, lang=de, viewport, charset UTF-8
- JSON-LD ProfessionalService Block vorhanden (schema.org, name/url/address/vatID/founder)
- robots meta auf /impressum korrekt: noindex,follow (Legal-Seite zu Recht nicht indexiert)
- /impressum und /datenschutz: HTTP 200 (funktionsfähig)
- Statisches HTML — kein JS-Rendering nötig, Googlebot sieht Content direkt
- Fonts mit font-display: swap in CSS (kein FOIT/FOUT-Problem)
- Saubere URL-Struktur, keine Trailing-Slash-Inkonsistenz (https://koeseo.de ohne Slash liefert 200 direkt)
- Mobile CLS: 0, TBT: 0ms (INP-Proxy) — beide Core-Web-Vitals-Metriken im grünen Bereich

**Findings:**

- **[Critical] robots.txt fehlt — HTTP 404**
  - Live-Check via curl bestätigt: GET https://koeseo.de/robots.txt → HTTP 404. Googlebot bekommt keine Crawl-Direktiven, kein Disallow, und es kann kein Sitemap-Hinweis hinterlegt werden. Ohne robots.txt crawlt Google nach eigener Priorität — unkontrolliert und ohne Referenz auf die Sitemap.
  - *Fix:* robots.txt im nginx-Root erstellen: User-agent: * / Allow: / / Sitemap: https://koeseo.de/sitemap.xml. Bei nginx-Container: Datei in das document root, dann nginx -s reload.

- **[High] XML-Sitemap fehlt — HTTP 404 auf /sitemap.xml und /sitemap_index.xml**
  - Live-Check: curl -sI https://koeseo.de/sitemap.xml → HTTP 404. Gleiches gilt für /sitemap_index.xml. Die drei indexierbaren Seiten (/, /datenschutz; /impressum ist noindex) sind für Google Search Console und Bing Webmaster Tools ohne Sitemap nicht explizit bekanntgemacht.
  - *Fix:* Statische sitemap.xml erstellen mit nur einer URL: https://koeseo.de/ (lastmod, changefreq: monthly, priority: 1.0). /impressum und /datenschutz weglassen (noindex / niedrige Priorität). Pfad: /sitemap.xml, dann in robots.txt referenzieren und in GSC einreichen.

- **[High] Canonical-Tag fehlt auf Homepage und /datenschutz**
  - HTML-Parse der Homepage bestätigt: kein <link rel="canonical"> im <head>. Obwohl HTTP→HTTPS und www→non-www via 308 geregelt sind, fehlt der kanonische Signal für Google bei möglichen URL-Varianten (Tracking-Parameter, Fragment-URLs). /impressum hat ebenfalls keinen Canonical, ist aber noindex.
  - *Fix:* Im <head> der Homepage hinzufügen: <link rel="canonical" href="https://koeseo.de/">. Auf /datenschutz: <link rel="canonical" href="https://koeseo.de/datenschutz">. Da die Site statisch ist, direkt in die HTML-Dateien einpflegen.

- **[High] HSTS (Strict-Transport-Security) fehlt**
  - Header-Check bestätigt: kein Strict-Transport-Security-Header in der HTTP-Antwort. Ohne HSTS können Browser beim ersten Besuch noch über HTTP angesprochen werden (vor dem 308-Redirect). HSTS ist auch Voraussetzung für den HSTS-Preload-List-Eintrag.
  - *Fix:* In nginx.conf im server-Block für HTTPS: add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; — nginx -s reload. Nach 1-2 Wochen Beobachtung: Domain für HSTS-Preload-Liste einreichen (hstspreload.org).

- **[High] Favicon fehlt auf allen Pfaden — generiert unnötige 404-Requests**
  - Live-Check: /favicon.ico, /favicon.svg und /apple-touch-icon.png liefern alle HTTP 404. Jeder Browser-Request auf die Seite löst automatisch einen zusätzlichen Favicon-Fetch aus — 404 kostet Crawl-Budget und erzeugt Server-Logs-Rauschen. Google zeigt kein Favicon in den Suchergebnissen.
  - *Fix:* Minimales favicon.ico (32×32 oder 16×16) und ein favicon.svg im document root ablegen. Im <head> ergänzen: <link rel="icon" href="/favicon.svg" type="image/svg+xml"> und <link rel="icon" href="/favicon.ico" sizes="any">. Optional: apple-touch-icon.png (180×180) für iOS-Bookmark-Icon.

- **[Medium] LCP mobil 3.0s — Needs Improvement (Schwelle: gut < 2.5s)**
  - PageSpeed Insights Lab (mobile, verifiziert via API-Call): LCP = 3.0s, Score 0.78. Ursache: style.css (3.6 KB) blockiert den Render mit est. Savings von 140-160ms (render-blocking-insight Score 0.0 in PSI). Das LCP-Element ist wahrscheinlich der <h1>-Text, da keine Bilder vorhanden sind. Desktop: LCP 0.6s (Score 0.99) — kein Problem. CrUX-Felddaten nicht verfügbar (unzureichender Traffic für Google-Messung).
  - *Fix:* style.css ist render-blocking weil im <head> ohne defer/async geladen. Optionen: (1) Critical CSS inline in <style> im <head>, restliches CSS per <link rel="stylesheet" media="print" onload="this.media='all'"> lazy-laden. (2) Da die CSS-Datei nur 11KB ist, kann auch der komplette CSS-Inhalt direkt inline in den <head> verschoben werden — dann entfällt der HTTP-Request komplett. Option 2 ist bei einer statischen 7KB-Seite die sauberste Lösung.

- **[Medium] Thin Content — Homepage ~150 Wörter, 7.4 KB gesamt, keine Bilder**
  - HTML-Analyse: Homepage hat 4 Service-Cards mit je ~10 Wörtern Text, Hero mit ~15 Wörtern, Kontakt-Block. Gesamt-Seitengewicht 7.4 KB. Keine Bilder, keine Fallstudien, keine Referenzen. Für eine B2B-Agentur die AI-Agenten, Infrastruktur, Kassensysteme und CRM-Workflows verkauft, ist das semantisch zu dünn für Longtail-Rankings auf Begriffe wie 'AI-Agenten Mittelstand', 'eigener Server DSGVO' oder 'Kassensystem TSE Bochum'.
  - *Fix:* Für jede der 4 Service-Cards 2-3 konkrete Ergebnisse oder Use-Cases ergänzen (z.B. Card 01 AI-Agenten: 'Angebots-Erstellung, Rechnungsverarbeitung, Kunden-Routing — automatisiert'). Eine Referenz-Sektion mit 2-3 anonymisierten Kunden-Cases (Branche, Problem, Ergebnis). Trust-Signale: USt-ID und Gründungsjahr sind im JSON-LD, aber im sichtbaren Text fehlen sie. Zielgröße: 400-600 Wörter Homepage-Content.

- **[Medium] og:image fehlt + Twitter/X-Cards fehlen komplett**
  - HTML-Parse bestätigt: Die 5 OG-Tags enthalten kein og:image. Alle twitter:*-Tags fehlen. Bei Social-Sharing (LinkedIn, Xing, WhatsApp, X) erscheint kein Vorschaubild — nur Titel und Description. Für eine B2B-Agentur, die über Social-Channels Leads generiert, ist das ein sichtbarer Qualitätsverlust.
  - *Fix:* og:image (1200×630 PNG/JPG, max 1MB) erstellen und hinzufügen: <meta property="og:image" content="https://koeseo.de/og-image.png"> + og:image:width / og:image:height. Twitter-Cards: <meta name="twitter:card" content="summary_large_image">, twitter:title, twitter:description, twitter:image. Da die Site statisch ist, direkt in den <head> aller Seiten.

- **[Medium] JSON-LD unvollständig: kein telephone, kein sameAs, kein priceRange**
  - Live-Check JSON-LD-Block: ProfessionalService enthält name, description, url, email, address, founder, vatID — aber kein telephone, kein sameAs (LinkedIn/Xing-Profil), kein priceRange, kein serviceType. Außerdem ist die email-Adresse eine Gmail-Adresse (goekhan.koese@gmail.com) statt einer Domain-E-Mail, was für B2B-Vertrauenssignale suboptimal ist.
  - *Fix:* JSON-LD erweitern um: "telephone": "+49-XXX-XXXXXXX", "sameAs": ["https://www.linkedin.com/in/..."], "priceRange": "€€", "serviceType": ["AI-Agenten", "IT-Infrastruktur", "Kassensysteme", "CRM"], "areaServed": "DE". email-Adresse auf @koeseo.de umstellen (Mailcow-Infrastruktur bereits vorhanden auf koehub.de).

- **[Medium] Content-Security-Policy fehlt**
  - Header-Check: kein Content-Security-Policy-Header. Das Kontaktformular sendet via fetch() an https://n8n.koehub.de/webhook/koeseo-contact (externe Domain). Ohne CSP gibt es keinen XSS-Schutz und keine Kontrolle über erlaubte Ressourcen-Quellen.
  - *Fix:* Zunächst im Report-Only-Modus testen: Content-Security-Policy-Report-Only: default-src 'self'; connect-src 'self' https://n8n.koehub.de; font-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'; — nach 1-2 Wochen ohne Reports in echte CSP umwandeln. In nginx.conf als add_header.

- **[Low] IndexNow nicht implementiert — kein automatischer Push zu Bing/Yandex/Naver**
  - Live-Check: GET /indexnow.txt → HTTP 404. Kein IndexNow-Key im HTML-Source gefunden. Bei Inhaltsänderungen wird Bing nicht automatisch benachrichtigt.
  - *Fix:* IndexNow-Key generieren (z.B. via Bing Webmaster Tools oder direkt: openssl rand -hex 16), Schlüsseldatei als /<key>.txt auf Server ablegen (Inhalt = der Key selbst), dann nach Deploy-Schritten API-Call: POST https://api.indexnow.org/indexnow mit JSON-Body {host, key, urlList}. Einmalig, ca. 10 Minuten Aufwand.

- **[Low] server: nginx — Versionsinformation in HTTP-Response-Header**
  - HTTP-Header zeigt server: nginx. Zwar ohne Versionsnummer (nginx gibt standardmäßig nur 'nginx' aus), aber die Software-Kennung ist sichtbar und gibt Angreifern einen Hinweis auf den Stack.
  - *Fix:* In nginx.conf unter http {}: server_tokens off; — damit verschwindet der server-Header komplett. nginx -s reload. Minimale Sicherheitsverbesserung, 1 Zeile Aufwand.

### Content Quality — 14/100

**Was funktioniert:**
- Deutsches Rechtskonformitäts-Set vollständig: Impressum mit Steuernummer (306/5123/3870), USt-ID (DE327767879), vollständige Adresse und EU-Streitschlichtungshinweis — stärkstes Trustworthiness-Signal der Site
- JSON-LD schema.org/ProfessionalService mit strukturierter PostalAddress (Annastraße 27, 44793 Bochum) und vatID vorhanden — maschinenlesbare Standort- und Entitätsdaten für Google
- DSGVO-konformes Kontaktformular mit Einwilligungs-Checkbox, Datenschutzverweis und erklärender Datenschutzerklärung (Art. 6 DSGVO-Rechtsgrundlagen explizit benannt)
- Self-hosted Fonts (kein Google-Fonts-Aufruf) — DSGVO-Punkt und kein Third-Party-Call; Datenschutzseite bestätigt das aktiv
- lang=de korrekt gesetzt, H1 enthält primäres Keyword 'AI & IT-Infrastruktur', Bochum taucht 3x auf Seite auf (Geo-Relevanz-Signal)
- Datenschutzerklärung nennt konkreten Hosting-Server (185.150.25.225, Frankfurt) — seltene Transparenz, die Trustworthiness-Score stärkt
- © 2026 und Datenschutz 'gültig ab Mai 2026' signalisieren aktive Pflege der Seite (Freshness-Signal)

**Findings:**

- **[Critical] Kritisches Thin-Content: 82 Wörter Hauptcontent (Minimum 500)**
  - Der gesamte editoriell nutzbare Text im <main>-Bereich umfasst 82 Wörter (curl-gemessen, HTML-Tags entfernt, Formular-Labels mitgezählt). Die vier Service-Karten enthalten zusammen 4 Sätze mit je 4-6 Wörtern: 'Automation, die im Tagesgeschäft mitarbeitet.', 'Eigener Server. DSGVO-konform. Wartbar.', 'TSE-konform. Bon, Display, Online-Bestellung.', 'Daten verbinden, Routine entlasten.' Google QRG September 2025 bewertet diese Kürze als unzureichende topische Abdeckung für eine B2B-Service-Homepage. Das Homepage-Minimum liegt bei 500 Wörtern — die Site erreicht 16% davon.
  - *Fix:* Jede der vier Service-Karten in einen vollständigen Abschnitt mit 150-200 Wörtern ausbauen. Für 'AI-Agenten': Welche Prozesse werden automatisiert? Welche Branchen? Welche Technologien (n8n, OpenAI API, o.ä.)? Für 'Infrastruktur': DSGVO-Vorteil gegenüber Cloud konkretisieren, Beispiel-Stack nennen. Einen 'Warum koeseo'-Abschnitt mit 100 Wörtern ergänzen (Gründer-Perspektive, years of experience, Ansatz). Ziel: 600-800 Wörter Gesamtcontent ohne Keyword-Stuffing.

- **[Critical] Keine Experience-Signale: Null Fallbeispiele, Referenzen oder Projektnachweise**
  - Die gesamte Site enthält keinerlei First-Hand-Experience-Signale: keine Case Studies, keine Kunden-Logos, keine 'Wir haben X für Unternehmen Y gebaut'-Aussagen, keine Before/After-Beschreibungen, keine Projektzahlen (z.B. 'Automatisierung spart Kunde A 12h/Woche'). Das ist der schwächste E-E-A-T-Faktor der Site (Experience-Score: 10/100). Google September 2025 QRG gewichtet direkte Erfahrungsnachweise explizit höher als Selbstbeschreibung.
  - *Fix:* Mindestens zwei anonymisierte Projektkurzbeschreibungen auf der Homepage einbauen (z.B. 'Für ein Handelsunternehmen aus dem Ruhrgebiet haben wir einen AI-Agenten für Bestellstatus-Anfragen gebaut — spart 40 Tickets/Woche'). Kein Kundenname notwendig, Branche + Ergebnis reicht. Alternativ: /referenzen-Seite mit 3-5 Mini-Cases (200 Wörter je). Eigene Projekte (koehub.de, eigene Infrastruktur) als Demonstrations-Referenz nutzen.

- **[High] Kein Experten-Profil: Gökhan Köse nur im Impressum sichtbar**
  - Der Gründer ist ausschließlich im Impressum (als gesetzliche Pflichtangabe) und in JSON-LD founder-Feld namentlich genannt. Kein 'Über mich'-Abschnitt, kein Link zu LinkedIn/XING, keine Expertise-Signale wie 'seit X Jahren', 'Zertifizierungen', oder 'früher bei'. Die 4 Service-Karten zeigen keine technische Tiefe. Expertise-Score: 18/100. Für einen B2B-IT-Dienstleister ist der Gründer-Vertrauensanker entscheidend — Mittelstand kauft keine anonymen Services.
  - *Fix:* Einen 2-3-Satz-Gründer-Block auf der Homepage einfügen: Name, Herkunft (Bochum), konkrete Erfahrungsjahre im IT-/AI-Bereich, 1-2 greifbare Skills oder Tools. Zusätzlich sameAs-Links in JSON-LD setzen (LinkedIn-Profil-URL, evtl. XING). Beispiel-Block: 'Gökhan Köse, Bochum — IT-Architekt seit 2012, spezialisiert auf AI-Automatisierung und selbstverwaltete Server-Infrastruktur für Mittelstand und Gastronomie. Über 10 eigene produktive Systeme im Betrieb.'

- **[High] Null Authority-Signale: kein sameAs, kein Social Proof, keine externen Verweise**
  - JSON-LD ProfessionalService enthält kein sameAs-Array. Auf der Seite gibt es keine Links zu LinkedIn, XING, GitHub, kununu oder sonstige Reputation-Verweise. Keine Medienerwähnungen, keine Partnerlogos, keine Zertifizierungsabzeichen. Die einzigen ausgehenden Links sind der EU-OS-Streitschlichtungslink im Impressum. Authority-Score: 12/100. Ohne externe Entitäts-Validierung kann Google die Site-Entität nicht mit bekannten Web-Entitäten verknüpfen.
  - *Fix:* Sofortmaßnahme: sameAs in JSON-LD ergänzen mit LinkedIn-URL und ggf. XING-URL des Gründers. Beispiel: '"sameAs": ["https://www.linkedin.com/in/goekhankose", "https://github.com/koeseo"]'. Mittelfristig: 1-2 Branchenverzeichnis-Einträge (Wlocalbase, Cylex, ggf. BVMW NRW) erstellen, die auf koeseo.de verlinken. Die n8n/OpenClaw/KoeHUB-Infrastruktur als GitHub-Referenz verlinken wäre ein starkes Expertise-Signal.

- **[High] Keyword-Gap: 'Mittelstand', 'Automatisierung', 'NRW/Ruhrgebiet', 'Beratung', 'Agentur' fehlen komplett**
  - Keyword-Analyse (curl + Python, vollständige Seitentext-Durchsuchung): 'Mittelstand' = 0x, 'Automatisierung' = 0x, 'NRW' = 0x, 'Ruhrgebiet' = 0x, 'Ruhr' = 0x, 'Beratung' = 0x, 'Agentur' = 0x, 'Solo-Operator' = 0x. Meta-Description nennt 'Mittelstand und Solo-Operators' — aber der sichtbare Seitentext nicht. Die Zielgruppe ist auf keiner semantisch crawlbaren Textfläche verankert. Suchanfragen wie 'AI-Agentur Bochum', 'IT-Automatisierung Mittelstand NRW' finden keine Übereinstimmung.
  - *Fix:* H1 oder Hero-Unterzeile um Zielgruppe ergänzen: z.B. 'Für Mittelstand und Solo-Operators im Ruhrgebiet.' Die Service-Karte 'AI-Agenten' um 2 Sätze mit 'Automatisierung' und 'Mittelstand' erweitern. 'Beratung' mindestens einmal im Kontext 'Kostenlose Erstberatung' einsetzen. Geo-Keyword 'Bochum' bereits vorhanden (3x) — auf 'Bochum / NRW / Ruhrgebiet' ausweiten, damit regionale Suchanfragen aus dem gesamten Ruhrgebiet abgedeckt werden.

- **[High] AI-Citation-Readiness: keine zitierbaren Fakten, kein FAQ-Schema, kein strukturierter Wissensanker**
  - Google SGE und LLM-Zitierbarkeit erfordern konkrete, standalone-zitierbare Aussagen: Zahlen, Definitionen, klar attribuierte Expertise-Aussagen. Die gesamte Site enthält keine einzige zitierbare Tatsache: keine Prozentsätze, keine Zeitersparnis-Angaben, keine Technologie-Definitionen, kein FAQ. Das JSON-LD hat kein @type FAQPage, keine HowTo-Struktur. AI-Citation-Score: 12/100. Die Site wird von KI-Modellen nicht als Informationsquelle erkannt — nur als Lead-Gen-Seite ohne semantischen Wert.
  - *Fix:* Einen FAQ-Abschnitt mit 4-5 Fragen und konkreten Antworten einbauen (schema.org/FAQPage JSON-LD). Beispiel-Fragen: 'Was kostet ein AI-Agent?', 'Was ist der Unterschied zwischen eigenem Server und Cloud?', 'Welche Branchen betreuen Sie?'. Jede Antwort 50-80 Wörter mit messbarem Claim. Das FAQPage-Schema direkt in bestehenden JSON-LD-Block integrieren. Alternativ/ergänzend: eine /faq-Seite als eigenständige indexierbare URL.

- **[Medium] Gmail-Adresse als primärer Kontakt: B2B-Trustsignal-Schwäche**
  - goekhan.koese@gmail.com erscheint in JSON-LD (email-Feld), im Kontaktblock on-page und im Impressum. Für einen B2B-IT-Dienstleister der 'Konzept, Bau, Betrieb' für Mittelstand anbietet, ist eine Freemailer-Adresse ein messbares Trustsignal-Problem: potenzielle Kunden bewerten Business-E-Mail-Adressen als Professionalisierungsindikator. Das Hosting-Setup (eigener Server, eigene Domain koeseo.de) wäre technisch trivial für eine @koeseo.de-Adresse.
  - *Fix:* Mailcow-Instanz auf mail.koehub.de konfigurieren oder Mailbox auf koeseo.de einrichten — laut CLAUDE.md läuft Mailcow bereits auf dem Server. Kontaktadresse auf hallo@koeseo.de oder goekhan@koeseo.de umstellen. JSON-LD email-Feld, Impressum und Datenschutzerklärung aktualisieren. Kosten: 0, bereits vorhandene Infrastruktur.

- **[Medium] Kein telephone in JSON-LD und Kontaktblock**
  - JSON-LD ProfessionalService enthält kein telephone-Property. Der Kontakt-Block on-page zeigt E-Mail und Postanschrift, aber keine Telefonnummer. Google verwendet telephone für Local Business Signale und Knowledge Panel Anreicherung. Für B2B-Kunden (Mittelstand) ist Telefon-Erreichbarkeit ein Vertrauens-KPI — 'Reaktionszeit: 24 Stunden' ist kein Ersatz.
  - *Fix:* Telefonnummer (auch Mobil) in JSON-LD als '"telephone": "+49-XXX-XXXXXXX"' eintragen und im Kontakt-Block als klickbaren tel:-Link anzeigen. Im dl-Element einen dritten dt/dd-Eintrag 'Telefon' ergänzen. Vervollständigt die Local Business Entity im Knowledge Graph.

- **[Medium] Keine eigenständigen Leistungsseiten: alles Anchor-Links, kein indexierbares URL-Surface**
  - Die Navigation verweist auf #leistungen und #kontakt — beides Anchors auf der Startseite. /leistungen, /kontakt liefern HTTP 404. Die gesamte crawlbare URL-Oberfläche der Site umfasst: / (Homepage), /impressum (noindex), /datenschutz (noindex). Es gibt kein Blog, keine /referenzen, kein /ueber-uns. Das bedeutet: Google kann nur eine einzige indexierbare Seite ranken — und die hat 82 Wörter Content.
  - *Fix:* Priorität 1: eigenständige /leistungen-Seite mit 600-800 Wörtern (alle 4 Services je 150 Wörter ausgebaut). Priorität 2: /ueber-uns-Seite (Gründer-Bio, Erfahrung, Ansatz, 300-400 Wörter). Priorität 3: /blog oder /einblicke mit monatlichen 1.000-Wort-Artikeln zu AI-Automatisierung-Themen. Jede neue Seite erhöht die indexierbare Masse und gibt Google mehr Ranking-Kandidaten.

- **[Low] kein openingHours und kein aggregateRating in JSON-LD**
  - Das ProfessionalService-Schema fehlen zwei Google-Knowledge-Panel-Anreicherungen: openingHours (steht implizit im Kontaktblock 'Werktags innerhalb 24 Stunden') und aggregateRating (sofern Bewertungen auf Google My Business oder anderen Plattformen vorhanden). Beide Properties sind optional, erhöhen aber die Schema-Vollständigkeit und Knowledge-Panel-Chancen für lokale B2B-Suchen in Bochum.
  - *Fix:* openingHours in JSON-LD ergänzen: '"openingHoursSpecification": {"@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"], "opens": "09:00", "closes": "18:00"}'. Für aggregateRating: zunächst Google My Business Profil anlegen und Kundenbewertungen sammeln, dann automatisiert in Schema einpflegen.

### AI Search Readiness (GEO/AEO) — 19/100

**Was funktioniert:**
- SSR-Static-Serving via nginx: AI-Crawler erhalten den vollen HTML-Inhalt ohne JavaScript-Abhängigkeit — kein Rendering-Problem
- HTTP/2 aktiv, schnelle Antwortzeit (7,4 KB), ETag-Caching vorhanden
- JSON-LD ProfessionalService-Block mit name, founder (Gökhan Köse), address (Annastraße 27, 44793 Bochum), vatID (DE327767879) — Basis-Entitätssignal vorhanden
- robots.txt 404 = RFC 9309 Implicit Allow-All: GPTBot, ClaudeBot, PerplexityBot, Google-Extended haben uneingeschränkten Crawl-Zugang
- Security-Header vorhanden: x-content-type-options, x-frame-options, referrer-policy, permissions-policy
- Meta-Description nennt Bochum + Mittelstand-Zielgruppe, lang=de gesetzt, robots=index,follow aktiv
- OpenGraph-Grundset (title, description, type, url, locale) vorhanden

**Findings:**

- **[Critical] Extreme Thin Content — keine zitierbaren Passagen (Citability-Killer #1)**
  - Die gesamte Homepage umfasst 106 Wörter. Die längste Textpassage enthält 6 Wörter ('Konzept, Bau, Betrieb. End-to-End, eine Hand.'). Der GEO-Standard für AI-zitierbare Passagen liegt bei 134–167 Wörtern pro Abschnitt mit einer direkten Antwort in den ersten 40–60 Wörtern. ChatGPT, Perplexity und Google AIO können koeseo.de schlicht nicht zitieren, weil kein extrahierbarer Inhalt existiert — nur Marketing-Taglines ohne Substanz. Gemessen: extracted text 852 Zeichen, longest <p> 6 Wörter, 0 Statistiken, 0 Quellenangaben, 0 Erklärungstexte. Dimension Citability: 8/100.
  - *Fix:* Jede der 4 Service-Sections (AI-Agenten, Infrastruktur, Kassensysteme, CRM & Workflows) um einen 150–200-Wörter-Block erweitern. Struktur pro Block: (1) Was ist es — direkte Definition in einem Satz, (2) Wer braucht das — konkretes Use-Case-Beispiel mit Zahlen (z.B. 'Ein Gastronomiebetrieb mit 3 Standorten reduziert manuelle Bestelleingaben um ~80 %'), (3) Was liefert koeseo konkret — Deliverables. Auf der Leistungen-Unterseite zusätzlich eine FAQ-Section mit 5–8 Fragen im H3-Format ('Was kostet ein AI-Agent für KMU?', 'Wie lange dauert eine Implementierung?'). Ziel: Gesamttext Homepage + Leistungen > 1.200 Wörter.

- **[Critical] llms.txt fehlt — keine maschinenlesbare AI-Inhaltsdeklaration**
  - https://koeseo.de/llms.txt liefert HTTP 404. Die llms.txt-Spezifikation (Answer.AI/Jeremy Howard) ermöglicht es AI-Systemen, strukturiert zu verstehen, welche Inhalte für das Zitieren freigegeben sind, welche Hauptthemen die Site abdeckt und wie Inhalte zu interpretieren sind. Besonders für eine Firma, die AI-Infrastruktur verkauft, ist das Fehlen dieser Datei ein Glaubwürdigkeitssignal — Kunden und AI-Systeme, die die Site analysieren, sehen dass der Anbieter die eigene Technologie nicht konsequent einsetzt.
  - *Fix:* Datei /llms.txt anlegen mit: (1) # koeseo — AI- und IT-Infrastruktur (Titelzeile), (2) > Einzelkaufmann Gökhan Köse, Bochum. Konzept, Bau und Betrieb von AI-Agenten, Server-Infrastruktur, Kassensystemen und CRM-Workflows für Mittelstand und Solo-Operators. (3) ## Docs-Section mit Links zu /leistungen, /kontakt, /impressum. (4) RSL-1.0-Lizenzhinweis für Training-Opt-out falls gewünscht. Außerdem in robots.txt (sobald diese existiert) einen Link auf llms.txt eintragen: 'Sitemap: https://koeseo.de/llms.txt'.

- **[High] Keine Entitäts-Disambiguierung im Schema — sameAs, telephone, openingHours fehlen**
  - Das JSON-LD enthält name, address und founder, aber kein sameAs-Array. AI-Systeme (insbesondere Knowledge-Graph-basierte wie Google) nutzen sameAs um koeseo/Gökhan Köse mit externen Entitäten (LinkedIn-Profil, GitHub, Xing, Wikidata falls vorhanden) zu verknüpfen und Vertrauens-Score zu erhöhen. Zusätzlich fehlen telephone (NAP-Vollständigkeit), openingHours ('Mo-Fr 09:00-18:00'), priceRange und aggregateRating. Die E-Mail goekhan.koese@gmail.com statt einer @koeseo.de-Adresse ist ein schwaches Autoritätssignal. Brand-Mention-Korrelation mit AI-Zitierungen: YouTube ~0,737, Reddit hoch, Wikipedia hoch — keinerlei Signale dieser Art sind auffindbar (keine Social-Links auf der Site, kein externer Verweis außer ec.europa.eu).
  - *Fix:* JSON-LD um folgende Felder erweitern: 'telephone': '+49-XXX-XXXXXX', 'sameAs': ['https://www.linkedin.com/in/goekhan-koese/', 'https://github.com/koeseo'] (nur reale, aktive Profile eintragen), 'openingHours': 'Mo-Fr 09:00-18:00'. E-Mail-Adresse auf kontakt@koeseo.de umstellen (Mailcow ist bereits vorhanden). Mittelfristig: LinkedIn-Company-Page für koeseo anlegen und in sameAs referenzieren — LinkedIn-Präsenz hat hohe Korrelation mit AI-Zitierungen im B2B-Segment.

- **[High] Kein robots.txt — keine explizite AI-Crawler-Policy**
  - https://koeseo.de/robots.txt liefert HTTP 404. Gemäß RFC 9309 bedeutet ein fehlendes robots.txt implizites Allow-All — das ist für die aktuelle Crawl-Sichtbarkeit korrekt und positiv. Aber: (1) Ohne robots.txt kann kein Training-Opt-out für CCBot/anthropic-ai/cohere-ai gesetzt werden, (2) AI-Suchmaschinen können den Sitemap-Pfad nicht aus robots.txt lesen, (3) das Fehlen signalisiert fehlende technische Pflege — ein Negativsignal für Authority-Scoring.
  - *Fix:* robots.txt anlegen mit explizitem Allow für AI-Suchcrawler und optionalem Training-Opt-out: 'User-agent: *\nAllow: /\n\nUser-agent: GPTBot\nAllow: /\n\nUser-agent: ClaudeBot\nAllow: /\n\nUser-agent: PerplexityBot\nAllow: /\n\nUser-agent: Google-Extended\nAllow: /\n\n# Training-Opt-out (optional)\nUser-agent: CCBot\nDisallow: /\n\nSitemap: https://koeseo.de/sitemap.xml'. Die Entscheidung über Training-Opt-out (CCBot/anthropic-ai) liegt bei Gökhan — für AI-Search-Sichtbarkeit ist Allow-All das richtige Setup.

- **[Medium] Kein Canonical-Tag, kein og:image, kein sitemap.xml**
  - Canonical-Tag fehlt komplett (verifiziert: grep auf <link rel=canonical liefert kein Ergebnis). og:image fehlt (0 og:image-Meta-Tags gefunden). sitemap.xml liefert 404. Der Canonical-Tag ist für AI-Overviews relevant, da Google bei der Indexierung Canonical-Signale nutzt um Duplikat-Inhalte zu deduplicieren. Das fehlende og:image verhindert Preview-Thumbnails in AI-generierten Antworten, die URLs referenzieren. Das letzte HTML-Modifikationsdatum ist 09.05.2026 — über 2 Monate alt ohne Sitemap-Update-Signal.
  - *Fix:* 1. Canonical: <link rel='canonical' href='https://koeseo.de/' /> im <head> hinzufügen. 2. og:image: Ein 1200x630px Bild erstellen (Logo + 'AI & IT-Infrastruktur · Bochum') und als <meta property='og:image' content='https://koeseo.de/og-image.png'> einbinden. 3. sitemap.xml anlegen mit den 4 URLs: /, /leistungen, /impressum, /datenschutz — jede mit <lastmod> und <changefreq>monthly</changefreq>. 4. Twitter-Cards hinzufügen: <meta name='twitter:card' content='summary_large_image'> + title/description/image.

- **[Medium] Kein HSTS-Header (Strict-Transport-Security fehlt)**
  - curl -sI https://koeseo.de liefert keinen Strict-Transport-Security-Header. HTTP/2 und HTTPS sind aktiv, aber ohne HSTS können Nutzer und Crawler theoretisch auf HTTP umgeleitet werden. Google und Perplexity berücksichtigen HTTPS-Signalstärke bei Trust-Scoring. Gemessen: alle anderen Security-Header sind vorhanden (x-content-type-options, x-frame-options, referrer-policy, permissions-policy), HSTS ist die einzige Lücke.
  - *Fix:* In der nginx-Konfiguration für koeseo.de den Header hinzufügen: 'add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;'. Nach 90 Tagen problemlosem Betrieb auf 'max-age=63072000; includeSubDomains; preload' erweitern und bei hstspreload.org einreichen.

### Google SEO Data — 55/100

**Was funktioniert:**
- URL ist indexiert und heute aktiv gecrawlt (2026-07-19T12:27:29Z, als MOBILE)
- Lighthouse SEO-Score: 100/100 auf Desktop und Mobile (PSI Lab, Google API)
- Desktop Performance: 100/100 — FCP 0.2s, LCP 0.6s, TBT 0ms, CLS 0 (Perfekt)
- Mobile Performance: 95/100 — FCP 0.8s, TBT 0ms, CLS 0
- TTFB: 1ms (Serverlatenzen extrem niedrig — nginx direkt)
- HTTP/2 aktiv, nur 4 Netzwerk-Requests gesamt
- Robots-Meta index,follow korrekt; Googlebot-Zugriff ALLOWED
- JSON-LD ProfessionalService vorhanden und gecrawlt
- Keine JavaScript-Blocking-Zeit (TBT 0ms auf beiden Strategien)

**Findings:**

- **[Info] GSC: 0 Klicks / 0 Impressionen — Property frisch verifiziert**
  - Google API (GSC), Zeitraum 2026-06-21 bis 2026-07-16 (28 Tage): rows=0, totals={clicks:0, impressions:0, ctr:0, position:0}. Die Domain-Property sc-domain:koeseo.de wurde erst kürzlich verifiziert. Google hat die Startseite heute (12:27 UTC) gecrawlt und als 'Submitted and indexed' bestätigt — es sind schlicht noch keine Such-Impressionen aufgelaufen. Daten erscheinen typischerweise 2-4 Wochen nach erstem Crawl-Index-Zyklus.
  - *Fix:* In 2-4 Wochen erneut prüfen. Priorität: Sitemap einreichen (siehe Sitemap-Finding) und Canonical-Tag setzen, damit Google die kanonische URL sofort korrekt registriert.

- **[Medium] CrUX: Kein Feld-Daten-Eligibility — zu wenig Chrome-Traffic**
  - CrUX History API (Google API, origin https://koeseo.de): Fehler 'No CrUX history data for this origin. Insufficient Chrome traffic volume for eligibility.' PSI field_metrics ist ebenfalls leer. Keine realen LCP/INP/CLS-Werte aus dem 28-Tage-Rolling-Window verfügbar. Alle CWV-Werte basieren ausschliesslich auf PSI Lab-Daten (simulierte Umgebung, kein echter Nutzer-Traffic). Dies ist der aktuelle Status — kein Fehler in der Konfiguration.
  - *Fix:* Kein direkter Fix möglich. CrUX-Eligibility entsteht automatisch sobald genug Chrome-Nutzer die Seite besuchen (Richtwert: einige hundert Seitenaufrufe/Monat). Fokus auf organische Sichtbarkeit und direkte Traffic-Quellen legen, um diesen Schwellenwert zu erreichen.

- **[Medium] Mobile LCP: 3.0s — 'Needs Improvement' (Schwelle: 2500ms)**
  - PSI Lab-Daten (Google API, Mobile-Strategie, 2026-07-19): LCP=3011.5ms, Score 0.78. Der LCP-Wert liegt im 'Needs Improvement'-Bereich (2500–4000ms). Ursache laut Netzwerk-Trace: Die Seite hat keine Bilder — das LCP-Element ist ein Text-Block. Der Font inter-var.woff2 (352 KB) wird render-blockierend geladen und verzögert damit das LCP-Paint. Zusätzlich blockiert style.css (162ms laut render-blocking-insight). Desktop-LCP: 611ms (perfekt) — der Unterschied entsteht durch die simulierte mobile Netzwerkdrosselung.
  - *Fix:* 1) Font-Preload: `<link rel='preload' href='/fonts/inter-var.woff2' as='font' crossorigin>` im `<head>` — holt den Font parallel zur HTML-Parse-Phase. 2) style.css inline stellen (11 KB unkomprimiert, passt inline) oder mit `media='print' onload='this.media=\'all\''` non-blocking laden. 3) font-display:swap im @font-face setzen, damit Text sofort mit System-Font sichtbar ist. Erwartete Verbesserung: LCP unter 2500ms (Good).

- **[Medium] Kein Canonical-Tag auf der Startseite**
  - GSC URL Inspection (Google API, 2026-07-19): user_canonical=null. Die Seite hat keinen `<link rel='canonical'>` Tag. Google hat trotzdem https://koeseo.de als google_canonical gewählt — das ist korrekt, aber zufällig. Ohne expliziten Canonical kann Google bei Parametervarianten (/?ref=x, /index.html) unterschiedliche Kanonisierungsentscheidungen treffen. Bestätigt durch die Basis-Fakten (bereits als FEHLT markiert).
  - *Fix:* In den `<head>` einfügen: `<link rel='canonical' href='https://koeseo.de/'>`. Gilt analog für alle Unterseiten (leistungen, kontakt, impressum, datenschutz). Für eine statische Seite ist das ein 5-Minuten-Fix.

- **[Medium] Keine Sitemap in GSC eingetragen — sitemap.xml fehlt (404)**
  - GSC Sitemaps API (Google API): sitemaps=[] (leeres Array). Es ist keine Sitemap in der Search Console registriert. robots.txt (404) und sitemap.xml (404) wurden bereits in den Basis-Fakten dokumentiert. Ohne Sitemap entdeckt Googlebot Unterseiten (leistungen, kontakt, impressum) nur über interne Links — langsamer und weniger zuverlässig. Bei einer frisch verifizierten Property ist das besonders kritisch für den initialen Index-Aufbau.
  - *Fix:* 1) /sitemap.xml erstellen (static, alle 5-6 URLs der Site mit lastmod und changefreq). 2) /robots.txt erstellen (mindestens `User-agent: * / Allow: / / Sitemap: https://koeseo.de/sitemap.xml`). 3) In GSC unter Sitemaps einreichen. Da die Property gerade frisch ist, beschleunigt das den vollständigen Index-Aufbau erheblich.

- **[Medium] 11 Kontrast-Violations — #656565 auf #0a0a0a: Ratio 3.39:1 (WCAG AA: 4.5:1)**
  - PSI Accessibility Audit (Google API, Mobile): 11 Elemente mit unzureichendem Farbkontrast. Konkrete Elemente: `.section-eyebrow` (Texte 'LEISTUNGEN', 'KONTAKT'), `<dt>` Elemente ('E-MAIL', 'POSTANSCHRIFT') und weitere. Foreground #656565, Background #0a0a0a, gemessene Ratio 3.39:1. WCAG AA verlangt 4.5:1 für Normaltextgrössen (body-Schrift unter 18px). Lighthouse Accessibility-Score: 91/100 (beide Strategien) — der Punktabzug kommt direkt aus diesen Kontrast-Fehlern. Zusätzlich: Links sind nur durch Farbe unterscheidbar (`link-in-text-block`-Violation: Datenschutzerklärung-Link in Kontaktformular ohne Underline-Indikator).
  - *Fix:* Eyebrow/Label-Texte und dt-Elemente von #656565 auf mindestens #767676 anheben (Ratio 4.54:1 auf #0a0a0a). Idealziel: #9a9a9a oder heller für komfortables Lesen. Für den Datenschutzlink: text-decoration:underline hinzufügen (neben der Farbunterscheidung). Design-Quality-Gate-Rule beachten: gedämpfte Grau-Töne auf dunklen Flächen IMMER gegen Minimum-4.5:1 absichern.

- **[High] Kein HSTS-Header (Strict-Transport-Security fehlt)**
  - PSI Security Audit (Google API) + Basis-Fakten bestätigt: Kein Strict-Transport-Security Header. Lighthouse meldet 'No HSTS header found' mit Severity 'High'. Ohne HSTS kann ein Angreifer bei einer Man-in-the-Middle-Situation die HTTPS-Verbindung auf HTTP downgraden. Für eine B2B-Firmenwebsite (Verkauf von IT-Infrastruktur) ist das ein Glaubwürdigkeits- und Sicherheits-Signal. Cloudflare (der eingesetzte Proxy, erkennbar an der Referrer-URL 104.27.164.17) kann HSTS auf Proxy-Ebene setzen.
  - *Fix:* Im nginx-Config oder Cloudflare: `Strict-Transport-Security: max-age=31536000; includeSubDomains; preload` setzen. Cloudflare-Dashboard: SSL/TLS → Edge Certificates → HSTS aktivieren (max-age=12 Monate, includeSubDomains). Nach 6-12 Monaten stabiler HTTPS-Historie: Domain im HSTS-Preload-Register eintragen (https://hstspreload.org).

- **[Low] Font inter-var.woff2: 352 KB — 98% des gesamten Seiten-Transfers**
  - PSI Network-Trace (Google API): inter-var.woff2 = 352.592 Bytes (344 KB), jetbrains-mono-400.woff2 = 92.731 Bytes (90 KB). Gesamt-Seitengewicht: 452 KB — davon 98% Fonts. Das ist der alleinige Treiber des mobilen LCP-Problems. Inter Variable Font enthält alle Gewichte und Stile in einer Datei — für eine statische Seite mit nur 1-2 genutzten Gewichten deutlich überdimensioniert.
  - *Fix:* Font subsetten: nur die tatsächlich verwendeten Unicode-Ranges und Gewichte (z.B. weight 400 + 600, latin subset) einschliessen. Tool: `pyftsubset` (fonttools) oder online via Font Squirrel. Erwartete Reduzierung: inter-var von 352 KB auf 30-60 KB (>80% kleiner). Zusätzlich: `font-display: swap` und Preload-Link (siehe LCP-Finding).

- **[Low] style.css Cache-TTL nur 1 Stunde (3.600.000ms)**
  - PSI cache-insight Audit (Google API): style.css (3.7 KB) hat Cache-Control mit max-age=3600 (1 Stunde). Lighthouse schätzt potenzielle Einsparung von 3 KiB bei Folgebesuchen. Für eine statische CSS-Datei ist 1h extrem kurz — bei Wiederholungsbesuchen wird die Datei jedes Mal neu angefordert.
  - *Fix:* Cache-Control auf mindestens 1 Jahr setzen für statische Assets mit Fingerprint: `Cache-Control: public, max-age=31536000, immutable`. Dafür Datei-Versionierung einführen (z.B. style.css?v=20260719 oder Hash im Dateinamen). Nginx-Konfiguration: `location ~* \.(css|woff2)$ { expires 1y; add_header Cache-Control 'public, immutable'; }`

### Search Experience Optimization — 25/100

**Was funktioniert:**
- HTTP 200, 134 ms Ladezeit (live gemessen via curl)
- 4 Security-Header vorhanden: x-content-type-options=nosniff, x-frame-options=SAMEORIGIN, referrer-policy, permissions-policy
- JSON-LD ProfessionalService mit korrekter Adresse (Annastraße 27 Bochum 44793 DE) + vatID + founder
- Meta-Description mit lokalem Bezug: 'Aus Bochum.' – knapper, präziser Brand-Anker
- Honeypot-Spam-Schutz im Kontaktformular (name='website', position:absolute;left:-9999px)
- DSGVO-Consent-Checkbox mit Datenschutzlink im Formular
- Accessibility: skip-link, aria-label auf nav, aria-live auf form-status, label-for-Verknüpfungen durchgängig
- lang=de + viewport + charset UTF-8 korrekt gesetzt
- Hero-Eyebrow 'Bochum' + Meta-Description 'Aus Bochum' – lokaler Anker ist vorhanden, nur nicht ausgebaut
- Kontaktformular mit Pflichtfeld-Validierung und novalidate-Fallback live vorhanden

**Findings:**

- **[Critical] CRITICAL: Page-Type-Mismatch – 1-Seiter vs. dedizierte Location-Landing-Pages im SERP**
  - SERP-Analyse für 'KI Agentur Bochum' (live, 2026-07-19): 9 von 10 Ergebnissen sind dedizierte Sub-Pages von auswärtigen Agenturen (/locations/bochum, /service/ki-agentur-bochum/, /ki-agentur/bochum) mit 1.500–4.000+ Wörtern. koeseo.de antwortet mit einer 230-Wort-Homepage (live gemessen via Python-Textextraktion aus curl-Output). SERP-Dominant-Type: Service + Location Landing Page, Konfidenz 90 %. Kritische Ironie: Alle SERP-Konkurrenten sind Nicht-Bochumer Agenturen (Berlin, Hamburg, Frankfurt) mit reinen SEO-City-Pages. koeseo hat die einzige echte Bochumer Adresse im Feld (Annastraße 27, live in JSON-LD verifiziert) – und nutzt diesen Authentizitätsvorteil nicht. Mismatch-Schwere: CRITICAL.
  - *Fix:* Dedizierte Seite /ki-agentur-bochum/ erstellen mit H1 'KI-Agentur Bochum – AI-Agenten & IT-Infrastruktur für den Mittelstand', Ortsnennung in den ersten 100 Wörtern, mindestens 1.200 Wörter Fließtext, Abschnitte: Leistungsdetails (je 150-200 Wörter), Prozess (Analyse → Konzept → Bau → Betrieb), Referenzen, FAQ (5+ Fragen), Bochum/NRW-Kontext explizit ('Ruhrgebiet', 'NRW-Mittelstand'). Canonical der Homepage auf diese Seite zeigen lassen oder Homepage als inhaltliche Erweiterung ausbauen. Der lokale Authentizitätsvorteil gegenüber SEO-City-Page-Konkurrenten ist ein messbarer SERP-Hebel – er muss nur mit Inhalt gefüllt werden.

- **[Critical] CRITICAL: Thin Content – 230 sichtbare Wörter gegen 1.500-4.000-Wort-Konkurrenz**
  - Live gemessen (Python, curl): 230 sichtbare Wörter gesamt auf der gesamten Homepage. Service-Karten haben 4–8 Wörter Beschreibungstext ('Automation, die im Tagesgeschäft mitarbeitet' = 6 Wörter, 'Eigener Server. DSGVO-konform. Wartbar.' = 5 Wörter). SERP-Benchmark für 'KI Agentur Bochum': mindestens 1.200 Wörter (aus Analyse der Top-10-Seiten). Vollständig fehlend: Prozessbeschreibung, Technologie-Stack, Branchenbeispiele, FAQ-Block, Case Studies, Über-uns-Abschnitt. Google hat keine ausreichende inhaltliche Grundlage zur Intent-Zuordnung der Seite.
  - *Fix:* Für jede der 4 Leistungskarten (AI-Agenten, Infrastruktur, Kassensysteme, CRM & Workflows) eine Beschreibung von 150-200 Wörtern schreiben – konkreter Nutzen, typischer Anwendungsfall, Technologie-Hinweis. Abschnitt 'Unser Ansatz' hinzufügen (4 Phasen: Analyse, Konzept, Bau, Betrieb – je 3-4 Sätze). FAQ-Block mit 5 realen Entscheiderfragen (z.B. 'Wie lange dauert ein AI-Agenten-Projekt?', 'Was kostet IT-Infrastruktur im laufenden Betrieb?', 'Sind eure Lösungen DSGVO-konform?'). Zielgröße: 1.200+ Wörter auf der primären Rankingpage.

- **[High] HIGH: Authority-Vacuum – kein Social Proof, kein Gründerprofil, Gmail als Kontakt**
  - Live verifiziert (Python grep auf vollständigem HTML): Keine Referenzen, Testimonials, Kunden-Logos oder Case Studies auf der Seite (grep auf 'referenz', 'testimonial', 'kunde' = False). Kontakt-Email ist goekhan.koese@gmail.com (live im HTML sichtbar) – kein Business-Domain-Email. Kein LinkedIn-Link (grep = False). Kein Gründerfoto. In JSON-LD nur 'founder': 'Gökhan Köse' als String ohne URL. Alle 10 analysierten SERP-Wettbewerber haben mindestens Gründer-Bio oder Team-Sektion. Gmail-Adresse für B2B-Entscheider ein messbarer Vertrauenssignal-Verlust.
  - *Fix:* (a) Business-Email hallo@koeseo.de anlegen und als primären Kontakt einsetzen – Gmail ersetzen im HTML + Schema. (b) Abschnitt 'Wer steckt dahinter' mit Gründer-Foto und 3-4-zeiliger Bio ('Gökhan Köse, Bochum. 10+ Jahre IT-Infrastruktur...'). (c) Mindestens 2 anonymisierte Projektreferenzen als konkreten Block ('Mittelstand-Kunde, Ruhrgebiet, 50 MA: AI-Agenten für Posteingang – 4h Zeitersparnis/Tag'). (d) LinkedIn-Profil verlinken + sameAs in Schema einbinden.

- **[High] HIGH: Schema unvollständig – telephone, sameAs, openingHours, Service-Schemas fehlen**
  - Live verifiziert (Python grep auf JSON-LD-Block): ProfessionalService + address + founder + vatID vorhanden. Fehlend: telephone (grep = False), sameAs (grep = False), openingHoursSpecification (grep = False), aggregateRating, priceRange. Keine @type Service-Blöcke für die 4 Leistungen. Kein FAQPage-Schema. Ohne telephone und openingHours ist die Seite nicht Local-Pack-fähig – der 3-Treffer-Block bei standortbezogenen Suchanfragen bleibt unerreichbar.
  - *Fix:* JSON-LD erweitern um: telephone (auch wenn Kontaktform bevorzugt – für Local Pack nötig), sameAs mit LinkedIn-URL, openingHoursSpecification Mo-Fr 09:00-18:00, priceRange '€€'. Für jede der 4 Leistungen einen @type Service-Block hinzufügen (name, description, provider). FAQPage-Schema anlegen, sobald FAQ-Abschnitt existiert.

- **[High] HIGH: Null Media – kein einziges Bild auf der gesamten Seite**
  - Live verifiziert: HTML enthält 0 <img>-Tags. Kein Team-Foto, kein Projekt-Screenshot, kein Logo, keine Infografik, kein og:image. Alle 10 analysierten SERP-Wettbewerber haben mindestens ein Team-Foto und ein grafisches Element. Google Image-Search: koeseo.de liefert keinen indexierbaren Bild-Content. Fehlende og:image-Angabe bedeutet leeres Snippet beim Teilen auf LinkedIn und X/Twitter.
  - *Fix:* Mindestens 3 Bilder einbinden: (1) Profilfoto Gökhan Köse im Gründer-Abschnitt (WebP, alt='Gökhan Köse, KI-Agentur Bochum'), (2) abstraktes Leistungs-Visual (Server/Netzwerk-Kontext, alt='IT-Infrastruktur Bochum – koeseo'), (3) og:image 1200×630px für Social-Snippets. Alle Bilder mit sprechenden alt-Attributen und Bochum-Keyword.

- **[Medium] MEDIUM: Canonical-Tag und Twitter/X-Cards fehlen**
  - Live verifiziert (Python grep = False für beide): Kein <link rel='canonical'> im Head. Kein twitter:card, twitter:title, twitter:description Meta-Tag. og:image fehlt. Beim Teilen auf LinkedIn oder X erscheint ein leeres Snippet ohne Vorschaubild. Canonical-Fehlen erhöht das Risiko von Duplicate-Content-Signalen wenn die Seite über http:// oder mit Trailing-Slash-Varianten gecrawlt wird.
  - *Fix:* Head ergänzen um: <link rel='canonical' href='https://koeseo.de/'>, <meta name='twitter:card' content='summary_large_image'>, <meta name='twitter:title'>, <meta name='twitter:description'>, <meta name='twitter:image'>. og:image mit 1200×630px-Bild belegen (identisch mit Twitter-Image kann verwendet werden).

- **[Medium] MEDIUM: robots.txt und sitemap.xml fehlen – beide 404**
  - Aus Basis-Fakten bekannt (nicht erneut geprüft per Aufgabenstellung): robots.txt = 404, sitemap.xml = 404. GSC-Zugang ist konfiguriert (laut Basis-Fakten: sc-domain:koeseo.de, Service Account aktiv) – GSC meldet fehlende Sitemap als Fehler. Googlebot crawlt ohne Steuerungsdatei.
  - *Fix:* robots.txt anlegen: 'User-agent: * / Allow: / / Sitemap: https://koeseo.de/sitemap.xml'. sitemap.xml mit den 5 bekannten Seiten erstellen (/, /impressum, /datenschutz + ggf. /leistungen, /kontakt wenn als eigene URLs geplant). Sitemap in GSC einreichen.

- **[Medium] MEDIUM: Kontaktform-CTA zu hochschwellig – 'Erstgespräch'-Framing fehlt**
  - CTA-Text live: 'Projekt anfragen' (Hero-Button) und 'Anfrage senden' (Form-Submit). SERP-Wettbewerber formulieren niedrigschwelliger: 'Kostenloses 30-min Erstgespräch', 'Kostenlose KI-Potenzialanalyse', 'Unverbindlich anfragen'. Der aktuelle Wortlaut setzt ein laufendes Projekt voraus – schließt Entscheider in der Orientierungsphase aus. User Story: Als Mittelstands-GF will ich einen unverbindlichen Erstkontakt, kein sofortiges Projekt-Briefing.
  - *Fix:* Hero-CTA umbenennen zu 'Kostenloses Erstgespräch anfragen'. Form-Headline ändern zu '30 Minuten. Klarer Vorschlag.' (oder 'Unverbindliches Erstgespräch – Rückmeldung innerhalb 24 h'). Optional: Kalender-Widget (Calendly o.ä.) als zweite CTA-Option neben dem Formular einbinden.

- **[Low] LOW: HSTS-Header fehlt**
  - Live verifiziert (curl -sI Header-Check, 2026-07-19): Strict-Transport-Security Header ist nicht im Response vorhanden. Die anderen 4 Security-Header sind gesetzt. Ohne HSTS können Downgrade-Attacken auf HTTP nicht ausgeschlossen werden; Browser zeigen keinen Preload-Status.
  - *Fix:* Nginx-Config ergänzen: add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains' always; – in den HTTPS-Server-Block. Nach stabiler Laufzeit (mind. 1 Monat) optional preload-Flag hinzufügen und auf hstspreload.org einreichen.

- **[Info] Info: Google Business Profile nicht mit Schema verknüpft – Local Pack unerreichbar**
  - Kein sameAs-Eintrag in JSON-LD (live verifiziert). Kein GBP-Link. Für die Query 'KI Agentur Bochum' gibt es ein potenzielles Local 3-Pack SERP-Feature. Ohne verifiziertes GBP mit Übereinstimmung zu NAP (Name/Adresse/Telefon) in Schema ist koeseo dort nicht sichtbar. SERP-Wettbewerber ohne echte Bochumer Adresse können dieses Feature nicht belegen – koeseo könnte es exklusiv besetzen.
  - *Fix:* Google Business Profile für koeseo / Gökhan Köse anlegen und verifizieren (Annastraße 27, 44793 Bochum). Kategorie: 'IT-Dienstleistungen' oder 'Software-Unternehmen'. GBP-URL als sameAs in JSON-LD eintragen. telephone und openingHours in Schema ergänzen (Voraussetzung für Local Pack Eligibility). Wenn GBP aktiv: LinkedIn, Xing und ggf. Branchenverzeichnisse (wlw.de, yelp.de) als weitere sameAs-Einträge.

### Local SEO — 26/100

**Was funktioniert:**
- NAP intern vollständig konsistent: Annastraße 27, 44793 Bochum identisch in JSON-LD (streetAddress/addressLocality/postalCode/addressCountry) und sichtbarem HTML (<dd>Annastraße 27<br>44793 Bochum</dd>) — keine Diskrepanz zwischen Quellen.
- Lokales Geo-Signal in Hero-Section: <div class="hero-eyebrow">Bochum</div> plus Meta-Description 'Aus Bochum.' — Bochum-Erwähnung ist dreifach verankert (Hero, Meta, Adressblock).
- Schema-Typ ProfessionalService korrekt für B2B-IT-Consulting — kein falscher Typ wie generisches 'LocalBusiness' oder veraltetes 'Attorney'. vatID (DE327767879) und founder ('Gökhan Köse') im Schema erhöhen Trust-Signal für Google DE.
- Impressum (/impressum) und Datenschutz (/datenschutz) existieren und sind korrekt verlinkt — erfüllt deutsche Impressumspflicht, die von Google als Qualitätssignal gewertet wird.
- Kontaktformular auf der Homepage vorhanden mit Named-Fields (Name, E-Mail, Unternehmen, Nachricht) — senkt Konversionshürde für lokale B2B-Anfragen.
- Security-Header gesetzt (x-content-type-options, x-frame-options, referrer-policy) — technische Basis für E-E-A-T-Signale vorhanden.

**Findings:**

- **[Critical] Kein Google Business Profile nachweisbar**
  - Wigolo-Websuche nach 'koeseo Bochum Gökhan Köse' liefert keinen Treffer auf Google Maps, business.google.com oder Local Pack. JSON-LD enthält kein 'sameAs'-Feld das auf ein GBP-Profil zeigt. Keine Maps-Einbettung, kein Reviews-Widget, kein Place-Indicator auf der Seite. Alle sozialen/GBP-Links FEHLEN (geprüft: linkedin, xing, maps.google, business.google, facebook, instagram). Laut Whitespark 2026 ist GBP-Kategorie der #1 Ranking-Faktor (Score 193) — ohne aktives GBP ist ein Erscheinen im Local Pack für 'IT Dienstleister Bochum' oder 'KI Beratung Bochum' faktisch ausgeschlossen. Für B2B-IT-Dienstleister ist GBP relevant: Entscheider googeln lokale Anbieter.
  - *Fix:* Sofort GBP-Profil anlegen unter business.google.com mit Kategorie 'IT-Unternehmen' (primär) + 'Unternehmensberatung' (sekundär). Verifikation per Postkarte an Annastraße 27, 44793 Bochum. Nach Verifikation: sameAs im JSON-LD ergänzen. Wöchentlich mindestens 1 GBP-Post publizieren (18-Tage-Regel für Review-Velocity gilt analog für Post-Frequenz).

- **[Critical] Telefonnummer fehlt auf der gesamten Website (alle Seiten geprüft)**
  - Geprüfte Seiten: / (Homepage), /impressum, /datenschutz — auf KEINER Seite ist eine Telefonnummer vorhanden. Regex-Suche nach deutschen Rufnummernmustern (+49..., 0xxx..., tel:...) ergab null Treffer. Das JSON-LD-Schema hat 'telephone'-Feld nicht gesetzt. Die Kontaktsektion zeigt nur E-Mail (goekhan.koese@gmail.com) und Adresse. Für LocalBusiness-Schema ist 'telephone' ein empfohlenes Pflichtfeld. Ohne Telefon: (1) NAP ist unvollständig gegenüber externen Verzeichnissen, (2) Google kann GBP und Website nicht sauber abgleichen, (3) B2B-Kunden verlassen Seite ohne schnellen Kontaktweg.
  - *Fix:* Telefonnummer (Mobilnummer oder Festnetz) auf Homepage, Impressum und in JSON-LD eintragen: im Schema telephone: '+49XXXXXXXXX'. Gleichzeitig in allen anzulegenden Verzeichnis-Einträgen identisch verwenden (NAP-Konsistenz). Falls keine Festnetznummer gewünscht: Mobilnummer genügt.

- **[Critical] Keine dedizierten lokalen Service-Seiten — /leistungen/ gibt 404**
  - GET https://koeseo.de/leistungen/ → 404. GET https://koeseo.de/leistungen → 404. Alle 4 beworbenen Services (AI-Agenten, Infrastruktur, Kassensysteme, CRM & Workflows) sind nur als 3-Zeilen-Blöcke auf der 7,4 KB-Homepage vorhanden. Whitespark 2026: 'Dedicated service pages = #1 local organic factor, #2 AI visibility factor.' Direkte Konkurrenz: kibrains.de/ki-beratung-bochum/ hat 95 KB Inhalt auf einer dedizierten Seite mit LocalBusiness-Schema, telephone, areaServed, Fallstudien. Die Homepage hat ~400 Wörter sichtbaren Text — unzureichend für local-keyword-Abdeckung. Keyword-Lücken bestätigt: 'KI Beratung Bochum', 'AI Agenten Bochum', 'Kassensysteme Bochum', 'IT Infrastruktur Ruhrgebiet' alle ohne koeseo-Abdeckung.
  - *Fix:* Je eine dedizierte Unterseite anlegen: /ki-agenten-bochum, /it-infrastruktur-bochum, /kassensysteme-bochum, /crm-workflows-bochum. Jede Seite: min. 800 Wörter, eigenes LocalBusiness-Schema mit serviceType + areaServed + Bochum/Ruhrgebiet-Geo-Modifier in H1. Priorität: /ki-agenten-bochum (differenzierender USP, geringe Konkurrenz). Opportunity: 'AI Automatisierung Ruhrgebiet' zeigt in aktueller Suche praktisch keine direkten Mitbewerber.

- **[High] Schema unvollständig: 6 empfohlene Properties fehlen**
  - Geprüftes JSON-LD: @type=ProfessionalService. Vorhanden: name, description, url, email, address (vollständig), founder, vatID. FEHLEND: (1) telephone — kein Eintrag, (2) geo — keine Koordinaten (Whitespark: geo mit 5-Dezimalstellen-Präzision empfohlen), (3) openingHoursSpecification — 'Werktags innerhalb 24 Stunden' ist nur als Plaintext sichtbar, nicht maschinenlesbar, (4) sameAs — kein Link zu GBP, LinkedIn, Xing, (5) aggregateRating — kein Block, (6) image/logo — kein Bild-URL. Competitor kibrains.de hat telephone, areaServed, serviceType[] im Schema. Das fehlende sameAs verhindert Google-Knowledge-Panel-Generierung.
  - *Fix:* Schema erweitern: telephone, geo ({latitude: 51.47XXX, longitude: 7.22XXX — echte Koordinaten ermitteln via nominatim.openstreetmap.org?q=Annastraße+27+Bochum}), openingHoursSpecification ({dayOfWeek: [Monday-Friday], opens: '08:00', closes: '18:00'}), sameAs: [GBP-URL, Xing-URL, LinkedIn-URL], areaServed: {name: 'Bochum'} plus {name: 'Ruhrgebiet'}. Nach GBP-Erstellung sameAs eintragen.

- **[High] Null verifizierte externe Citations in deutschen Verzeichnissen**
  - Geprüft (live): Gelbe Seiten (suche/it-infrastruktur/bochum, 89 KB geladen) — koeseo NICHT gefunden. 11880.com (68 KB Seite geladen) — koeseo NICHT gefunden. companyhouse.de — nur Blockchainhotel GmbH gefunden (Gökhan Köse als Geschäftsführer, nicht koeseo-Brand). feedbax.de/it-systemhaus/bochum — Cloudflare-Block, kein direktes Ergebnis. wlw.de — 404. Yelp.de — 403. Laut Whitespark 2026: 3 der Top-5 AI-Visibility-Faktoren sind citation-related. Für 'KI Beratung Bochum' ranken Mitbewerber mit deutlich mehr Citations. Besonders kritisch für Deutschland: Xing-Firmenprofil fehlt (B2B-Standard DE).
  - *Fix:* Sofort-Einträge anlegen (Priorität): (1) Xing-Firmenprofil mit koeseo-Brand und NAP, (2) Gelbe Seiten (kostenloser Basis-Eintrag), (3) 11880.com, (4) wlw.de (Wer liefert was — B2B-spezifisch), (5) europages.de (B2B-Verzeichnis), (6) LinkedIn-Unternehmensseite. Alle Einträge: identische NAP (Name 'koeseo', Annastraße 27, 44793 Bochum, +49XXXXXX). Nach GBP-Erstellung: Google-Maps-URL in alle Einträge als sameAs-Äquivalent aufnehmen.

- **[High] Keine Reviews / Reputation-Daten auf keinem Kanal**
  - aggregateRating fehlt in JSON-LD. Kein Reviews-Widget auf der Seite. GBP nicht bestätigt, also keine GBP-Reviews ermittelbar. Kein Xing-/LinkedIn-Empfehlungsblock. Kein eingebetteter Testimonial mit strukturierten Daten. Sterling Sky 18-Tage-Regel: Rankings fallen ab, wenn GBP 3 Wochen keine neue Bewertung erhält — ohne aktives GBP hat koeseo de facto null Review-Velocity. Für B2B-IT besonders kritisch: Entscheider validieren Anbieter über Bewertungen bevor Erstkontakt.
  - *Fix:* Nach GBP-Aktivierung: bestehende Kunden direkt nach Bewertung fragen (Direkt-URL aus GBP-Dashboard). Ziel: min. 1 Bewertung/Monat. Zusätzlich: 2-3 Testimonials als Zitate auf Homepage eintragen (mit Review-Schema @type=Review + author + reviewRating + reviewBody), sodass aggregateRating befüllt werden kann. Auch Xing-Empfehlungen aktiv einfordern.

- **[Medium] H1/H2 ohne lokalen Geo-Modifier — kein Keyword-Targeting**
  - H1: 'AI & IT-Infrastruktur.' — kein Orts-Modifier. H2-1: 'Was wir bauen.' H2-2: 'Kurzes Briefing, klarer Vorschlag.' — beide ohne Bochum/Ruhrgebiet. Weder 'Ruhrgebiet' noch 'NRW' erscheinen im Text. Keyword-Analyse: 'KI Beratung Bochum' wird von kibrains.de (H1: 'KI Beratung Bochum'), mentor-consulting.de (/ki-beratung/bochum/ mit vollem Seiten-Content), dein-copilot.de (/ki-agentur/bochum) abgedeckt. 'AI Agenten Bochum' und 'Kassensysteme Bochum' zeigen bei Wigolo-Suche keine direkten Mitbewerber — Opportunity-Fenster offen.
  - *Fix:* H1 der Homepage anpassen: z.B. 'AI & IT-Infrastruktur für Bochum und das Ruhrgebiet.' oder 'KI-Agenten und IT-Infrastruktur. Aus Bochum.' Service-Blocks um Orts-Kontext ergänzen: 'AI-Agenten für Bochumer Mittelstand'. Ruhrgebiet als Catchment-Area explizit nennen. Für Service-Seiten: Geo-Modifier in URL-Slug + H1 Pflicht.

- **[Medium] Kein sameAs und keine sozialen/professionellen Profile verlinkt**
  - Alle Externen Links auf koeseo.de geprüft: ausschließlich interne Anchors (#leistungen, #kontakt, /) und zwei mailto:-Links. Kein LinkedIn, kein Xing, kein GitHub, kein Twitter/X, kein Instagram. Für einen AI/IT-B2B-Anbieter 2026 ist das Fehlen eines LinkedIn- und Xing-Links ein Vertrauens- und E-E-A-T-Signal-Defizit. sameAs im Schema leer — verhindert Google Knowledge-Panel-Bildung und Brand-Entity-Disambiguation (Verwechslungsgefahr mit Köse Ingenieure GmbH, die in Suchergebnissen dominiert).
  - *Fix:* Xing- und LinkedIn-Profile anlegen und beide in sameAs-Array im JSON-LD aufnehmen. Links im Footer der Website platzieren. Nach GBP-Erstellung: GBP-URL ebenfalls in sameAs. Priorität Xing > LinkedIn für deutschen B2B-Kontext. GitHub-Profil verlinken falls Repositories existieren (IT-Credibility-Signal).

- **[Medium] Gmail-Adresse als Geschäftskontakt in Schema und auf Website**
  - goekhan.koese@gmail.com erscheint in: JSON-LD (email-Feld), Homepage Kontaktbereich, Impressum. Eine @gmail.com-Adresse als primärer Geschäftskontakt wirkt für B2B-Entscheider unestablished. Google kann zudem keine saubere Domain-Authority-Verknüpfung zwischen E-Mail und Domain herstellen. Für das GBP-Profil sollte eine @koeseo.de-Adresse verwendet werden.
  - *Fix:* @koeseo.de E-Mail-Adresse einrichten (z.B. hallo@koeseo.de oder gk@koeseo.de) und in JSON-LD, Kontaktformular, Impressum und GBP-Profil als primären Kontakt setzen. Gmail als Weiterleitung behalten. Zusatz: MX-Record für koeseo.de prüfen/einrichten.

- **[Medium] Sitemap, robots.txt und Canonical-Tag fehlen**
  - Geprüft via curl: https://koeseo.de/sitemap.xml → 404. https://koeseo.de/sitemap_index.xml → 404. https://koeseo.de/robots.txt → 404. Canonical-Tag im <head>: FEHLT (kein <link rel='canonical'>). Für eine 5-Seiten-Website ist der Schaden begrenzt, aber: GSC erwartet eine Sitemap für vollständige Index-Abdeckung. Canonical fehlt bedeutet: Google muss selbst entscheiden ob / und /# als Duplikat behandelt werden. Bei späterem Aufbau von Service-Seiten (z.B. /ki-agenten-bochum vs. /leistungen) wird Canonical-Disziplin kritisch.
  - *Fix:* Sitemap.xml anlegen mit allen URLs (/, /impressum, /datenschutz + alle künftigen Service-Seiten). In GSC einreichen (Service Account ist konfiguriert). robots.txt mit 'Sitemap: https://koeseo.de/sitemap.xml' anlegen. Canonical <link rel='canonical' href='https://koeseo.de/'> im <head> ergänzen.

- **[Low] Kein og:image und keine Twitter Cards — Social-Sharing-Lücke**
  - OpenGraph: 5 Tags vorhanden (og:title, og:description, og:type, og:url, og:locale) — aber kein og:image. Twitter-Cards: komplett absent (kein twitter:card, twitter:title, twitter:description, twitter:image). Ohne og:image generiert jeder Social-Share (LinkedIn-Post, WhatsApp-Link) keinen visuellen Preview. Für B2B-Content-Marketing und lokale Empfehlungsketten ist das ein Conversion-Verlust.
  - *Fix:* og:image hinzufügen: 1200×630px PNG/WebP mit koeseo-Logo auf dunklem Hintergrund (passt zum aktuellen Design-Stil). Twitter-Cards ergänzen: <meta name='twitter:card' content='summary_large_image'> plus title/description/image. Beides direkt aus dem og:-Werten ableitbar.

- **[Info] B2B Local SEO Kontext: Proximity-Realismus und Keyword-Chancen**
  - Proximity erklärt 55,2% der Ranking-Varianz (Search Atlas ML-Studie) — Bochum-Zentrierung ist richtig, außerhalb der Einflusszone des Audits. Echter Wettbewerb für 'KI Beratung Bochum': kibrains.de (Rang 1-3, 95 KB Seite, LocalBusiness-Schema, Testimonials), mentor-consulting.de (dedizierte /ki-beratung/bochum/ URL), dein-copilot.de. Freie Keyword-Chancen (wenig oder keine Mitbewerber in Wigolo-Suche): 'AI Agenten Bochum', 'Kassensysteme Bochum TSE', 'IT Automatisierung Ruhrgebiet', 'DSGVO Server Bochum'. Als Solo-Operator ohne GBP und ohne dedizierte Seiten ist kurzfristiger Local-Pack-Rank nicht realistisch. Priorität: GBP + 2-3 Service-Seiten + 5 Verzeichnis-Einträge — das ist der Sprung von Score 26 auf ~60 in 6-8 Wochen.
  - *Fix:* Nicht auf breite Keyword-Masse setzen. Fokus-Strategie für Solo-Operator: (1) GBP anlegen + verifizieren (2 Wochen), (2) /kassensysteme-bochum als ersten Seiten-Sprint (niedrigste Mitbewerber-Dichte), (3) Xing + Gelbe Seiten + 11880 gleichzeitig (1 Tag Aufwand), (4) 3 ehemalige Kunden um GBP-Bewertung bitten. Diese 4 Schritte decken die größten Score-Hebel ab.

### Schema / Structured Data — 55/100

**Was funktioniert:**
- ProfessionalService JSON-LD vorhanden (schema.org-konform, im <head>)
- Enthaelt name, description, url, email, address (Annastrasse 27 Bochum), founder, vatID DE327767879
- Genau 1 valider JSON-LD-Block, kein Syntaxfehler

**Findings:**

- **[High] JSON-LD unvollstaendig — telephone, sameAs, serviceType, priceRange, areaServed fehlen**
  - Der ProfessionalService-Block hat die Basis, aber keine Vertrauens-/Entitaets-Felder: kein telephone, kein sameAs (LinkedIn/Xing), kein serviceType je Leistung, kein priceRange, kein areaServed. Schwaecht Rich-Result- und Knowledge-Graph-Eignung.
  - *Fix:* Erweitern um telephone, sameAs (LinkedIn), serviceType (AI-Agenten/IT-Infrastruktur/Kassensysteme/CRM), priceRange, areaServed (NRW). Typ ggf. auf LocalBusiness spezialisieren.

- **[Medium] Kein Service-, FAQPage- oder BreadcrumbList-Schema**
  - Nur ein Organisations-Block. Keine Service-Objekte je Leistung, keine FAQPage (starker AI-Citation-/Rich-Result-Hebel), keine BreadcrumbList.
  - *Fix:* Pro Leistung ein Service-JSON-LD; FAQPage mit 4-6 echten Fragen (Kosten, DSGVO bei eigenem Server, Ablauf); BreadcrumbList sobald Unterseiten existieren.

- **[Medium] Gmail-Adresse im Schema statt Domain-E-Mail**
  - email = goekhan.koese@gmail.com im JSON-LD und auf der Seite — B2B-Vertrauenssignal-Schwaeche.
  - *Fix:* Auf Domain-E-Mail (z.B. info@koeseo.de via Mailcow) umstellen — ueberall (Schema + sichtbar).
