Breadcrumb-Schema: Navigationspfade in der Suche sichtbar machen
SERP
<meta>
SEO · Strukturierte Daten · Breadcrumbs · Magento 2
Breadcrumb-Schema: Navigationspfade in der Suche sichtbar machen
BreadcrumbList korrekt implementieren und mit der Navigation synchron halten

Breadcrumb-Schema ersetzt die angezeigte URL in den Google-Suchergebnissen durch den tatsächlichen Navigationspfad einer Seite und verbessert damit Klickrate und Nutzerorientierung. Dieser Artikel erklärt die BreadcrumbList-Struktur, warum sie eng mit der sichtbaren Magento-Breadcrumb-Navigation verzahnt sein muss, wie sich JSON-LD sauber per ViewModel einhängen lässt und welche Implementierungsfehler Rich-Snippet-Verluste verursachen.

13 Min. Lesezeit BreadcrumbList · JSON-LD · Rich Snippets Magento 2.4.8 · Hyvä Theme · Search Console

1. Warum Breadcrumb-Schema über Sichtbarkeit in der Suche entscheidet

BreadcrumbList-Schema ist einer der am meisten unterschätzten strukturierten Datentypen im E-Commerce-SEO, dabei hat es einen direkten, sichtbaren Effekt in den Suchergebnissen: Statt der langen, technischen URL zeigt Google für Seiten mit korrekt implementiertem Breadcrumb-Schema den tatsächlichen Navigationspfad an, zum Beispiel "mironsoft.de > Damenmode > Jacken & Mäntel" anstelle von "https://mironsoft.de/damenmode/jacken-maentel/winterjacke-alpin.html". Für Magento-Shops mit tiefen Kategoriehierarchien ist dieser Effekt besonders wertvoll, weil Nutzer auf einen Blick erkennen, wo sich ein Ergebnis im Shop einordnet, noch bevor sie geklickt haben.

Der Effekt ist mehr als kosmetisch. Eine klar erkennbare Kategorie-Einordnung im Snippet erhöht das Vertrauen in die Relevanz eines Ergebnisses und wirkt sich messbar auf die Klickrate aus, besonders bei generischen Suchbegriffen mit vielen ähnlichen Konkurrenzergebnissen. Gleichzeitig ist Breadcrumb-Schema technisch einfach zu implementieren, verglichen mit komplexeren Typen wie Product oder Review, was es zu einem der besten Aufwand-Nutzen-Verhältnisse im technischen SEO für Magento-Shops macht.

2. Die BreadcrumbList-Struktur im Detail: position, name, item

Das BreadcrumbList-Schema von schema.org besteht aus einem einzigen Array namens itemListElement, das eine geordnete Liste von ListItem-Objekten enthält. Jedes ListItem braucht drei Kernfelder: position als fortlaufende Ganzzahl beginnend bei 1, name als sichtbaren Text der jeweiligen Navigationsebene, und item als absolute URL zu dieser Ebene. Die Reihenfolge im Array muss der tatsächlichen Hierarchie entsprechen, von der Startseite bis zur aktuellen Seite, ohne Lücken oder doppelte Positionswerte.

Eine Besonderheit betrifft das letzte Element der Liste, also die aktuell angezeigte Seite: Laut Google-Dokumentation ist das item-Feld für das letzte ListItem optional, weil ein Link auf die eigene Seite keinen zusätzlichen Wert bietet. Trotzdem muss die Seite selbst als eigenständiges ListItem mit korrekter position auftauchen, sonst fehlt der Pfad genau dort, wo er am wichtigsten ist. Viele Implementierungen lassen diesen letzten Eintrag fälschlich komplett weg.


{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://mironsoft.de/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Damenmode",
      "item": "https://mironsoft.de/damenmode.html"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Jacken & Maentel",
      "item": "https://mironsoft.de/damenmode/jacken-maentel.html"
    },
    {
      "@type": "ListItem",
      "position": 4,
      "name": "Winterjacke Alpin"
    }
  ]
}

