Alle Artikel
schema markup generatorschema markupjson ld generator

Schema Markup Generator: Strukturierte Daten richtig einsetzen

·
8 min read
·
Lukas Lavicka

Schema Markup ist einer der wenigen SEO-Hebel, bei dem du als Entwickler einen direkten Vorteil hast. Während Marketing-Teams auf GUI-Tools angewiesen sind, kannst du JSON-LD direkt in den Code schreiben, in Build-Pipelines integrieren und dynamisch aus Datenbanken generieren.

Dieser Artikel ist eine praktische Referenz. Kein Theorie-Vortrag, sondern Copy-Paste-fähige Code-Beispiele für die Schema-Typen, die im Agentur-Alltag am häufigsten gebraucht werden.

Warum JSON-LD und nicht Microdata oder RDFa?

Google empfiehlt JSON-LD als bevorzugtes Format für Structured Data [Quelle: Google Search Central, Structured Data Guidelines]. Die Gründe sind praktisch:

  • Trennung von Content und Markup: JSON-LD lebt im <script>-Tag, nicht im HTML-Body
  • Einfacher zu pflegen: Keine Attribute über den gesamten DOM verteilt
  • Dynamisch generierbar: Lässt sich aus CMS-Daten, APIs oder Build-Prozessen erzeugen
  • Weniger Fehleranfällig: Keine verschachtelten itemscope/itemprop-Attribute
<!-- JSON-LD: sauber getrennt -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Beispiel GmbH"
}
</script>

<!-- Microdata: im HTML verwoben -->
<div itemscope itemtype="https://schema.org/Organization">
  <span itemprop="name">Beispiel GmbH</span>
</div>

Organization Schema

Das Basis-Schema für jedes Unternehmen. Gehört auf die Startseite und optional auf die "Über uns"-Seite.

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Dein Unternehmen GmbH",
  "url": "https://example.com",
  "logo": "https://example.com/images/logo.png",
  "description": "Kurze Beschreibung des Unternehmens",
  "foundingDate": "2020",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "Musterstraße 1",
    "addressLocality": "Berlin",
    "postalCode": "10115",
    "addressCountry": "DE"
  },
  "contactPoint": {
    "@type": "ContactPoint",
    "telephone": "+49-30-12345678",
    "contactType": "customer service",
    "availableLanguage": ["German", "English"]
  },
  "sameAs": [
    "https://www.linkedin.com/company/beispiel",
    "https://twitter.com/beispiel"
  ]
}

Häufige Fehler beim Organization Schema

  • Logo-URL nicht absolut: "/logo.png" funktioniert nicht. Immer die volle URL angeben.
  • sameAs mit toten Links: Google crawlt diese URLs. Wenn sie 404 zurückgeben, schadet das.
  • Mehrere Organization-Schemas auf einer Seite: Nur eines pro Seite. Nutze @id für Referenzen.

LocalBusiness Schema

Für Kunden mit physischem Standort. Erweitert Organization um Öffnungszeiten und Geo-Koordinaten.

{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Zahnarztpraxis Dr. Müller",
  "image": "https://example.com/images/praxis.jpg",
  "url": "https://example.com",
  "telephone": "+49-89-12345678",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "Hauptstraße 42",
    "addressLocality": "München",
    "postalCode": "80331",
    "addressCountry": "DE"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": "[TODO: echte Koordinaten eintragen]",
    "longitude": "[TODO: echte Koordinaten eintragen]"
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "08:00",
      "closes": "18:00"
    }
  ],
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "[TODO: echten Wert eintragen]",
    "reviewCount": "[TODO: echte Anzahl eintragen]"
  }
}

Spezialisierte Business-Typen

Nutze statt LocalBusiness nach Möglichkeit den spezifischsten Typ:

BusinessSchema-Typ
RestaurantRestaurant
ArztpraxisMedicalBusiness oder Physician
AnwaltskanzleiLegalService oder Attorney
FitnessstudioHealthClub
FriseurHairSalon
HotelHotel
AutowerkstattAutoRepair

Je spezifischer der Typ, desto besser kann Google die Daten für Rich Results verwenden.

Product Schema

Für E-Commerce-Kunden und Produktseiten. Kann Rich Results mit Preis und Bewertung auslösen.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Premium SEO Audit",
  "description": "Umfassender technischer SEO Audit mit 100+ Prüfpunkten",
  "image": "https://example.com/images/seo-audit.png",
  "brand": {
    "@type": "Brand",
    "name": "crawlix"
  },
  "offers": {
    "@type": "Offer",
    "price": "499.00",
    "priceCurrency": "EUR",
    "availability": "https://schema.org/InStock",
    "url": "https://example.com/produkt/seo-audit",
    "priceValidUntil": "[TODO: Datum eintragen, Format YYYY-MM-DD]"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "reviewCount": "42"
  }
}

