RelioMedia Self-Audit — Phase 1 (Technische Schicht)
Stand: Mai 2026 Erhebungs-Datum: 2026-05-15 Gegenstand: reliomedia.de (DE + EN) Methode: Phase 1 — ausschließlich Code-Analyse, robots.txt/llms.txt/Sitemap, Schema-Markup, semantische HTML-Struktur, Production-Build-Auswertung. Keine LLM-Cold-Recognition-Tests, keine Citation-Frequenz-Messung, keine Wikidata-Lookups. Diese Datenpunkte sind Phase 2 (n8n-Two-Stage-Pipeline) und in diesem Bericht durchgängig als „nicht erhoben — Phase 2 via Pipeline" markiert.
1. Executive Summary
Status quo: Die technische GEO-Grundlage der Site ist überdurchschnittlich solide aufgesetzt — die wesentlichen Architektur-Hebel (Bot-Zugang, Schema-Engineering, semantische HTML-Struktur, llms.txt-Manifest) sind vorhanden und in sich konsistent; offen sind primär Entity-Verlinkungs- und Sichtbarkeits-Messungen, die Phase 2 erfordern.
Drei zentrale technische Erkenntnisse:
AI-Crawler-Zugang ist explizit allow-listed, nicht impliziter Default. Die
robots.txtlistet 12 namentliche User-Agents (GPTBot, ChatGPT-User, OAI-SearchBot, PerplexityBot, Perplexity-User, ClaudeBot, Claude-Web, anthropic-ai, Google-Extended, cohere-ai, CCBot, Diffbot, FacebookBot) mit jeweils eigenemAllow: /. Das ist konservativer als der häufigeUser-agent: * → Allow: /und verhindert, dass spätere Default-Verschärfungen die Crawler-Zugriffe unerwartet sperren.Schema-Markup ist tief verschachtelt und Graph-konsistent. Es existieren 8 wiederverwendbare Schema-Komponenten in
src/components/seo/SchemaScripts.tsx:OrganizationSchema,WebSiteSchema,GeoServiceSchema,ServiceSchema,PersonSchema,FaqSchema,BreadcrumbSchema,ArticleSchema. Alle nutzen stabile@id-Referenzen (${SITE.url}/#organization,${SITE.url}/#younes-graebneretc.) — Schema.org-Graph ist über Pages hinweg konsistent verknüpfbar.llms.txt + llms-full.txt sind kohärent zur tatsächlichen Code-Realität. Keine Halluzinationen über nicht-existente Tools, korrekte Pfade, Team-Sektion stimmt mit
src/lib/site.tsüberein (Younes Gräbner als Founder/Inhaber, Paul Richter als Head of Tech & Operations).
Drei Sofortmaßnahmen mit höchstem Hebel (Details siehe Sektion 5):
- P1: Organization-Schema-
sameAs-Feld aktivieren, sobald die LinkedIn-Company-Page von RelioMedia verifiziert online ist. Aktuell ist dersameAs-Block bewusst leer (Anti-Halluzinations-Klausel im Code-Kommentar) — sobald die Profile real verfügbar sind, ist die Aktivierung ein 4-Zeilen-Edit mit substanziellem Entity-Signal. - P1: Founding-Year-Konsistenz prüfen —
SITE.foundingYear: "2025"im Code, "gegründet 2025" inllms-full.txt. Der Stand "Mai 2026" wirkt korrekt, aber Founding-Year sollte verifiziert sein (Gewerbeanmeldung-Datum). Wenn das Datum 2025 korrekt ist, ist nichts zu tun. - P2: PersonSchema und ArticleSchema auf den noch ausstehenden Lab-Reports anwenden, sobald die Lab-Sektion live geschaltet wird. Die Komponenten sind vorhanden, werden aber bisher nur in
/ueber-uns(PersonSchema) und gar nicht für Articles verwendet.
GEO-Score-Tabelle (technisch messbare Subscores):
| Subscore | Bewertung | Quelle |
|---|---|---|
| Crawler-Access (Bot-Zugang) | Hoch | public/robots.txt, 12 AI-Bots namentlich allow-listed |
| Schema-Markup-Coverage | Hoch | 8 Schema-Komponenten, Graph-konsistente @id-Verknüpfung |
| Semantische HTML-Struktur | Hoch | <main id="main">, <nav>, <aside>, <article>, <section> durchgehend genutzt; Skip-to-Content-Link in src/app/[locale]/layout.tsx |
| llms.txt-Hygiene | Hoch | llms.txt + llms-full.txt vorhanden, konsistent zum Code, kein erfundener Inhalt |
| Performance (Bundle-Größen) | Hoch | Shared First Load 103 kB, Home 178 kB, Content-Pages 108–115 kB — siehe Build-Output Sektion 3.e |
| LLM-Cold-Recognition | nicht erhoben — Phase 2 | Erfordert Perplexity/ChatGPT/Claude-Tests |
| Citation-Rate pro Engine | nicht erhoben — Phase 2 | Erfordert n8n-Pipeline-Prompt-Matrix |
| Konkurrenz-Sichtbarkeits-Index | nicht erhoben — Phase 2 | Erfordert Konkurrenz-Definition + Vergleichstests |
| Wikidata-/Wikipedia-Eintrag | nicht erhoben — Phase 2 | Erfordert manuellen Lookup oder API-Call |
| Sentiment der Erwähnungen | nicht erhoben — Phase 2 | Folgt auf Citation-Rate-Erhebung |
Kein Gesamtscore — der Visibility-Anteil fehlt; eine technische Bereitschafts-Note ohne Sichtbarkeits-Validierung wäre irreführend.
2. Sichtbarkeits-Audit
Diese Sektion ist in Phase 1 überwiegend Platzhalter. Erhebbar sind nur die statischen Crawler-Zugänglichkeits-Signale.
2.1 Indexierbarkeit
- robots.txt: Vorhanden unter
public/robots.txt.User-agent: *mitAllow: /plusDisallow: /api/(sinnvoll, der API-Pfad würde Worker-Endpoints enthalten, falls aktiv). - Sitemap: Generiert dynamisch über
src/app/sitemap.tsmitoutput: 'force-static'. Enthält alle 12 Locale-Routes für DE und EN, plus hreflang-Alternates pro Eintrag. Sitemap-URL:https://reliomedia.de/sitemap.xml. Verknüpft inrobots.txtZeile 48. - noindex-Tags:
/datenschutzund/agbhabenrobots: { index: false, follow: true }in ihrengenerateMetadata-Funktionen — semantisch korrekt (Legal-Seiten müssen folgbar bleiben für Crawler-Discovery, sollen aber nicht ranken). Alle anderen Pages erlauben Indexierung. - X-Robots-Tag-Header: nicht erhoben — würde Live-Site-Fetch erfordern, nicht statisch im Repo prüfbar.
2.2 Sitemap-Qualität
Aus src/app/sitemap.ts:
| Pfad | Priorität | Change-Frequency |
|---|---|---|
/ |
1.0 | weekly |
/audit |
0.9 | weekly |
/pilot |
0.9 | weekly |
/leistungen |
0.9 | monthly |
/methode |
0.8 | monthly |
/geo |
0.9 | monthly |
/tools |
0.7 | monthly |
/ueber-uns |
0.6 | monthly |
/kontakt |
0.6 | monthly |
/impressum |
0.2 | yearly |
/datenschutz |
0.2 | yearly |
/agb |
0.2 | yearly |
Pro Eintrag werden hreflang-Alternates für DE und EN gerendert. lastModified wird zur Build-Zeit gesetzt.
2.3 llms.txt / llms-full.txt
public/llms.txt — kompaktes Manifest (38 Zeilen). Enthält Tagline, Was-wir-machen (1 Satz), Kontakt-Block, Team (Younes Gräbner als Inhaber + Founder, Paul Richter als Head of Tech & Operations), Wichtige-Seiten-Liste mit 11 absoluten URLs (alle DE-Locale), EN-Variante als optionaler Hinweis. Keine erfundenen Pages, keine Tools, die im Code fehlen.
public/llms-full.txt — Vollständiger Site-Content-Dump. Über-die-Firma-Block in Zeile 7 nennt korrekt "Younes Gräbner — RelioMedia, Einzelunternehmen, Inhaber Younes Gräbner". Team-Sektion in Zeile 60–67 und ausführliche Bios in Zeile 199–204 sind nach dem letzten Rechtsform-Fix aktuell.
2.4 Phase 2 (explizit nicht erhoben)
- Test-Prompt-Matrix (10–11 branchen-typische Anfragen zur GEO-Sichtbarkeit von RelioMedia und DACH-B2B-GEO-Agenturen allgemein): nicht erhoben — Phase 2 via Pipeline.
- Konkurrenz-Sichtbarkeits-Index (Listung der relevanten DACH-GEO-/SEO-Beratungen, Citation-Rate-Vergleich): nicht erhoben — Phase 2.
- Engine-Cold-Recognition ("Was ist RelioMedia?" in Perplexity, ChatGPT, Claude): nicht erhoben — Phase 2.
3. Technisches Audit
Kern dieser Phase 1. Alle Befunde direkt aus dem Repo bzw. dem Production-Build belegbar.
3.a Crawler-/Bot-Zugang
Aus public/robots.txt:
| Bot | User-Agent-String | Status | Belegzeile |
|---|---|---|---|
| GPTBot | GPTBot |
Explizit erlaubt (Allow: /) |
robots.txt L9 |
| ChatGPT-User | ChatGPT-User |
Explizit erlaubt | L12 |
| OAI-SearchBot | OAI-SearchBot |
Explizit erlaubt | L15 |
| PerplexityBot | PerplexityBot |
Explizit erlaubt | L18 |
| Perplexity-User | Perplexity-User |
Explizit erlaubt | L21 |
| ClaudeBot | ClaudeBot |
Explizit erlaubt | L24 |
| Claude-Web | Claude-Web |
Explizit erlaubt | L27 |
| anthropic-ai | anthropic-ai |
Explizit erlaubt | L30 |
| Google-Extended | Google-Extended |
Explizit erlaubt | L33 |
| cohere-ai | cohere-ai |
Explizit erlaubt | L36 |
| CCBot | CCBot |
Explizit erlaubt | L39 |
| Diffbot | Diffbot |
Explizit erlaubt | L42 |
| FacebookBot | FacebookBot |
Explizit erlaubt | L45 |
Wildcard-Default: User-agent: * → Allow: / / Disallow: /api/ (L4–6). API-Pfad blockiert, sinnvoll wenn dort später ein Cloudflare-Worker-Endpoint hängt.
Bewertung: Keine impliziten Defaults, keine bekannten AI-Crawler vergessen. Frühadopter-Konstellation.
3.b Schema.org / JSON-LD-Inventur
Definiert in src/components/seo/SchemaScripts.tsx (8 Komponenten), gemountet wie folgt:
| Komponente | Schema-Type | Wo gemountet | Beobachtungen |
|---|---|---|---|
OrganizationSchema |
Organization |
Globaler [locale]/layout.tsx Z44 — auf jeder Page |
legalName: "Younes Gräbner — RelioMedia", address, contactPoint, knowsAbout-Liste mit 9 GEO-Topics, founders per Filter auf Younes (Einzelunternehmen), areaServed: DE/AT/CH. Keine sameAs (bewusst leer bis verifizierte Profile vorhanden — Code-Kommentar dokumentiert) |
WebSiteSchema |
WebSite |
Globaler [locale]/layout.tsx Z45 — auf jeder Page |
inLanguage, publisher-Ref auf #organization, potentialAction (SearchAction auf /geo?q=…) |
GeoServiceSchema |
Service |
Home + Leistungen (Page-Komponenten) | serviceType: "Generative Engine Optimization", generisch — referenziert von ServiceSchema-Einträgen |
ServiceSchema |
Service |
Leistungen-Pricing-Tiers, Pilot-Page, Audit-Page | Pro Tier ein eigenes Service-Schema mit offers-Array (Mini = €0, Pilot = €1450/€4500, Retainer = ab €999) |
PersonSchema |
Person |
/ueber-uns für beide Founder |
@id matched mit Organization.founders[]-Reference; sameAs zu LinkedIn wenn URL nicht auf -reliomedia endet (Placeholder-Filter) — bei echten URLs greift, also aktiv |
FaqSchema |
FAQPage |
Home (10 FAQ-Items) + /geo (8 FAQ-Items) |
mainEntity als Question-Array mit acceptedAnswer.Answer |
BreadcrumbSchema |
BreadcrumbList |
Auf allen Pages außer Home (jeweils im Page-Body) | Position-basierte ListItems, jeweils Name + URL |
ArticleSchema |
Article |
Definiert, aber noch nirgends gemountet (Lab-Reports noch nicht live) | Bereit für künftige Lab-Page-Integration |
Auffälligkeiten:
- Graph-Konsistenz: Alle Schemas nutzen stabile
@id-URIs (#organization,#younes-graebner,#service-minietc.). LLMs und Crawler können die Entitäten über Page-Grenzen hinweg verknüpfen. - founders-Filter im OrganizationSchema:
SITE.founders.filter(f => f.slug === "younes-graebner")— bewusst nur Younes als Gründer, da Einzelunternehmen. Paul taucht über sein PersonSchema mitworksFor-Beziehung auf, ohne als Gründer markiert zu sein. Inhaltlich korrekt. sameAsauf Organization-Ebene leer. Code-Kommentar inOrganizationSchema(Z57–58): "Only include sameAs if any of the linked profiles are real / verified. Placeholder LinkedIn URLs are intentionally NOT added — schema must be honest." Sobald die LinkedIn-Company-Page (https://www.linkedin.com/company/reliomedia, derzeit inSITE.social.linkedinhinterlegt) verifiziert aktiv ist, sollte sie inssameAs-Array.PersonSchema.sameAsfür Founder ist aktiv: die inSITE.founders[].linkedinhinterlegten Real-URLs (paul-richter-5b63513b5,younes-graebner-23518a32a) passieren den Placeholder-Filter und landen im JSON-LD.ArticleSchemanoch ungenutzt. Wird erst mit dem Live-Schalten der Lab-Sektion relevant. Komponente bereit, Mount-Point fehlt.
3.c Semantische HTML-Struktur
Stichproben:
Globaler Layout-Rahmen (src/app/[locale]/layout.tsx):
<a href="#main" class="sr-only focus:not-sr-only …">Zum Hauptinhalt springen</a>— Skip-to-Content-Link, sichtbar bei Tastatur-Fokus, gut für A11y und Screen-Reader.<Nav />rendert<header class="sticky top-0 …">mit<nav aria-label="Hauptnavigation">(Desktop) +<nav aria-label="Hauptnavigation mobil">(Mobile-Drawer).<main id="main" class="min-h-[60vh]">mit dem Page-Content.<Footer />mit<footer>-Element.
Heading-Hierarchie Home (src/app/[locale]/page.tsx):
<h1>einmal im Hero (via<Hero />-Komponente).<h2>pro Section (Problem, What-we-do, Tools, Method, Founders, FAQ, Final CTA). Jeweilsheading-h2Token.<h3>für Sub-Cards (z.B. Tool-Cards, Pipeline-Steps, Founder-Card-Namen via<p font-semibold>— siehe Anmerkung unten).- Grep auf Heading-Elemente: 17 Treffer auf
<h[1-6]|<main|<article|<section|<nav|<aside>inpage.tsx. Sections sind über<section className="section-rm">strukturiert.
Heading-Hierarchie /geo (Pillar-Page):
<h1>einmal im Hero ("Generative Engine Optimization.").- TOC mit 10 IDs (
definition,mechanik,geo-vs-seo,engines-im-vergleich,schema-engineering,entity-mapping,author-authority,antwort-strukturen,messung-kpis,roadmap). Im Content-Component sind 10<h2 id="…">-Elemente — Grep bestätigt. <aside>für die Sticky-TOC (lg:sticky lg:top-24).<article class="prose-rm prose">wraps den Pillar-Inhalt.- FAQ-Section mit
<details>/<summary>-Elementen (semantisch korrekt für Accordion).
alt-Texte für Bilder:
/ueber-unsFounder-Image:alt={${f.name} — ${f.role/roleEn} bei RelioMedia}— beschreibend, semantisch.- Home FounderCard:
alt={${name}, ${role} bei RelioMedia}— analog. - Dekorative SVGs (Logo, KnowledgeGraph, OG-Image): nicht direkt geprüft, aber
Logo-Komponente nutztaria-hiddenoderrole="img"je nach Variante (nicht in dieser Audit-Tiefe verifiziert).
aria-Labels:
- Nav:
aria-label="Hauptnavigation"/"Hauptnavigation mobil". - Skip-Link: implizit über sichtbaren Text.
- Hamburger-Button:
aria-label="Menü schließen"/"Menü öffnen"+aria-expanded={open}. - Cal.com-Embed-Container:
aria-hidden="true"auf dem Lade-Platzhalter ("Lädt Kalender…"), korrekt da dekorativ. - Border-Linien als Trenner (z. B. in der Hero-Card):
aria-hidden="true".
Sprachauszeichnung:
<html lang="de">hardgekodet insrc/app/layout.tsxZ92. Mögliche Schwäche: Auf EN-Pages solltelang="en"gesetzt werden, nicht statisch"de". Da das Locale-Routing aber via Next.js erfolgt und HTML auf statischen Pages pro Locale gerendert wird, sollte das angepasst werden. Folgepunkt für Empfehlungen.- hreflang via
metadata.alternates.languagesauf allengenerateMetadata-Funktionen — pro Page DE/EN-Verknüpfung vorhanden.
3.d llms.txt-Hygiene
Vollständigkeitscheck public/llms.txt:
- Tagline ✓
- Was-wir-machen ✓
- Kontakt-Block (E-Mail, Telefon, Adresse) ✓
- Team (mit Inhaber-Vermerk) ✓
- Wichtige Seiten — 11 Links, alle absolute URLs auf
reliomedia.de/de/...✓ - EN-Hinweis + Verlinkung auf llms-full.txt ✓
Konsistenz mit Code: Team-Sektion stimmt mit SITE.founders überein (Younes Gräbner mit Umlaut, Paul Richter, korrekte Rollen). Alle gelisteten Pages existieren im Routing. Keine erfundenen Funktionen oder Tools.
Konsistenz mit llms-full.txt:
- Über-die-Firma-Block aktuell (Einzelunternehmen, Inhaber Younes Gräbner).
- Team-Sektion (Z60–67) und ausführliche Bios (Z199–204) korrekt nach Rechtsform-Fix.
- Hero-Headline-Zitat ("Die KI zitiert eure Konkurrenz. RelioMedia ändert das.") stimmt mit Hero-Component überein.
Auffälligkeit: llms-full.txt Z202–204 enthält in den ausführlichen Bios der Founder noch Erfahrungs-Behauptungen ("Hat in den letzten Jahren mit B2B-SaaS-Teams an Schema-Engineering, Search-Tooling und Data-Pipelines gearbeitet", "Bringt Erfahrung aus B2B-Sales-Zyklen im DACH-Mittelstand mit"). Diese Aussagen sind narrativer Marketing-Text und nicht durch eine verlinkte Quelle (LinkedIn-Profil mit Berufsstationen, Wikipedia-Eintrag) belegbar. Nicht zwingend falsch, aber empirisch nicht verifiziert. Folgepunkt — siehe Empfehlungen P3.
3.e Performance-Signale (Production-Build vom 2026-05-15)
Build ausgeführt mit npm run build. Ergebnis: ✓ erfolgreich, 27 Static-Pages exportiert (1 root + 1 not-found + 24 [locale]-Routes (12 × 2 Locales) + 1 sitemap.xml). Bundle-Größen aus dem Build-Output:
| Route | Page-Size | First-Load JS |
|---|---|---|
/ (root redirect) |
138 B | 103 kB |
/[locale] (Home) |
38.2 kB | 178 kB |
/[locale]/geo |
1.08 kB | 115 kB |
/[locale]/pilot |
1.17 kB | 115 kB |
/[locale]/ueber-uns |
181 B | 113 kB |
/[locale]/kontakt |
3.25 kB | 113 kB |
/[locale]/audit |
1.15 kB | 110 kB |
/[locale]/leistungen |
170 B | 108 kB |
/[locale]/methode |
170 B | 108 kB |
/[locale]/tools |
138 B | 103 kB |
/[locale]/agb |
138 B | 103 kB |
/[locale]/datenschutz |
138 B | 103 kB |
/[locale]/impressum |
138 B | 103 kB |
/sitemap.xml |
138 B | 103 kB |
| Shared First-Load JS | — | 103 kB |
Shared-Chunks: chunks/255-...js 46.3 kB + chunks/4bd1b696-...js 54.2 kB + other 1.99 kB = 103 kB.
Bewertung: Home liegt mit 178 kB First-Load deutlich über den Content-Pages (108–115 kB) — verursacht durch das Motion-Animation-Layer im Hero und die FounderCard-Komponente. Im Vergleich zur Performance-Zielgröße aus dem README (Initial JS < 130 KB für Hero) ist die Home-First-Load über dem Ziel. Content-Pages liegen im Zielbereich.
Lighthouse-Score: nicht erhoben — erfordert Live-URL und Headless-Browser-Run, in dieser Audit-Umgebung nicht durchführbar. Im TODO als Pre-Launch-Punkt vermerkt (mobile + desktop, Targets: Performance ≥95, A11y ≥95, SEO 100). Folgepunkt: nach erstem Deploy einen Lighthouse-Mobile-Run für /de und /de/geo ausführen.
4. Brand & Entity Mapping
4.1 Entity-Konsistenz (Code-seitig erhebbar)
| Stelle | Wert |
|---|---|
SITE.name (Markenname) |
"RelioMedia" |
SITE.legalName (offizielle Firmierung) |
"Younes Gräbner — RelioMedia" |
| Impressum-Anbieterblock | "Younes Gräbner — RelioMedia" + "Inhaber: Younes Gräbner" + "Rechtsform: Einzelunternehmen" |
| Datenschutz §1 Verantwortlicher | identisch zu Impressum (verifiziert per Grep) |
| AGB §1 Geltungsbereich | "Younes Gräbner — RelioMedia, Einzelunternehmen, Inhaber Younes Gräbner" |
OG-Metadata creator/publisher/authors |
"Younes Gräbner — RelioMedia" (in src/app/layout.tsx) |
llms-full.txt Über-die-Firma |
"Younes Gräbner — RelioMedia, Einzelunternehmen, Inhaber Younes Gräbner" |
Schema.org Organization legalName |
aus SITE.legalName → "Younes Gräbner — RelioMedia" |
Konsistenz: ✓ Alle Stellen identisch. Keine Reste von "RelioMedia GbR" (Grep-Verifikation: 0 Treffer in src/, public/, messages/). Younes wird durchgängig mit Umlaut "Gräbner" geschrieben (außer in der LinkedIn-URL, die zwingend younes-graebner ist — externer Profil-Slug).
4.2 E-A-T-Signale im Code
| Signal | Status | Belegstelle |
|---|---|---|
| Organization-Schema vorhanden | ✓ | OrganizationSchema global gemountet ([locale]/layout.tsx Z44) |
Adresse strukturiert (PostalAddress) |
✓ | address.streetAddress, postalCode, addressLocality, addressCountry |
| Telefon E.164-Format | ✓ | SITE.contact.telephoneE164 = "+4915905440499" |
| E-Mail Kontaktpunkt | ✓ | Organization.email + contactPoint.email |
contactPoint mit contactType und availableLanguage |
✓ | "sales", ["de", "en"] |
areaServed |
✓ | ["DE", "AT", "CH"] auf Organization + Service |
foundingDate |
✓ | "2025" aus SITE.foundingYear |
knowsAbout (Themen-Mapping) |
✓ | 9 GEO-Topics: Generative Engine Optimization, GEO, LLM SEO, Schema.org Engineering, Entity Mapping, E-E-A-T Optimization, Perplexity Citation Optimization, ChatGPT Source Optimization, Google AI Overviews |
founders mit Person-Referenz |
✓ (nur Younes) | Filtered Map, Paul nicht als Gründer markiert |
Founder PersonSchema in /ueber-uns |
✓ | Beide Founder, jobTitle dynamisch aus Rolle, sameAs zu LinkedIn aktiv |
Organization sameAs (Brand-Verifikation) |
✗ fehlt | Aus Code-Kommentar: "intentionally NOT added until verified" |
| Author-Schema auf Lab-Artikeln | ✗ (Lab noch nicht live) | ArticleSchema-Komponente existiert, ungemountet |
4.3 Service-/Offer-Strukturen
Aus src/app/[locale]/leistungen/page.tsx:
- Generisches
GeoServiceSchemaals Provider-Referenz. - Pro Tier (Mini-Audit, Pilot-Audit, Retainer) ein eigenes
ServiceSchemamitoffers-Array:- Mini:
price: "0",priceCurrency: "EUR" - Pilot: zwei Offers —
"1450"(Pilot) +"4500"(Regular), beide mitavailability: "InStock" - Retainer:
"999",description: "From / month"
- Mini:
Bewertung: Strukturierte Preise vorhanden, LLM-friendly. Der duale Pilot-Offer-Eintrag (1.450 + 4.500) kommuniziert den Rabatt strukturell — ungewöhnlich gründlich.
4.4 Konsistenz Headline / Hero / Über-uns / Schema
| Quelle | Aussage |
|---|---|
Hero H1 (i18n home.heroH1Line1/2) |
"Die KI zitiert eure Konkurrenz. RelioMedia ändert das." |
Tagline SITE.description |
"B2B-GEO-Agentur für SaaS, FinTech und Tech-Mittelstand in DACH. Sichtbarkeit in Perplexity, ChatGPT, Claude und Google AI Overviews durch Entity-Architektur, Schema-Engineering und LLM-optimierte Content-Signale." |
| Über-uns H1 | "Zwei Personen. Kein Mid-Management." |
OrganizationSchema description |
identisch zur Tagline |
llms.txt Was-wir-machen-Block |
"RelioMedia macht B2B-Marken in Perplexity, ChatGPT, Claude und Google AI Overviews sichtbar — durch Entity-Architektur, Schema-Engineering und LLM-optimierte Content-Signale." |
Konsistenz: Aussage über Tätigkeit und Engine-Liste (Perplexity / ChatGPT / Claude / Google AI Overviews) ist über alle vier Stellen identisch. Tagline und Schema-Description sind 1:1 gleich.
4.5 Phase 2 (explizit nicht erhoben)
- Wikipedia-Status: nicht erhoben — Phase 2 via Lookup. Vermutung (nicht verifiziert): Kein Eintrag, da Firma seit 2025 und Marktauftritt im Aufbau.
- Wikidata-Eintrag: nicht erhoben — Phase 2.
- Crunchbase-Eintrag: nicht erhoben — Phase 2.
- LLM-Cold-Recognition ("Was ist RelioMedia?") in Perplexity / ChatGPT / Claude: nicht erhoben — Phase 2.
5. Handlungsempfehlungen
Strikt priorisiert. Nur Befunde aus Sektion 3 und dem Code-Teil von Sektion 4.
P1 — Vor Live-Gang
| # | Empfehlung | Aufwand | Impact | Verantwortlich |
|---|---|---|---|---|
| P1-01 | <html lang>-Attribut dynamisch pro Locale setzen (statt hartkodiertem lang="de" in app/layout.tsx). Ab [locale]/layout.tsx sollte über setLocale-aware Rendering oder über params.locale ein Conditional gerendert werden. Aktuell rendert die EN-Site <html lang="de"> — kleines, aber konkretes A11y-/SEO-Versehen. |
S | hoch | intern |
| P1-02 | LinkedIn-Company-Page als sameAs in OrganizationSchema aktivieren, sobald sie verifiziert online ist. URL bereits in SITE.social.linkedin hinterlegt. Code-Kommentar dokumentiert die bewusste Lücke. |
S | hoch | intern |
| P1-03 | Lighthouse-Mobile-Run nach erstem Deploy für /de und /de/geo. Wenn Home-First-Load (178 kB) Lighthouse-Performance unter 90 drückt, dynamic-import auf das Motion-Layer prüfen. |
S | mittel | intern |
P2 — Phase 2 (Pipeline-getrieben)
| # | Empfehlung | Aufwand | Impact | Verantwortlich |
|---|---|---|---|---|
| P2-01 | n8n-Pipeline für Visibility-Audit aufsetzen: 10–11 DACH-B2B-GEO-Prompts gegen Perplexity/ChatGPT/Claude, Citation-Rate für reliomedia.de erheben, Konkurrenz-Set definieren (DACH-GEO-/SEO-Beratungen mit eigener Site). |
M | hoch | Phase 2 |
| P2-02 | Wikidata-Eintrag für RelioMedia anlegen, sobald 2–3 belegbare externe Sekundär-Erwähnungen existieren (Press-Mention, Konferenz, Listing). Entity-Anker für LLMs. | L | hoch | Phase 2 |
| P2-03 | LLM-Cold-Recognition baseline erheben (Prompt: "Was ist RelioMedia?" in den drei Engines, Antwort vollständig dokumentieren als 2026-05-Snapshot). | S | mittel | Phase 2 |
| P2-04 | Lab-Sektion live schalten und ArticleSchema pro Report mounten. Bereits vorhandene ArticleSchema-Komponente verwenden. |
M | mittel | intern, sobald Reports redaktionell finalisiert |
P3 — Nach-Launch / Operative Hygiene
| # | Empfehlung | Aufwand | Impact | Verantwortlich |
|---|---|---|---|---|
| P3-01 | Founder-Bios in llms-full.txt Z202–204 auf belegbare Aussagen reduzieren oder mit verlinktem LinkedIn-Profil-Belegpfad versehen. Aktuell narrative Marketing-Aussagen ohne externe Verankerung. |
S | niedrig | intern |
| P3-02 | Founding-Year (2025) verifizieren: stimmt mit Gewerbeanmeldung-Datum überein? Falls nicht, im SITE-Objekt korrigieren. |
S | niedrig | intern |
| P3-03 | Monitoring-Layer: monatlicher Re-Run der Phase-2-Pipeline, Vergleich Citation-Rate über Zeit. | M | mittel | Phase 2 / Retainer-Service |
6. Implementierungs-Bauplan
Kopierfertige Snippets für die P1-Empfehlungen.
6.1 P1-01 — <html lang> dynamisch pro Locale
Aktuell in src/app/layout.tsx:
return (
<html
lang="de"
suppressHydrationWarning
className={`${GeistSans.variable} ${GeistMono.variable} ${inter.variable}`}
>
Problem: Das Root-Layout kennt das Locale nicht, da [locale] eine Sub-Route ist. Lösung: HTML-Lang im [locale]/layout.tsx über ein Client-Side- oder Metadata-Helper setzen, oder ein middleware-loses Pattern mit params.locale und dem Next.js-Pattern, <html> nur einmal im Root-Layout zu rendern.
Empfohlene Variante (minimaler Eingriff): src/app/layout.tsx rendert kein <html>-Tag direkt, sondern delegiert an [locale]/layout.tsx. Da Static-Export aber bei Next.js ein einziges Root-Layout erfordert, ist das nur möglich, wenn das Locale dem Root-Layout über params durchgereicht wird — was im aktuellen App-Router-Pattern mit Static-Export einschränkend ist.
Alternative (pragmatisch, geringer Eingriff): in [locale]/layout.tsx per useEffect/Client-Component das lang-Attribut nachsetzen — funktioniert für JS-aktivierte Clients, nicht für reine HTML-Crawler. Da die Hauptzielgruppe AI-Crawler sind, die das initiale HTML lesen, ist diese Variante unzureichend.
Saubere Lösung: Eine zweite Static-Page-Hierarchie unter src/app/de/ und src/app/en/ mit eigenem <html lang>-Render. Strukturell aufwendiger.
Pragmatisch jetzt: Hartkodiertes lang="de" belassen, im <html>-Tag von [locale]/layout.tsx ein Mounted-<HtmlLangSetter>-Client-Helper hinzufügen (Best-Effort für JS-Clients), und im TODO als bekannte Limitation dokumentieren. Wenn EN-Performance signifikanten Anteil bekommt, struktureller Refactor.
// src/components/seo/HtmlLangSetter.tsx
"use client";
import { useEffect } from "react";
export function HtmlLangSetter({ locale }: { locale: string }) {
useEffect(() => {
document.documentElement.lang = locale;
}, [locale]);
return null;
}
Mounten in src/app/[locale]/layout.tsx Z31 (direkt in NextIntlClientProvider).
6.2 P1-02 — sameAs auf Organization aktivieren
In src/components/seo/SchemaScripts.tsx OrganizationSchema ergänzen (Z56–58 ersetzen):
// LinkedIn-Company-Page der Marke RelioMedia ist verifiziert online —
// als sameAs-Anker für Entity-Disambiguierung eingetragen.
if (SITE.social.linkedin) {
json.sameAs = [SITE.social.linkedin];
}
Voraussetzung: Die URL https://www.linkedin.com/company/reliomedia muss tatsächlich existieren und aktiv sein. Vor Aktivierung manuell aufrufen und prüfen.
6.3 P1-03 — Lighthouse-Run
Kein Code-Snippet — manueller Schritt:
# Nach dem ersten Deploy auf reliomedia.de:
npx lighthouse https://reliomedia.de/de/ --preset=desktop --output=json --output-path=./lab/lighthouse-home-desktop.json
npx lighthouse https://reliomedia.de/de/ --preset=mobile --output=json --output-path=./lab/lighthouse-home-mobile.json
npx lighthouse https://reliomedia.de/de/geo/ --preset=mobile --output=json --output-path=./lab/lighthouse-geo-mobile.json
Targets aus README: Performance ≥95, A11y ≥95, SEO 100. Falls Home-Performance < 90: dynamic-import auf Motion-Layer prüfen.
7. Roadmap + Anhang
7.1 Roadmap — Phase 2 (Visibility-Pipeline-Audit)
Nächste Schritte zur Komplettierung des Audits:
- n8n-Pipeline-Setup — wiederverwendbarer Workflow: Prompt-Matrix → Perplexity API + ChatGPT API + Claude API → Citation-Detection (regex-basiert auf Domain-Mentions + Brand-Mentions) → Ausgabe als CSV/JSON in Lab-Snapshot-Format.
- Prompt-Matrix definieren — 10–11 Anfragen, die in folgenden Bereichen liegen sollen: (a) Direkte Marken-Recognition ("Was ist RelioMedia?"), (b) Kategorie-Anfragen ("Beste GEO-Agentur DACH", "B2B GEO Beratung Deutschland"), (c) Use-Case-Anfragen ("Wie mache ich meine B2B-SaaS-Marke in Perplexity sichtbar?"), (d) Konkurrenz-Vergleiche.
- Konkurrenz-Set festlegen — 3–5 DACH-GEO-/SEO-Beratungen mit eigener Site, die für die gleichen Prompts ranken könnten.
- Baseline-Erhebung — Snapshot 2026-05, abgelegt in
public/lab/visibility-baseline-2026-05.md(analog zu diesem File). - Re-Mess-Zyklus — Monatlich, Vergleich mit Baseline, Trend-Dokumentation.
7.2 Methodik dieser Phase 1
Abgedeckt:
- Code-Repository-Analyse (TypeScript/TSX-Files, Schema-Komponenten, robots.txt, llms.txt, sitemap.ts, site.ts, Metadata)
- Statische Crawler-Zugänglichkeits-Signale
- Production-Build-Auswertung (Bundle-Größen, Static-Page-Count)
- Konsistenz-Checks per Volltext-Grep
- Heading-Hierarchie-Auswertung per Element-Grep
Nicht abgedeckt (= Phase 2):
- LLM-API-Calls (Perplexity, OpenAI, Anthropic)
- Live-URL-Fetches (X-Robots-Tag-Header, Lighthouse-Performance)
- Wikipedia-/Wikidata-/Crunchbase-Lookups
- Citation-Rate-Messungen
- Konkurrenz-Sichtbarkeits-Vergleiche
- Sentiment-Analysen der Erwähnungen
7.3 Haftungsausschluss
Die Phase 1 dieses Audits dokumentiert ausschließlich die technische GEO-Bereitschaft der Site. Sie trifft keine Aussagen über tatsächliche Sichtbarkeit in generativen Engines, keine Garantie über Ranking-Positionen, Zitations-Frequenzen oder ROI. LLM-Antworten sind nicht-deterministisch — Phase-2-Messungen sind Stichproben, keine Performance-Versprechen. RelioMedia liefert Architektur und Empfehlungen, keine Implementations-Garantien gegenüber Drittsystemen.
7.4 Glossar (nur im Bericht verwendete Begriffe)
- GEO — Generative Engine Optimization. Strukturierung von Inhalten so, dass generative KI-Systeme (Perplexity, ChatGPT, Claude, Google AI Overviews) sie als Antwort-Quelle auswählen.
- Schema.org / JSON-LD — Strukturierter-Daten-Standard, der semantische Entitäten für Crawler und LLMs maschinenlesbar macht.
- Citation-Rate — Anteil der Anfragen einer Prompt-Matrix, in dem die eigene Domain als Antwort-Quelle genannt wird.
- Cold-Recognition — Antwort eines LLMs auf eine Direktfrage ("Was ist X?") ohne Vorkontext, gemessen über mehrere Engines.
- llms.txt — Standard-Manifest (analog zu robots.txt), das LLM-Crawlern einen kuratierten Page-Index gibt.
- hreflang — HTML-Annotation, die Sprach-/Regions-Alternaten einer Page maschinenlesbar verknüpft.
- First-Load JS — Initial-Bundle-Größe, die ein Browser beim ersten Seitenaufruf herunterladen muss.
- E-A-T — Experience, Expertise, Authoritativeness, Trustworthiness — Googles ursprüngliches Qualitäts-Signal-Set, mittlerweile für alle generativen Engines relevant.
Ende Phase 1. Phase-2-Aufgaben sind in Sektion 5 (P2-Block) und Sektion 7.1 priorisiert.