3. Wie Google die angezeigte URL durch den Breadcrumb-Pfad ersetzt

In den mobilen und zunehmend auch den Desktop-Suchergebnissen ersetzt Google die klassische grüne URL-Zeile durch den aus dem BreadcrumbList-Schema generierten Pfad, sofern die Struktur valide ist und mit der tatsächlichen Seite übereinstimmt. Diese Darstellung ist kein Rich Snippet im klassischen Sinn mit zusätzlichen visuellen Elementen wie Sternebewertungen, sondern eine Änderung an der Basisdarstellung jedes einzelnen organischen Ergebnisses, was den Effekt besonders breitenwirksam macht.

Wichtig zu verstehen: Diese Darstellung ist keine Garantie, sondern eine Möglichkeit, die Google situativ nutzt. Bei fehlerhaftem oder fehlendem Schema fällt Google auf die reine URL-Struktur zurück, was in tief verschachtelten Magento-Kategoriebäumen häufig unübersichtlich wirkt. Ein sauber implementiertes Schema erhöht also die Wahrscheinlichkeit der besseren Darstellung erheblich, auch wenn Google die endgültige Entscheidung über die Snippet-Darstellung behält.

4. Sichtbare Navigation und Schema-Daten müssen exakt übereinstimmen

Die wichtigste Regel bei Breadcrumb-Schema lautet: Die im Schema deklarierte Struktur muss exakt der sichtbaren Breadcrumb-Navigation auf der Seite entsprechen, in Bezeichnung, Reihenfolge und Zielseiten. Google prüft aktiv, ob strukturierte Daten den tatsächlichen Seiteninhalt widerspiegeln, und das gilt für BreadcrumbList genauso wie für Product oder FAQPage. Weicht der Schema-Pfad von der angezeigten Navigation ab, etwa durch veraltete Kategorienamen nach einer Struktur-Änderung, wird die Rich-Snippet-Berechtigung für die betroffene Seite entzogen.

Diese Konsistenzpflicht ist der Grund, warum Breadcrumb-Schema niemals als separater, statischer Codeblock gepflegt werden sollte. Sobald Schema-Daten und sichtbare Navigation aus unterschiedlichen Quellen stammen, etwa ein hartcodiertes JSON-LD-Template und ein dynamischer Breadcrumb-Block, driften beide bei der nächsten Kategorie-Umstrukturierung garantiert auseinander. Die einzig robuste Lösung ist eine gemeinsame Datenquelle, aus der sowohl die sichtbare Navigation als auch das Schema generiert werden.


// WRONG: schema breadcrumb path does not match the visible navigation
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://mironsoft.de/"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Winterjacken",
      "item": "https://mironsoft.de/winterjacken.html"
    }
  ]
}
// Visible breadcrumb on the page actually shows:
// Home > Damenmode > Jacken & Maentel > Winterjacke Alpin
// Problems: position jumps from 1 to 3 (gap in the sequence), the
// category name and URL do not match the real category ("Winterjacken"
// instead of "Jacken & Maentel"), and the current product page is
// missing entirely from the list.

5. Magentos Breadcrumb-Block und das Hyvä-Template

Magento rendert die sichtbare Breadcrumb-Navigation über den Block Magento\Theme\Block\Html\Breadcrumbs, der die einzelnen Navigationsstufen als assoziatives Array in der Eigenschaft crumbs verwaltet. Controller und Layout-Handler befüllen diesen Block über die Methode addCrumb(), zum Beispiel im Kategorie-Controller für Kategorieseiten oder im CMS-Page-Controller für statische Seiten. Jeder Eintrag enthält die Felder label für den sichtbaren Text, title für das Tooltip-Attribut, link für die Ziel-URL und optional first beziehungsweise last als boolesche Marker.