Pflichtfelder für Product Rich Results

Google zeigt Product Rich Results nur an, wenn bestimmte Felder vorhanden sind [Quelle: Google Search Central, Product Structured Data]:

  • name
  • image
  • offers mit price und priceCurrency
  • review oder aggregateRating (für Sterne in den SERPs)

Ohne diese Felder wird das Schema zwar gelesen, aber es gibt keine Rich Results.

Article und BlogPosting Schema

Für Blogartikel und News-Seiten. Signalisiert Google den Content-Typ und Autor.

{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "Onpage SEO Checkliste für Entwickler",
  "description": "Die technische Onpage SEO Checkliste mit 100+ Prüfpunkten.",
  "datePublished": "2026-03-25",
  "dateModified": "2026-03-25",
  "author": {
    "@type": "Person",
    "name": "Lukas Lavicka",
    "url": "https://crawlix.io/ueber-uns"
  },
  "publisher": {
    "@type": "Organization",
    "name": "crawlix.io",
    "logo": {
      "@type": "ImageObject",
      "url": "https://crawlix.io/logo.png"
    }
  },
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://crawlix.io/blog/onpage-seo-checkliste"
  },
  "image": "https://crawlix.io/images/blog/onpage-checkliste.png",
  "wordCount": 2500,
  "keywords": "onpage seo, seo checkliste, technical seo"
}

Article vs. BlogPosting vs. NewsArticle

  • Article: Generischer Artikeltyp. Immer sicher.
  • BlogPosting: Für Blog-Inhalte. Subtyp von Article.
  • NewsArticle: Nur für echte Nachrichten. Missbrauch kann zu Abstrafungen führen.

Faustregel: Im Zweifel Article verwenden. BlogPosting nur wenn es wirklich ein Blog ist.

FAQ Schema

FAQ-Schema kann Rich Results mit aufklappbaren Fragen direkt in den SERPs erzeugen. Seit 2023 zeigt Google FAQ Rich Results allerdings nur noch für Regierungs- und Gesundheitsseiten an [Quelle: Google Search Central Blog, August 2023]. Trotzdem sinnvoll für AI-Zitierbarkeit und Sprachsuche.

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Was kostet ein SEO Audit?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Ein professioneller SEO Audit kostet je nach Umfang zwischen 500 und 3.000 Euro. Bei crawlix starten Audits ab 499 Euro pro Domain."
      }
    },
    {
      "@type": "Question",
      "name": "Wie lange dauert ein SEO Audit?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Ein automatisierter Audit kann in 24-48 Stunden erstellt werden. Manuelle Audits dauern typischerweise 1-2 Wochen."
      }
    }
  ]
}

HowTo Schema

Für Anleitungen und Tutorials. Kann Step-by-Step Rich Results auslösen.

{
  "@context": "https://schema.org",
  "@type": "HowTo",
  "name": "Schema Markup in Next.js implementieren",
  "description": "Anleitung zur Integration von JSON-LD Schema Markup in eine Next.js Anwendung.",
  "totalTime": "PT30M",
  "step": [
    {
      "@type": "HowToStep",
      "name": "JSON-LD Objekt erstellen",
      "text": "Erstelle ein JavaScript-Objekt mit den Schema.org Eigenschaften für deinen Seitentyp.",
      "position": 1
    },
    {
      "@type": "HowToStep",
      "name": "Script-Tag im Head einfügen",
      "text": "Füge das JSON-LD als script type='application/ld+json' im Head der Seite ein.",
      "position": 2
    },
    {
      "@type": "HowToStep",
      "name": "Im Rich Results Test validieren",
      "text": "Prüfe das Schema mit dem Google Rich Results Test auf Fehler und Warnungen.",
      "position": 3
    }
  ]
}

BreadcrumbList Schema

Breadcrumbs helfen Google die Seitenstruktur zu verstehen und werden in den SERPs angezeigt.

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Start",
      "item": "https://example.com"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Blog",
      "item": "https://example.com/blog"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Schema Markup Anleitung",
      "item": "https://example.com/blog/schema-markup-generator-anleitung"
    }
  ]
}

Schema Markup in der Praxis: Framework-Integration

Next.js / React

// components/JsonLd.tsx
interface JsonLdProps {
  data: Record<string, unknown>;
}

export function JsonLd({ data }: JsonLdProps) {
  return (
    <script
      type="application/ld+json"
      dangerouslySetInnerHTML={{
        __html: JSON.stringify(data).replace(/</g, '\\u003c'),
      }}
    />
  );
}

// Nutzung in einer Page
import { JsonLd } from '@/components/JsonLd';

