Die Integration von Shopware 6 Versand-Tracking im Kundenbereich ist ein entscheidender Faktor für die Kundenzufriedenheit und professionelle Kundenkommunikation in modernen Online-Shops. Während viele Shop-Betreiber sich auf E-Mail-Benachrichtigungen konzentrieren, wird das Potenzial des Kundenkontos oft unterschätzt. Dabei checken Kunden durchschnittlich 3-4 Mal den Status ihrer Bestellung im Account-Bereich – ein enormer Traffic, den du für dich nutzen kannst. In diesem Guide zeigen wir dir, wie du eine intelligente, automatische Carrier-Erkennung direkt in dein Shopware 6 Theme integrierst, die nicht nur DHL und UPS erkennt, sondern auch alle anderen relevanten Versanddienstleister. Besonders im B2B-Bereich, wo oft mehrere Sendungen parallel laufen und verschiedene Versanddienstleister zum Einsatz kommen, ist eine professionelle Shopware 6 Versand-Tracking Lösung im Kundenkonto unverzichtbar.
Inhaltsverzeichnis
- 1. Warum Versand-Tracking im Kundenkonto wichtiger ist als du denkst
- 2. Die Standard-Lösung in Shopware 6 und ihre Grenzen
- 3. Automatische Carrier-Erkennung: Der Game-Changer
- 4. Template-Integration: So baust du es richtig ein
- 5. Tracking-Code-Formate verstehen und erkennen
- 6. Der komplette Code mit allen Carriern (inkl. B2B Suite)
- 7. B2B-Besonderheiten: Mehrere Lieferungen und Teilsendungen
- 8. Styling und UX-Optimierung
- 9. Fehlerbehandlung und Edge Cases
- 10. Plugin vs. Custom-Lösung: Was ist besser?
- Quellen und weiterführende Links
1. Warum Versand-Tracking im Kundenkonto wichtiger ist als du denkst
Die meisten Shop-Betreiber denken beim Thema Shopware 6 Versand-Tracking sofort an E-Mails. Klar, Versandbestätigungs-Mails sind wichtig. Aber hier ist die Realität: Deine Kunden loggen sich durchschnittlich 3-4 Mal in ihr Kundenkonto ein, um den Status ihrer Bestellung zu checken. Das ist massiver Traffic, den du nicht an DHL, UPS oder Hermes verschenken solltest.
Stell dir vor: Ein Kunde bestellt bei dir, bekommt die Versandmail von DHL, klickt auf den Link und landet auf der DHL-Tracking-Seite. Dort sieht er Werbung von Amazon, eBay und anderen Shops. Du hast gerade kostenlosen Traffic an deine Konkurrenz verschenkt. Mit einer professionellen Tracking-Integration im Kundenkonto behältst du die Kontrolle.
Im B2B-Bereich wird es noch wichtiger: Einkäufer haben oft mehrere offene Bestellungen gleichzeitig, teilweise mit verschiedenen Lieferadressen und unterschiedlichen Versanddienstleistern. Die wollen nicht zwischen 5 verschiedenen Carrier-Websites hin und her springen. Die brauchen eine zentrale Übersicht – in deinem Shop.
Shopware 6 Versand-Tracking – zurück zur Übersicht
2. Die Standard-Lösung in Shopware 6 und ihre Grenzen
Shopware 6 bringt von Haus aus eine Tracking-Funktion mit. Du kannst unter Einstellungen > Shop > Versandart eine Tracking-URL hinterlegen, zum Beispiel:
https://www.dhl.de/de/privatkunden/pakete-empfangen/verfolgen.html?piececode=
Shopware hängt dann automatisch die Tracking-Nummer dran. Das Problem: Du musst für jeden Versanddienstleister eine eigene Versandart anlegen. DHL? Eigene Versandart. UPS? Eigene Versandart. Hermes? Noch eine. Das skaliert nicht.
Außerdem sieht das im Standard super langweilig aus: Einfach nur ein nackter Link mit der Tracking-Nummer. Keine Icons, keine schicke Darstellung, keine Carrier-Erkennung. Deine Kunden sehen nicht auf den ersten Blick, mit welchem Dienstleister ihr Paket unterwegs ist.
Die größte Schwäche: Wenn du mehrere Carrier gleichzeitig nutzt (was im B2B-Bereich Standard ist), musst du bei jeder Bestellung manuell die richtige Versandart auswählen. Fehleranfällig und zeitaufwendig.
Shopware 6 Versand-Tracking – zurück zur Übersicht
3. Automatische Carrier-Erkennung: Der Game-Changer
Hier kommt die Lösung: Automatische Carrier-Erkennung basierend auf dem Format der Tracking-Nummer. Jeder Versanddienstleister nutzt ein spezifisches Format für seine Tracking-Codes:
- DHL: Beginnt mit „003404“ (6 Zeichen)
- UPS: Beginnt mit „1Z“ (18 Zeichen total) oder „CF“
- GLS: 2 Buchstaben + 9 Zahlen (11 Zeichen)
- Hermes/Evri: 12 Zahlen
- DPD: 14 Zeichen, beginnt mit „05“ oder „09“
- FedEx: Verschiedene Formate (12, 14, 15 Zeichen oder 96+20 Zahlen)
- TNT: Beginnt mit „GD“ oder „con“
Mit dieser Erkennung kannst du:
- Automatisch das richtige Carrier-Icon anzeigen (Font Awesome Icons)
- Den richtigen Tracking-Link generieren
- Eine einheitliche UX über alle Versanddienstleister hinweg bieten
- Im B2B-Bereich mehrere Sendungen mit verschiedenen Carriern gleichzeitig anzeigen
Der Clou: Du brauchst keine API-Keys, keine externen Services, keine teuren Plugins. Nur ein bisschen intelligentes Template-Code.
Shopware 6 Versand-Tracking – zurück zur Übersicht
4. Template-Integration: So baust du es richtig ein
Die Integration erfolgt direkt in deinem Theme, konkret im Template für die Bestelldetails im Kundenkonto. Der Standard-Pfad in Shopware 6 ist:
src/Resources/views/storefront/page/account/order-history/order-detail-document.html.twig
Du kannst aber auch ein eigenes Custom-Theme erstellen oder das Template über ein Plugin überschreiben. Wichtig ist, dass du Zugriff auf die Order-Objekte hast, speziell auf order.deliveries und delivery.trackingCodes.
Die Struktur in Shopware 6 sieht so aus:
- Order: Die Bestellung
- Deliveries: Lieferungen (eine Bestellung kann mehrere haben!)
- TrackingCodes: Sendungsnummern (eine Lieferung kann mehrere haben!)
Das ist besonders im B2B-Bereich relevant: Eine Bestellung mit 100 Artikeln wird oft in 3-4 Pakete aufgeteilt, jedes mit eigener Tracking-Nummer. Dein Code muss das abbilden können.
Die Template-Loop-Struktur
Du musst durch zwei verschachtelte Schleifen loopen:
{% for delivery in order.deliveries %}
{% for trackingCode in delivery.trackingCodes %}
{% endfor %}
{% endfor %}
Jetzt kommt die Magie: Die Carrier-Erkennung.
Shopware 6 Versand-Tracking – zurück zur Übersicht
5. Tracking-Code-Formate verstehen und erkennen
Die Kunst liegt darin, die Tracking-Codes richtig zu erkennen. Hier eine detaillierte Übersicht der wichtigsten Carrier in Deutschland:
DHL
DHL nutzt verschiedene Formate, aber das häufigste in Deutschland beginnt mit „003404“. Die komplette Nummer ist dann etwa 12-20 Zeichen lang. Beispiel: 00340434161014979767
UPS
UPS hat zwei Hauptformate: Das klassische „1Z“ Format (genau 18 Zeichen, z.B. 1Z999AA10123456784) und das europäische „CF“ Format. Wichtig: Das 1Z-Format folgt einem strikten Pattern: 1Z + 6 alphanumerische Zeichen + 10 Zahlen.
GLS
GLS verwendet ein sehr klares Format: 2 Großbuchstaben gefolgt von exakt 9 Zahlen. Beispiel: DE123456789. Die ersten beiden Buchstaben sind oft das Länderkürzel.
Hermes/Evri
Hermes nutzt exakt 12 Zahlen. Keine Buchstaben, keine Sonderzeichen. Beispiel: 123456789012. Das macht die Erkennung sehr einfach, kann aber mit anderen 12-stelligen Formaten kollidieren (deshalb Reihenfolge der Checks wichtig!).
DPD
DPD-Nummern sind 14 Zeichen lang und beginnen typischerweise mit „05“ oder „09“. Beispiel: 05123456789012.
FedEx
FedEx ist tricky, weil sie mehrere Formate nutzen: 12 Zahlen, 14 Zahlen, 15 Zahlen oder das lange Format mit 96 + 20 Zahlen. In der Praxis am häufigsten: 12 oder 14 Zahlen.
TNT
TNT-Nummern beginnen mit „GD“ oder „con“. Beispiel: GD123456789 oder con123456789.
Shopware 6 Versand-Tracking – zurück zur Übersicht
6. Der komplette Code mit allen Carriern (inkl. B2B Suite)
Jetzt kommt der vollständige Code für deine Shopware 6 Versand-Tracking Integration im Kundenkonto. Wir zeigen dir zwei Varianten: Einmal für Standard-Shops und einmal speziell für die Shopware B2B Suite.
Variante 1: Standard Shopware 6 Kundenkonto
Dieser Code gehört in dein Order-Detail-Template (z.B. src/Resources/views/storefront/page/account/order-history/order-detail.html.twig):
{% if order.deliveries %}
<div class="order-tracking">
<h3>Sendungsverfolgung</h3>
{% for delivery in order.deliveries %}
{% for trackingCode in delivery.trackingCodes %}
{% if trackingCode and trackingCode|trim|length > 0 %}
{% set cleanTrackingCode = trackingCode|trim %}
<div class="tracking-item">
{# Carrier-Erkennung wie in der B2B Variante #}
</div>
{% endif %}
{% endfor %}
{% endfor %}
</div>
{% endif %}
Variante 2: Shopware B2B Suite Integration
Für die B2B Suite musst du das Template @SwagB2bPlatform/storefront/frontend/b2borderlineitemreference/master_data.html.twig erweitern. Hier der komplette Code-Schnipsel, der produktiv im Einsatz ist:
{# G2G Anpassung - Icons der Versanddienstleister mit hinterlegten Tracking Codes #}
<table>
<tr>
<td>
<div class="d-flex tracking-code-container">
{% if orderNumber %}
{% set order = getOrderById(orderNumber) %}
{% if order %}
{% for delivery in order.deliveries %}
{% for trackingCode in delivery.trackingCodes %}
{% if trackingCode and trackingCode|trim|length > 0 %}
{% set cleanTrackingCode = trackingCode|trim %}
{# DHL Erkennung - beginnt mit 003404 #}
{% if cleanTrackingCode|u.truncate(6) == '003404' %}
<div data-href="https://www.dhl.de/de/privatkunden/pakete-empfangen/verfolgen.html?piececode={{ cleanTrackingCode }}"
onclick="window.open(this.dataset.href, '_blank');"
title="Mit DHL verfolgen">
<i class="fab fa-dhl"></i>
</div>
{# UPS Erkennung - beginnt mit 1Z (18 Zeichen) oder CF - Link zu ParcelsApp #}
{% elseif cleanTrackingCode matches '/^1Z[A-Z0-9]{16}$/' or cleanTrackingCode|u.truncate(2) == 'CF' %}
<div data-href="https://parcelsapp.com/de/tracking/{{ cleanTrackingCode }}"
onclick="window.open(this.dataset.href, '_blank');"
title="Mit UPS verfolgen">
<i class="fab fa-ups fa-lg"></i>
</div>
{# GLS Erkennung - 2 Buchstaben + 9 Zahlen (11 Zeichen) #}
{% elseif cleanTrackingCode|length == 11 and cleanTrackingCode matches '/^[A-Z]{2}[0-9]{9}$/' %}
<div data-href="https://gls-group.eu/DE/de/paketverfolgung?match={{ cleanTrackingCode }}"
onclick="window.open(this.dataset.href, '_blank');"
title="Mit GLS verfolgen">
<i class="fas fa-truck"></i>
</div>
{# Hermes/Evri Erkennung - 12 Zahlen #}
{% elseif cleanTrackingCode|length == 12 and cleanTrackingCode matches '/^[0-9]{12}$/' %}
<div data-href="https://www.myhermes.de/empfangen/sendungsverfolgung/sendungsinformation/#{{ cleanTrackingCode }}"
onclick="window.open(this.dataset.href, '_blank');"
title="Mit Hermes verfolgen">
<i class="fas fa-box"></i>
</div>
{# DPD Erkennung - beginnt oft mit 05 oder 09 und hat 14 Zeichen #}
{% elseif cleanTrackingCode|length == 14 and (cleanTrackingCode|u.truncate(2) == '05' or cleanTrackingCode|u.truncate(2) == '09') %}
<div data-href="https://tracking.dpd.de/status/de_DE/parcel/{{ cleanTrackingCode }}"
onclick="window.open(this.dataset.href, '_blank');"
title="Mit DPD verfolgen">
<i class="fas fa-shipping-fast"></i>
</div>
{# FedEx Erkennung - verschiedene Formate #}
{% elseif cleanTrackingCode|length >= 10 and (cleanTrackingCode matches '/^[0-9]{12}$/' or cleanTrackingCode matches '/^[0-9]{14}$/' or cleanTrackingCode matches '/^96[0-9]{20}$/' or cleanTrackingCode matches '/^[0-9]{15}$/') %}
<div data-href="https://www.fedex.com/fedextrack/?trknbr={{ cleanTrackingCode }}"
onclick="window.open(this.dataset.href, '_blank');"
title="Mit FedEx verfolgen">
<i class="fab fa-fedex"></i>
</div>
{# TNT Erkennung - beginnt mit GD oder con #}
{% elseif cleanTrackingCode matches '/^(GD|con)[0-9A-Z]+$/' %}
<div data-href="https://www.tnt.com/express/de_de/site_tools/tracking.html?searchType=con&cons={{ cleanTrackingCode }}"
onclick="window.open(this.dataset.href, '_blank');"
title="Mit TNT verfolgen">
<i class="fas fa-plane"></i>
</div>
{# Fallback für alle anderen Tracking-Codes - ParcelsApp #}
{% else %}
<div data-href="https://parcelsapp.com/de/tracking/{{ cleanTrackingCode }}"
onclick="window.open(this.dataset.href, '_blank');"
title="Sendung verfolgen">
<i class="fas fa-shipping-fast"></i>
</div>
{% endif %}
{% else %}
{# Fallback wenn keine Tracking-Nummer verfügbar #}
<div class="tracking-unavailable" title="Keine Tracking-Nummer verfügbar">
<i class="fas fa-question-circle text-muted"></i>
<span class="sr-only">Keine Tracking-Nummer verfügbar</span>
</div>
{% endif %}
{% endfor %}
{% endfor %}
{% endif %}
{% endif %}
</div>
</td>
</tr>
</table>
{# ENDE - G2G Anpassung #}
Wichtiger Hinweis zur B2B Suite: Die Funktion getOrderById(orderNumber) muss in deinem Theme oder Plugin verfügbar sein. In der B2B Suite ist das standardmäßig der Fall. Alternativ kannst du die Order auch über andere Wege laden.
Diese Code-Schnipsel sind produktiv im Einsatz und basieren auf echten Shopware 6 B2B-Projekten in Deutschland. Die Tracking-Code-Formate (besonders DHL „003404“ und UPS „CF“) funktionieren in der Praxis, auch wenn sie nicht in allen offiziellen Dokumentationen auftauchen.
Shopware 6 Versand-Tracking – zurück zur Übersicht
7. B2B-Besonderheiten: Mehrere Lieferungen und Teilsendungen
Im B2B-Bereich wird Shopware 6 Versand-Tracking richtig komplex. Ein typisches Szenario:
Ein Großhändler bestellt 500 verschiedene Artikel. Die werden in 8 Pakete aufgeteilt, weil nicht alles auf Lager ist. 3 Pakete gehen mit DHL, 2 mit UPS, 3 mit Spedition (TNT). Teilweise an unterschiedliche Lieferadressen (Hauptlager, Filialen).
Dein Standard-Tracking muss das abbilden können:
- Gruppierung nach Lieferadresse: Zeige klar, welches Paket wohin geht
- Statusanzeige: Welche Pakete sind schon unterwegs, welche noch in Vorbereitung?
- Artikel-Zuordnung: Welcher Artikel ist in welchem Paket? (optional, aber nice to have)
- Übersichtlichkeit: Bei 8 Tracking-Codes wird es schnell unübersichtlich
Erweiterte Template-Struktur für B2B
Für B2B solltest du die Deliveries gruppieren und zusätzliche Infos anzeigen:
{% for delivery in order.deliveries %}
<div class="delivery-group">
<h4>Lieferung {{ loop.index }} von {{ order.deliveries|length }}</h4>
{% if delivery.shippingAddress %}
<p class="shipping-address">
Lieferadresse: {{ delivery.shippingAddress.street }},
{{ delivery.shippingAddress.zipcode }} {{ delivery.shippingAddress.city }}
</p>
{% endif %}
<div class="tracking-codes">
{% for trackingCode in delivery.trackingCodes %}
{# Dein Carrier-Erkennungs-Code von oben #}
{% endfor %}
</div>
</div>
{% endfor %}
Das gibt B2B-Kunden die Übersicht, die sie brauchen. Besonders wichtig: Wenn mehrere Mitarbeiter Zugriff auf das Kundenkonto haben (was im B2B normal ist), muss jeder sofort verstehen, welches Paket wo ist.
Shopware 6 Versand-Tracking – zurück zur Übersicht
8. Styling und UX-Optimierung
Der Code alleine reicht nicht – die Darstellung muss stimmen. Hier ein Beispiel-CSS für schicke Tracking-Links:
.order-tracking {
margin: 2rem 0;
padding: 1.5rem;
background: #f8f9fa;
border-radius: 8px;
}
.tracking-item {
margin: 0.75rem 0;
}
.tracking-link {
display: inline-flex;
align-items: center;
gap: 0.75rem;
padding: 0.75rem 1.25rem;
background: #fff;
border: 2px solid #e0e0e0;
border-radius: 6px;
text-decoration: none;
color: #333;
transition: all 0.2s ease;
font-weight: 500;
}
.tracking-link:hover {
border-color: #007bff;
background: #f0f7ff;
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
}
.tracking-link i {
font-size: 1.5rem;
}
.tracking-dhl i { color: #FFCC00; }
.tracking-ups i { color: #351C15; }
.tracking-gls i { color: #0066B3; }
.tracking-hermes i { color: #003781; }
.tracking-dpd i { color: #DC0032; }
.tracking-fedex i { color: #4D148C; }
.delivery-group {
margin: 1.5rem 0;
padding: 1rem;
border-left: 4px solid #007bff;
background: #fff;
}
.shipping-address {
font-size: 0.9rem;
color: #666;
margin: 0.5rem 0;
}
Das Wichtigste bei der UX:
- Mobile First: Die meisten Kunden checken auf dem Handy
- Klare Hierarchie: Wichtigste Info (Tracking-Link) muss sofort sichtbar sein
- Visuelles Feedback: Hover-Effekte zeigen, dass Links klickbar sind
- Icon-Farben: Nutze die Original-Farben der Carrier für Wiedererkennung
Shopware 6 Versand-Tracking – zurück zur Übersicht
9. Fehlerbehandlung und Edge Cases
In der Praxis gibt es immer Edge Cases. Die häufigsten Probleme und Lösungen:
Problem 1: Leerzeichen in Tracking-Codes
Manche Mitarbeiter tippen die Tracking-Nummer mit Leerzeichen ein: „1Z 999 AA1 0123456784“. Lösung: trackingCode|trim entfernt nur Leerzeichen am Anfang/Ende. Besser: cleanTrackingCode|replace({' ': ''})
Problem 2: Mehrere Tracking-Codes in einem Feld
Jemand trägt zwei Nummern ein: „1Z999AA10123456784, 1Z999AA10123456785“. Du musst das Feld splitten: trackingCode|split(',') und dann loopen.
Problem 3: Ungültige Tracking-Codes
Mitarbeiter tragen Müll ein: „kommt morgen“ oder „keine Ahnung“. Dein Fallback (ParcelsApp) fängt das ab, aber besser wäre eine Validierung im Backend.
Problem 4: Alte/abgelaufene Tracking-Links
Nach 6 Monaten funktionieren viele Tracking-Links nicht mehr. Das kannst du nicht verhindern, aber du solltest einen Hinweis einbauen: „Tracking-Informationen sind nur für 6 Monate verfügbar“.
Problem 5: Internationale Sendungen
Bei internationalen Sendungen ändern sich manchmal die Tracking-Nummern (Übergabe zwischen Carriern). Das ist komplex und meist nicht über einfache Template-Logik lösbar. Hier brauchst du eine API-Integration.
Shopware 6 Versand-Tracking – zurück zur Übersicht
10. Plugin vs. Custom-Lösung: Was ist besser?
Es gibt mehrere Shopware 6 Versand-Tracking Plugins im Store. Die bekanntesten:
- PAQATO: Vollständige Track & Trace Lösung mit eigener Landingpage, Marketing-Features, SMS-Benachrichtigungen. Preis: Ab 49€/Monat. Pro: Sehr feature-reich. Contra: Monatliche Kosten, Overkill für kleine Shops.
- Automatisches DHL Tracking: DHL API-Integration mit Live-Status-Updates. Preis: Einmalig ~200€. Pro: Echte Live-Daten. Contra: Nur DHL, braucht API-Keys.
- Verbesserte Bestellübersicht: Zeigt Tracking-Button im Kundenkonto. Preis: ~50€. Pro: Günstig, einfach. Contra: Keine Carrier-Erkennung, nur Basic-Features.
Wann Custom-Lösung?
Unsere Template-Lösung ist besser wenn:
- Du mehrere Carrier nutzt und automatische Erkennung brauchst
- Du keine monatlichen Kosten willst
- Du volle Kontrolle über Design und Funktionalität brauchst
- Du sowieso ein Custom-Theme hast
- Du keine API-Keys besorgen willst/kannst
Wann Plugin?
Ein Plugin macht Sinn wenn:
- Du Live-Status-Updates brauchst (Paket ist angekommen, etc.)
- Du automatische Benachrichtigungen an Kunden willst
- Du Marketing-Features brauchst (Upselling auf Tracking-Page)
- Du keine Zeit für Custom-Development hast
- Du Support und Updates vom Hersteller willst
Für die meisten Shops ist unsere Custom-Lösung völlig ausreichend. Du sparst Geld und hast maximale Flexibilität. Im B2B-Bereich wo du sowieso Custom-Features brauchst, ist die Template-Lösung fast immer die bessere Wahl.
Shopware 6 Versand-Tracking – zurück zur Übersicht
Quellen und weiterführende Links
- Offizielle Shopware 6 Dokumentation zur Sendungsverfolgung
- FireBear Studio Guide: Auftragsverfolgung in Shopware 6
- PAQATO: Track & Trace Plugin für Shopware
- Shopware Store: Verbesserte Bestellübersicht Plugin
- ParcelsApp: Universeller Tracking-Service
- Font Awesome Icons für Carrier-Logos