Im klassischen Luma-Theme rendert Magento_Theme/templates/html/breadcrumbs.phtml diese Daten als HTML-Liste. Hyvä-Themes verwenden dasselbe Datenmodell, ersetzen aber das Template durch eine schlanke, Knockout.js-freie Variante, meist ebenfalls unter Magento_Theme/templates/html/breadcrumbs.phtml im Theme-Override. Entscheidend ist: Die Datenquelle bleibt in beiden Fällen identisch, der Block liefert dieselben crumbs, unabhängig vom Rendering-Ansatz, was ihn zum idealen Ankerpunkt für die Schema-Generierung macht.

6. JSON-LD per ViewModel an dieselbe Datenquelle hängen

Um Divergenz zwischen sichtbarer Navigation und Schema strukturell auszuschließen, sollte das JSON-LD nicht in einem eigenen Template erzeugt werden, sondern über ein ViewModel, das denselben Breadcrumbs-Block injiziert bekommt und dessen getCrumbs()-Daten direkt in die BreadcrumbList-Struktur übersetzt. Das ViewModel implementiert ArgumentInterface, wird per Layout-XML in dieselbe Template-Instanz eingebunden, die auch die sichtbare Navigation rendert, und hat damit garantiert Zugriff auf exakt dieselben Daten zum exakt selben Zeitpunkt im Seitenaufbau.

Wichtig ist außerdem die Sonderbehandlung der Startseite und einzelner Crumbs: Enthält das crumbs-Array nur ein Element oder ist leer, sollte das ViewModel bewusst kein Schema ausgeben, da eine einelementige Breadcrumb-Liste keinen Navigationsmehrwert bietet und von Google explizit nicht empfohlen wird. Diese Prüfung gehört direkt in die ViewModel-Methode, nicht als nachträgliche Bedingung im Template, damit sie an keiner Stelle vergessen werden kann.


<?php
declare(strict_types=1);

namespace Mironsoft\SeoSuite\ViewModel;

use Magento\Framework\View\Element\Block\ArgumentInterface;
use Magento\Theme\Block\Html\Breadcrumbs;
use Magento\Framework\Serialize\Serializer\Json;

/**
 * Builds BreadcrumbList JSON-LD from the same crumb data the visible
 * breadcrumb navigation renders, so schema and page can never diverge.
 */
class BreadcrumbSchema implements ArgumentInterface
{
    /**
     * @param Breadcrumbs $breadcrumbsBlock Native breadcrumb block instance
     * @param Json $jsonSerializer Serializer for the final JSON-LD payload
     */
    public function __construct(
        private readonly Breadcrumbs $breadcrumbsBlock,
        private readonly Json $jsonSerializer
    ) {
    }

    /**
     * Returns the serialized BreadcrumbList JSON-LD, or null when the page
     * has one crumb or fewer (e.g. the homepage), where schema should be omitted.
     *
     * @return string|null
     */
    public function getSchemaJson(): ?string
    {
        $crumbs = $this->breadcrumbsBlock->getCrumbs();
        if (!is_array($crumbs) || count($crumbs) <= 1) {
            return null;
        }

        $items = [];
        $position = 1;
        $lastIndex = count($crumbs) - 1;

        foreach (array_values($crumbs) as $index => $crumb) {
            $listItem = [
                '@type' => 'ListItem',
                'position' => $position,
                'name' => $crumb['label'] ?? '',
            ];

            // Omit "item" only for the current page, the final crumb
            if ($index !== $lastIndex && !empty($crumb['link'])) {
                $listItem['item'] = $crumb['link'];
            }

            $items[] = $listItem;
            $position++;
        }

        $schema = [
            '@context' => 'https://schema.org',
            '@type' => 'BreadcrumbList',
            'itemListElement' => $items,
        ];

        return $this->jsonSerializer->serialize($schema);
    }
}

7. Layout-XML: ViewModel und Template sauber verdrahten