export default function ProductPage() {
  const schema = {
    "@context": "https://schema.org",
    "@type": "Product",
    "name": "SEO Audit Pro",
    // ... weitere Felder
  };

  return (
    <>
      <JsonLd data={schema} />
      <main>{/* Content */}</main>
    </>
  );
}

Dynamische Schema-Generierung

Für Agenturen mit vielen Kundenseiten: Schema aus CMS-Daten generieren.

// lib/schema.ts
interface BusinessData {
  name: string;
  street: string;
  city: string;
  zip: string;
  phone: string;
  lat: number;
  lng: number;
}

export function generateLocalBusinessSchema(data: BusinessData) {
  return {
    "@context": "https://schema.org",
    "@type": "LocalBusiness",
    "name": data.name,
    "telephone": data.phone,
    "address": {
      "@type": "PostalAddress",
      "streetAddress": data.street,
      "addressLocality": data.city,
      "postalCode": data.zip,
      "addressCountry": "DE"
    },
    "geo": {
      "@type": "GeoCoordinates",
      "latitude": data.lat,
      "longitude": data.lng
    }
  };
}

Schema validieren: Die drei Tools

1. Google Rich Results Test

URL: search.google.com/test/rich-results

  • Zeigt, welche Rich Results möglich sind
  • Unterscheidet zwischen Fehlern und Warnungen
  • Prüft nur Google-spezifische Anforderungen

2. Schema.org Validator

URL: validator.schema.org

  • Prüft gegen die vollständige Schema.org Spezifikation
  • Strenger als der Google-Test
  • Findet auch Fehler die Google ignoriert

3. crawlix Schema-Audit

Mit dem kostenlosen Schema-Check kannst du deine strukturierten Daten schnell validieren. Jeder crawlix-Audit enthält eine vollständige Schema-Analyse:

  • Welche Schema-Typen gefunden wurden
  • Fehlende Pflichtfelder
  • Validierungsfehler im JSON-LD
  • Empfehlungen für zusätzliche Schema-Typen basierend auf dem Seitentyp
  • Fertigen JSON-LD Code zum Kopieren

Das spart den manuellen Durchlauf durch drei verschiedene Tools. Der Schema-Report ist Teil jedes Standard-Audits.

Die 7 häufigsten Schema-Fehler

  1. Fehlender @context: Ohne "@context": "https://schema.org" ist das JSON-LD kein gültiges Schema.

  2. Falsche Verschachtelung: address muss ein eigenes @type: PostalAddress Objekt sein, kein String.

  3. Veraltete Eigenschaften: schema.org wird regelmäßig aktualisiert. Prüfe die aktuelle Spezifikation.

  4. Markup für nicht sichtbaren Content: Google warnt vor Schema-Daten die nicht im sichtbaren Seiteninhalt vorkommen. Der Schema-Inhalt sollte den sichtbaren Content widerspiegeln.

  5. Falsche Rating-Werte: ratingValue muss zum bestRating/worstRating passen. Default ist 1-5.

  6. Fehlende Bilder: Viele Schema-Typen brauchen ein image-Feld für Rich Results.

  7. Mehrere @context-Deklarationen: Bei mehreren Schemas auf einer Seite: Jedes braucht seinen eigenen @context, oder nutze ein @graph-Array.

Das @graph Pattern für mehrere Schemas

{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://example.com/#org",
      "name": "Beispiel GmbH",
      "url": "https://example.com"
    },
    {
      "@type": "WebPage",
      "@id": "https://example.com/about/#page",
      "name": "Über uns",
      "isPartOf": {
        "@id": "https://example.com/#website"
      },
      "about": {
        "@id": "https://example.com/#org"
      }
    }
  ]
}

Schema-Typen Priorität für Agenturen

Nicht jeder Kundentyp braucht jedes Schema. Diese Prioritätsmatrix hilft bei der Planung:

KundentypMust-HaveNice-to-Have
Lokales GeschäftLocalBusiness, BreadcrumbListFAQ, Review
E-CommerceProduct, BreadcrumbList, OrganizationFAQ, HowTo
Blog/MagazinArticle/BlogPosting, BreadcrumbListFAQ, HowTo
SaaS/SoftwareOrganization, Product, FAQHowTo, SoftwareApplication
DienstleisterOrganization, Service, FAQHowTo, BreadcrumbList
ArztpraxisMedicalBusiness, LocalBusinessFAQ, MedicalCondition

Weiterführende Artikel

SEO als neues Standbein für Ihre Agentur

Professionelle SEO-Audits anbieten ohne eigenes SEO-Team. Mit Code-Snippets und 4-Phasen-Umsetzungsplan.

Audit-Details ansehen

Teste crawlix kostenlos

Fordere jetzt dein Test-Audit an und sieh selbst, was dein SEO-Masterplan enthält.

Test-Audit anfordern