Implementieren Sie strukturierte Daten (Schema.org) in Ihr Shoporama-Thema
Vollständige Anleitung für JSON-LD strukturierte Daten in einem Shoporama-Theme. Smarty-Beispiele für Product, Store, BreadcrumbList und AggregateRating mit geeigneten sicheren Methoden.
Strukturierte Daten (Schema.org) helfen Google und anderen Suchmaschinen dabei, den Inhalt Ihrer Seiten zu verstehen. Für einen Webshop ist es besonders wichtig, Produkte, Shop-Informationen, Breadcrumbs und Produktbewertungen zu markieren, damit Sie in den Suchergebnissen „Rich Snippets“ mit beispielsweise Preis, Lagerbestand und Sternebewertung erzielen können.
Tipp: Shoporama fügt über unsere integrierten SEO-Funktionen automatisch grundlegende Schema.org-Markups für Produkte hinzu. Erfahren Sie mehr über automatische strukturierte Daten und SEO in Shoporama. Dieser Artikel richtet sich an alle, die das Markup in ihrem Theme selbst erstellen oder erweitern möchten.

Was sind strukturierte Daten?
Strukturierte Daten sind eine standardisierte Methode, den Inhalt einer Seite in einem Format zu beschreiben, das Suchmaschinen verstehen. JSON-LD ist das empfohlene Format und wird in einem <script type="application/ld+json">-Tag platziert. Dies hat keinen Einfluss auf das visuelle Erscheinungsbild der Seite, liefert den Suchmaschinen jedoch strukturierte Informationen, die für Rich Snippets genutzt werden können.
Die richtigen „safe“-Methoden bei SafeProduct, SafeWebshop und SafeCompany
Bevor Sie Ihr eigenes JSON-LD-Markup erstellen, ist es wichtig, die „safe“-Methoden zu kennen, die tatsächlich für die Objekte in einem Shoporama-Theme verfügbar sind. Dies sind die stabilen Methoden, die Sie in Smarty verwenden können.
Bei $product (SafeProduct):
- getName(), getDescription(), getOwnId(), getGtin(), getMpn(), getBrandName()
- getPrice(), getSalePrice(), getRealPrice(), getLowest30DayPrice()
- getStockCount() und getIsInStock()
- getImage() und getImages() geben „SafeImage“ mit getSrc($w, $h, $type) zurück
- getAvgRating($no_round), getReviewCount(), getProductReviews($limit)
- getUrl() gibt den relativen Pfad des Produkts zurück
Auf $webshop (SafeWebshop):
- getName(), getDescription(), getCurrency(), getUrl(), getLogo()
- getCompany() gibt ein SafeCompany-Objekt zurück
Bei $webshop->getCompany() (SafeCompany):
- getName(), getRegNr(), getEmail(), getPhone()
- getAddress(), getZipcode(), getCity(), getCountry()
Hinweis: Verwenden Sie nicht $product->getStock(), $product->getAverageRating(), $webshop->getCurrencyCode(), $webshop->getDomain(), $webshop->getEmail() oder $webshop->getPhone(). Diese sind nicht als „safe“-Methoden verfügbar, und Ihr Theme wird einen Fehler auslösen. Verwenden Sie stattdessen getStockCount(), getAvgRating(), getCurrency(), getUrl() und getCompany()->getEmail()/getPhone().
Produkt-Markup (Product)
Der wichtigste Typ für einen Webshop ist das Produkt-Markup. Fügen Sie den Block in Ihre Produktvorlage ein (typischerweise product/view.html):
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "<{$product->getName()|escape:'javascript'}>",
"description": "<{$product->getDescription()|strip_tags|escape:'javascript'}>",
"sku": "<{$product->getOwnId()|escape:'javascript'}>",
<{if $product->getGtin()}>
"gtin": "<{$product->getGtin()|escape:'javascript'}>",
<{/if}>
<{if $product->getMpn()}>
"mpn": "<{$product->getMpn()|escape:'javascript'}>",
<{/if}>
<{if $product->getBrandName()}>
"brand": {
"@type": "Brand",
"name": "<{$product->getBrandName()|escape:'javascript'}>"
},
<{/if}>
<{if $product->getImage()}>
"image": "<{$product->getImage()->getSrc(800, 800, 'fit')}>",
<{/if}>
"offers": {
"@type": "Offer",
"url": "<{$webshop->getUrl()}><{$product->getUrl()}>",
"price": "<{$product->getRealPrice()|string_format:"%.2f"}>",
"priceCurrency": "<{$webshop->getCurrency()}>",
"availability": "<{if $product->getStockCount() > 0}>https://schema.org/InStock<{else}>https://schema.org/OutOfStock<{/if}>"
}
}
</script>
Drei wichtige Punkte in diesem Beispiel:
- Der Preis wird mit getRealPrice() abgerufen, sodass eventuelle Sonderangebote und Rabatte berücksichtigt und die Mehrwertsteuer hinzugerechnet werden.
- Die Währung wird mit getCurrency() aus $webshop abgerufen (gibt z. B. „DKK“ oder „EUR“ zurück).
- Der Lagerbestand wird mit getStockCount() ermittelt. Sie können auch getIsInStock() verwenden, wenn Sie den Verkauf von Artikeln mit einem Lagerbestand von 0 zulassen möchten.
Vorheriger Preis (Omnibus-Richtlinie)
Wenn das Produkt im Sonderangebot ist, empfiehlt Google, den niedrigsten Preis der letzten 30 Tage als Referenzpreis anzuzeigen. Verwenden Sie getLowest30DayPrice(), um diesen abzurufen. Die Funktion gibt null zurück, wenn nicht genügend Preisdaten vorliegen.
Produktbewertungen (AggregateRating)
Wenn Sie das integrierte Bewertungssystem von Shoporama nutzen, können Sie eine Durchschnittsbewertung direkt im Product-Markup hinzufügen. Dadurch können Sterne in den Google-Suchergebnissen angezeigt werden. Fügen Sie den Block innerhalb des Product-Objekts ein:
<{if $product->getReviewCount() > 0}>
,
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "<{$product->getAvgRating(true)|string_format:"%.1f"}>",
"reviewCount": "<{$product->getReviewCount()}>"
}
<{/if}>
Der Parameter „true“ bei „getAvgRating()“ liefert einen nicht gerundeten Durchschnittswert, was Google bevorzugt (z. B. 4,3 statt nur 4).
Shop-Informationen (Store / LocalBusiness)
Du kannst auch den Webshop selbst kennzeichnen, z. B. in deiner Fußzeilenvorlage. Rufe die Kontaktdaten über $webshop->getCompany() ab, damit die Informationen, die du bereits unter „Unternehmen“, „Unternehmensdaten“ eingegeben hast, automatisch übernommen werden:
<{$company = $webshop->getCompany()}>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Store",
"name": "<{$webshop->getName()|escape:'javascript'}>",
"url": "<{$webshop->getUrl()}>"
<{if $company}>
,
<{if $company->getEmail()}>
"email": "<{$company->getEmail()|escape:'javascript'}>",
<{/if}>
<{if $company->getPhone()}>
"telephone": "<{$company->getPhone()|escape:'javascript'}>",
<{/if}>
"address": {
"@type": "PostalAddress",
"streetAddress": "<{$company->getAddress()|escape:'javascript'}>",
"postalCode": "<{$company->getZipcode()|escape:'javascript'}>",
"addressLocality": "<{$company->getCity()|escape:'javascript'}>",
"addressCountry": "<{$company->getCountry()|escape:'javascript'}>"
}
<{/if}>
<{if $webshop->getLogo()}>
,
"logo": "<{$webshop->getLogo()->getSrc(400, 400, 'fit')}>"
<{/if}>
}
</script>
Stelle sicher, dass die Unternehmensdaten im Admin-Bereich unter „Unternehmen“, „Unternehmensdaten“ korrekt ausgefüllt sind. Wenn du ein stationäres Geschäft hast, kannst du „LocalBusiness“ oder einen spezifischeren Subtyp (z. B. „ClothingStore“) als @type verwenden.
Breadcrumbs (BreadcrumbList)
Auf Produkt- und Kategorieseiten ist es eine bewährte SEO-Praxis, Breadcrumbs anzugeben. Beispiel für ein Produkt mit Hauptkategorie:
<{if $product->getMainCategory()}>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "<{$webshop->getName()|escape:'javascript'}>",
"item": "<{$webshop->getUrl()}>"
},
{
"@type": "ListItem",
"position": 2,
"name": "<{$product->getMainCategory()->getName()|escape:'javascript'}>",
"item": "<{$webshop->getUrl()}><{$product->getMainCategory()->getUrl()}>"
},
{
"@type": "ListItem",
"position": 3,
"name": "<{$product->getName()|escape:'javascript'}>",
"item": "<{$webshop->getUrl()}><{$product->getUrl()}>"
}
]
}
</script>
<{/if}>
Testen Sie Ihre strukturierten Daten
Verwenden Sie die Tools von Google und Schema.org, um Ihr Markup zu validieren, bevor Sie live gehen:
- Der Rich Results Test prüft, ob Ihr Markup Rich Snippets in Google generiert
- Der Schema Markup Validator überprüft die JSON-LD-Syntax
- In der Google Search Console kannst du Berichte zu deinen Produkten und Rich Results einsehen, nachdem die Seiten gecrawlt wurden
Tipp: Wenn du automatische strukturierte Daten in Shoporama bereits aktiviert hast, achte darauf, Duplikate zu vermeiden. Überprüfe, was bereits auf der Seite vorhanden ist, bevor du dein eigenes Markup hinzufügst.
Häufig gestellte Fragen
Muss ich JSON-LD überhaupt selbst programmieren?
Nein, nicht unbedingt. Shoporama verfügt über integrierte automatische strukturierte Daten für Produkte, die den Großteil abdecken. Das eigene Codieren ist vor allem dann relevant, wenn du zusätzliche Felder hinzufügen oder einen spezifischeren @type verwenden möchtest, z. B. für Hotels, Restaurants oder Veranstaltungen.
Welche Schema-Typen kann ich neben „Product“ noch verwenden?
In einem Shoporama-Theme kannst du alle Schema.org-Typen implementieren, die als JSON-LD verfügbar sind. Die für Webshops am häufigsten verwendeten sind „Product“, „Offer“, „AggregateRating“, „Review“, „BreadcrumbList“, „Store“, „LocalBusiness“, „Organization“, „WebSite“ mit „SearchAction“ sowie „FAQPage“ für feste FAQ-Seiten.
Warum erhalte ich Fehler im Rich Results Test?
Typische Fehler sind fehlende Felder (z. B. „price“ ohne „priceCurrency“), falsche Formatierung von Zahlen oder Anführungszeichen, die die JSON-Syntax zerstören. Verwende in Smarty immer |escape:'javascript' für alle Textwerte.
Wie lange dauert es, bis ich Sterne bei Google sehe?
Google muss die Seite zunächst erneut crawlen, bevor dein neues Markup berücksichtigt wird. Das kann zwischen wenigen Tagen und einigen Wochen dauern. In der Search Console kannst du eine schnelle Neuindizierung einzelner Seiten beantragen.
Beeinflusst das meine Platzierungen bei Google?
Strukturierte Daten sind kein direkter Ranking-Faktor, aber Rich Snippets mit z. B. Preis und Sternen machen dein Suchergebnis sichtbarer und können die Klickrate erhöhen. Langfristig trägt dies zur Verbesserung deiner gesamten SEO bei.
Wie gehe ich mit der Mehrwertsteuer im Preisfeld um?
Verwende getRealPrice(), das den Preis inkl. MwSt. zurückgibt. Das ist der Preis, den der Kunde im Shop vorfindet, und der, den Google im Product-Markup eines B2C-Shops erwartet. Sollst du den Preis exkl. MwSt. (B2B) anzeigen, verwende stattdessen getPriceExVat().
Muss ich Bewertungen haben, bevor ich „AggregateRating“ anzeige?
Ja. Füge „AggregateRating“ nur hinzu, wenn das Produkt tatsächlich Bewertungen hat. Das obige Beispiel prüft, ob „getReviewCount() > 0“ ist, damit das Markup nicht zu Produkten ohne Bewertungen hinzugefügt wird. Gefälschte oder leere Bewertungen können eine Strafe von Google nach sich ziehen.
Wo finde ich meine Unternehmensdaten für das Store-Markup?
Gehe im Admin-Bereich unter „Unternehmen“ zu „Unternehmensdaten“. Die Daten, die du hier eingibst, werden über $webshop->getCompany() in deinem Theme verfügbar gemacht, sodass der Store-Block automatisch ausgefüllt wird.
Wo muss JSON-LD auf der Seite platziert werden?
Sie können es entweder in <head> oder in <body> platzieren. Beides ist laut Google gültig. Bei Produktseiten ist es üblich, es am Ende der Produktvorlage zu platzieren.
Mein Webshop verkauft in mehreren Sprachen. Brauche ich für jede Sprache ein eigenes Markup?
Ja, Namen und Beschreibungen im Markup müssen die Seite widerspiegeln, die der Kunde sieht. Da $product->getName() und $product->getDescription() automatisch den übersetzten Text für die aktive Sprache zurückgeben, geschieht dies ganz automatisch, wenn du die hier aufgeführten Beispiele verwendest.
Benötigen Sie Hilfe bei strukturierten Daten? Kontaktieren Sie uns unter support@shoporama.dk.
Ähnliche Artikel
SEO im Shoporama
Vollständiger Leitfaden zu den SEO-Funktionen von Shoporama - von Meta-Tags und Sitemap bis zu Google Shopping und AI Assistant.
Produktbewertungen
Erfahren Sie, wie Sie Produktbewertungen in Shoporama nutzen können. Sammeln Sie automatisch Kundenrezensionen, moderieren Sie sie und zeigen Sie...
Variablen in einem Shoporama-Thema
Überblick über die globalen und seitenbezogenen Smarty-Variablen, die in Shoporama-Themen verfügbar sind.
Implementierung von Tracking in ein Shoporama-Thema
Entwicklerhandbuch zum E-Commerce-Tracking in einem Shoporama-Theme: Data Layer, Google Tag Manager, benutzerdefinierte Ereignisse und korrekte...
Blog mit Link zu Ihrem Shop
Vollständige Anleitung zur Blog-Funktion in Shoporama - Beiträge erstellen, Veröffentlichung planen, Produkte verlinken, für Suchmaschinen...
Preisentwicklung und die Omnibus-Richtlinie
Shoporama protokolliert automatisch Preisänderungen und berechnet den korrekten Vorpreis gemäß der Omnibus-Richtlinie. Omnibus-Richtlinie (EU...
Noindex für eine Seite, ein Produkt oder eine Kategorie festlegen
Anleitung zur Einstellung von noindex in Shoporama, damit Suchmaschinen bestimmte Seiten nicht indizieren.
Verwandte Funktionen
Strukturierte Daten - automatische Schema.org-Auszeichnung
Automatisches Schema.org-Markup für Produkte, Bewertungen, Breadcrumbs und Unternehmensinformationen. Rich Snippets in Google mit Sternen und...
SEO in Shoporama - in Google sichtbar werden
Shoporama verfügt über integrierte SEO-Funktionen: hohe Geschwindigkeit, volle Kontrolle über Titel und Meta-Beschreibungen, dynamische Tags,...