Die Verdrahtung erfolgt über Standard-Hyvä-Layout-XML: Im jeweiligen Seiten-Layout, etwa catalog_category_view.xml oder cms_page_view.xml, wird der ViewModel via viewModel-Argument an das Breadcrumbs-Template gebunden. Da Magento den Breadcrumbs-Block bereits global im Default-Layout referenziert, reicht in den allermeisten Fällen eine einzige zusätzliche Argument-Deklaration, ohne den Block selbst zu duplizieren oder zu überschreiben. Das hält die Änderung minimal-invasiv und kompatibel mit zukünftigen Core-Updates.

Für Seitentypen mit abweichender Breadcrumb-Logik, etwa Suchergebnisseiten oder Herstellerseiten aus Erweiterungen, lohnt sich ein zentraler Plugin-Ansatz auf addCrumb(), der zusätzliche Metadaten wie eine stabile Positions-ID mitschreibt, damit das ViewModel unabhängig vom aufrufenden Modul immer eine konsistente Reihenfolge erzeugt. So bleibt die Schema-Generierung korrekt, unabhängig davon, ob die Breadcrumbs vom Core, von Magefan Blog oder von einer Drittanbieter-Erweiterung befüllt wurden.


<?php
/** @var \Magento\Framework\View\Element\Template $block */
/** @var \Magento\Framework\Escaper $escaper */
/** @var \Hyva\Theme\Model\ViewModelRegistry $viewModels */
/** @var \Mironsoft\SeoSuite\ViewModel\BreadcrumbSchema $breadcrumbSchema */
$breadcrumbSchema = $viewModels->require(\Mironsoft\SeoSuite\ViewModel\BreadcrumbSchema::class);
$crumbs = $block->getCrumbs();
$schemaJson = $breadcrumbSchema->getSchemaJson();
?>
<?php if ($crumbs): ?>
<nav class="text-sm text-gray-500 mb-4" aria-label="Breadcrumb">
    <ol class="flex flex-wrap items-center gap-1">
        <?php foreach ($crumbs as $crumbName => $crumbInfo): ?>
        <li class="flex items-center gap-1">
            <?php if (!empty($crumbInfo['link'])): ?>
                <a href="<?= $escaper->escapeUrl($crumbInfo['link']) ?>" class="hover:text-primary">
                    <?= $escaper->escapeHtml($crumbInfo['label']) ?>
                </a>
            <?php else: ?>
                <span class="text-gray-700"><?= $escaper->escapeHtml($crumbInfo['label']) ?></span>
            <?php endif; ?>
            <?php if (!($crumbInfo['last'] ?? false)): ?>
                <span aria-hidden="true">/</span>
            <?php endif; ?>
        </li>
        <?php endforeach; ?>
    </ol>
</nav>
<?php if ($schemaJson): ?>
<script type="application/ld+json"><?= /* @noEscape */ $schemaJson ?></script>
<?php endif; ?>
<?php endif; ?>

8. Häufige Implementierungsfehler bei Breadcrumb-Schema

Der häufigste Fehler ist der bereits beschriebene Mismatch zwischen Schema und sichtbarer Navigation, meist verursacht durch hartcodierte oder gecachte JSON-LD-Fragmente, die bei einer Kategorie-Umbenennung nicht mitaktualisiert werden. Der zweitwichtigste Fehler ist eine unvollständige Positionskette: Entweder fehlt die aktuelle Seite als letztes ListItem komplett, oder die position-Werte enthalten Lücken, etwa weil eine Zwischenebene beim Filtern der Navigation übersprungen, aber im Schema nicht neu durchnummeriert wurde.

Ein dritter, oft übersehener Fehler ist Breadcrumb-Schema auf der Startseite selbst, wo es laut Google-Richtlinien keinen Sinn ergibt, weil kein übergeordneter Pfad existiert. Viertens führen inkonsistente Implementierungen zwischen Kategorieseiten und CMS-Seiten häufig zu Problemen, etwa wenn Kategorien über den nativen Breadcrumbs-Block laufen, redaktionelle Landingpages aber über ein komplett separates CMS-Widget mit eigener, unabhängig gepflegter Logik. Eine einheitliche ViewModel-Quelle für alle Seitentypen verhindert genau dieses Auseinanderdriften.


// WRONG: BreadcrumbList schema rendered on the homepage itself
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://mironsoft.de/"
    }
  ]
}
// A single-item trail adds no navigational value in search results.
// Google's guidelines recommend omitting BreadcrumbList entirely on
// the homepage, since there is no parent path left to display.

// CORRECT: the ViewModel only emits schema when the crumb count is > 1,
// see getSchemaJson() in the BreadcrumbSchema class above, which
// returns null for the homepage and any other single-level page.

9. Breadcrumb-Schema im Vergleich: Fehler vs. korrekte Umsetzung

Die folgende Übersicht fasst die häufigsten Implementierungsfehler bei Breadcrumb-Schema den jeweils korrekten Umsetzungen gegenüber, sortiert nach der Häufigkeit, mit der sie in Magento-Shop-Audits tatsächlich auftreten.

Bereich Typischer Fehler Korrekte Umsetzung Warum es wichtig ist
Schema-Pfad Weicht von der sichtbaren Navigation ab Stammt aus derselben Datenquelle wie die Navigation Sonst Entzug der Rich-Snippet-Darstellung
Aktuelle Seite Letztes ListItem fehlt komplett Letzte position vorhanden, item optional Pfad muss bis zur aktuellen Seite reichen
Startseite Breadcrumb-Schema auf der Startseite eingebunden Schema erst ab der ersten Kategorieebene Kein übergeordneter Pfad vorhanden
Kategorie vs. CMS Getrennte, unabhängig gepflegte Logik je Seitentyp Eine ViewModel-Quelle für alle Seitentypen Verhindert Auseinanderdriften bei Änderungen
Positionswerte Lücken oder doppelte position-Werte Fortlaufende Ganzzahlen beginnend bei 1 Ungültige Reihenfolge wird von Google ignoriert

In der Praxis lassen sich fast alle diese Fehler durch dieselbe strukturelle Entscheidung vermeiden: Schema und sichtbare Navigation aus einer gemeinsamen, block-gebundenen Datenquelle zu generieren, statt beide unabhängig voneinander zu pflegen. Wer diesen einen Grundsatz konsequent umsetzt, muss die einzelnen Fehlerquellen aus der Tabelle in der Praxis kaum noch einzeln prüfen.

Mironsoft

SEO-Strukturdaten, Breadcrumb-Schema und Hyvä-Optimierung für Magento-Shops

Breadcrumb-Schema professionell implementieren?

Wir analysieren die Breadcrumb-Struktur eures Magento-Shops, prüfen die Übereinstimmung mit dem sichtbaren Navigationspfad und implementieren ein robustes ViewModel-basiertes Schema, das mit jeder Kategorieänderung automatisch konsistent bleibt.

Schema-Audit

Rich Results Test, Search-Console-Abgleich und Priorisierung nach Seitentyp

ViewModel-Implementierung

BreadcrumbList-Schema direkt aus dem bestehenden Breadcrumbs-Block ableiten

Konsistenz-Monitoring

Automatisierte Prüfung auf Divergenz zwischen Schema und Navigation

10. Zusammenfassung

Breadcrumb-Schema für Magento-Shops löst ein konkretes Sichtbarkeitsproblem in der Suche: Es ersetzt die technische URL durch den tatsächlichen Navigationspfad und macht Suchergebnisse dadurch greifbarer und vertrauenswürdiger. Die BreadcrumbList-Struktur selbst ist einfach, drei Felder pro Ebene, aber die Fehleranfälligkeit liegt fast ausschließlich in der Synchronisation mit der sichtbaren Navigation. Wer Schema-Daten separat von der eigentlichen Breadcrumbs-Logik pflegt, produziert über kurz oder lang Inkonsistenzen, die Google mit dem Entzug der Rich-Snippet-Darstellung bestraft.

Die robuste Lösung ist strukturell, nicht inhaltlich: Ein ViewModel, das direkt auf denselben Breadcrumbs-Block zugreift, der auch die sichtbare Navigation rendert, schließt Divergenz von vornherein aus. In Kombination mit klaren Regeln für Sonderfälle wie die Startseite oder fehlende letzte Positionen lässt sich Breadcrumb-Schema so implementieren, dass es dauerhaft korrekt bleibt, auch wenn sich die Kategoriestruktur des Shops über die Zeit verändert.

Breadcrumb-Schema für Magento-Shops - Das Wichtigste auf einen Blick

BreadcrumbList-Struktur

itemListElement mit position, name und item pro Ebene. Letztes item optional, position aber Pflicht.

SERP-Effekt

Ersetzt die angezeigte URL durch den Navigationspfad, keine Garantie, aber deutlich höhere Wahrscheinlichkeit.

Konsistenzpflicht

Schema muss exakt der sichtbaren Breadcrumb-Navigation entsprechen, sonst Entzug der Rich-Snippet-Darstellung.

Magento-Hook

ViewModel liest direkt aus dem Breadcrumbs-Block (getCrumbs()), keine separate Datenquelle.

11. FAQ: Breadcrumb-Schema für Magento-Shops

1Was ist BreadcrumbList-Schema und wofür wird es verwendet?
Ein schema.org-Datentyp, der den Navigationspfad einer Seite als geordnete Liste von ListItem-Objekten beschreibt. Google zeigt damit statt der technischen URL den tatsächlichen Kategoriepfad in der Suche an.
2Wie ersetzt Google die angezeigte URL durch den Breadcrumb-Pfad in der Suche?
Bei validem, übereinstimmendem Schema ersetzt Google die URL-Zeile im Ergebnis durch den generierten Navigationspfad, etwa "Shop > Kategorie > Unterkategorie".
3Welche Felder benötigt ein ListItem im BreadcrumbList-Schema zwingend?
position (fortlaufende Ganzzahl ab 1) und name (sichtbarer Text). item mit der absoluten URL ist für alle außer der letzten Ebene ebenfalls erforderlich.
4Muss das letzte ListItem (aktuelle Seite) ein item-Feld mit URL enthalten?
Nein, das item-Feld ist für das letzte ListItem optional. Die position muss trotzdem gesetzt sein, sonst fehlt der Pfad an der wichtigsten Stelle.
5Warum müssen sichtbare Breadcrumbs und Schema-Daten übereinstimmen?
Google prüft aktiv, ob Schema und Seiteninhalt übereinstimmen. Bei Abweichungen entzieht Google der Seite die Berechtigung für die Rich-Snippet-Darstellung.
6Wo rendert Magento die Breadcrumb-Navigation und wie greife ich technisch darauf zu?
Über Magento\Theme\Block\Html\Breadcrumbs, das die Navigationsstufen als Array in crumbs verwaltet und über getCrumbs() bereitstellt, identisch in Luma und Hyvä.
7Wie hooke ich JSON-LD-Ausgabe in den bestehenden Breadcrumb-Block, ohne Divergenz zu riskieren?
Über ein ViewModel, das denselben Breadcrumbs-Block injiziert bekommt und dessen getCrumbs()-Daten direkt in die BreadcrumbList-Struktur übersetzt.
8Sollten Breadcrumbs auch auf der Startseite als Schema ausgezeichnet werden?
Nein. Auf der Startseite existiert kein übergeordneter Pfad, ein einelementiger Breadcrumb bietet keinen Mehrwert und sollte weggelassen werden.
9Was passiert, wenn Google eine Diskrepanz zwischen Schema und sichtbarem Inhalt erkennt?
Die Rich-Snippet-Berechtigung wird entzogen, die Seite fällt im Suchergebnis auf die reine URL-Anzeige zurück.
10Wie teste ich, ob mein Breadcrumb-Schema korrekt geparst wird?
Mit dem Google Rich Results Test für einzelne URLs und über die Google Search Console unter "Verbesserungen" für die aggregierte Sicht über alle Seiten.