Shopify Rabatt-Badge mit Liquid: Prozent automatisch berechnen

Statt Rabattwerte von Hand zu pflegen, berechnet dieses Liquid-Snippet die Ersparnis aus dem Variantenpreis. Mit Code, CSS, Einbau und wichtigen Hinweisen.

Ein Rabatt-Badge ist schnell eingebaut. Schwieriger wird es, wenn Produkte verschiedene Varianten, verschiedene Vergleichspreise oder gar keinen gültigen Streichpreis haben. Ein fest eingetragener Hinweis wie „–20 %“ kann dann falsche Informationen zeigen.

Mit diesem Shopify-Liquid-Snippet berechnest du den prozentualen Rabatt anhand einer konkreten Variante. Das Badge erscheint nur dann, wenn deren Vergleichspreis über dem aktuellen Verkaufspreis liegt.

Das Ergebnis

Angenommen, ein Artikel kostet aktuell 79 € und hat einen gültigen Vergleichspreis von 99 €. Die Berechnung lautet:

(99 – 79) / 99 × 100 = gerundet 20 %.

Das Badge zeigt –20 %. Ohne höheren Vergleichspreis wird kein Badge ausgegeben.

Das komplette Liquid-Snippet

Lege unter Onlineshop → Themes → … → Code bearbeiten → snippets die Datei discount-percentage.liquid an:

{%- comment -%}
  snippets/discount-percentage.liquid
  Auf einer Produktseite oder in einer Produktkarte:
  {% render 'discount-percentage', product: product %}
{%- endcomment -%}
{%- assign badge_variant = product.selected_or_first_available_variant -%}
{%- if badge_variant
  and badge_variant.compare_at_price > badge_variant.price
  and badge_variant.price > 0
-%}
  {%- assign amount_saved = badge_variant.compare_at_price
    | minus: badge_variant.price
  -%}
  {%- assign percent_saved = amount_saved
    | times: 100.0
    | divided_by: badge_variant.compare_at_price
    | round
  -%}
  {%- if percent_saved > 0 -%}
    <span class="discount-badge" aria-label="{{ percent_saved }} Prozent Rabatt">
      -{{ percent_saved }} %
    </span>
  {%- endif -%}
{%- endif -%}

Das Snippet nutzt die von Shopify bereitgestellte ausgewählte beziehungsweise erste verfügbare Variante. Entscheidend sind deren price und compare_at_price – nicht etwa der niedrigste Produktpreis kombiniert mit einem Vergleichspreis einer anderen Variante.

Warum? Bei mehreren Varianten können pauschale Produktwerte Werte verschiedener Varianten abbilden. Für einen Rabattprozentsatz sollten beide Preise immer zur selben Variante gehören. Dokumentation: Shopify Liquid – product und Shopify Liquid – variant.

So baust du das Badge ein

  1. Theme duplizieren, bevor du den Code bearbeitest. Nutze die Kopie für deine Tests.
  2. Snippet discount-percentage.liquid anlegen und den Code einfügen.
  3. In der Produktkarte deines Themes (häufig eine Datei wie snippets/card-product.liquid) die vorhandene Produktvariable prüfen.
  4. Das Snippet bei der Preis- oder Badge-Ausgabe rendern. Ein beispielhafter Aufruf mit der Variable card_product:
{% render 'discount-percentage', product: card_product %}

Auf einer Produktseite, auf der die Variable product zur Verfügung steht:

{% render 'discount-percentage', product: product %}

Die konkrete Position hängt vom Theme ab. In manchen Themes existieren bereits Sale-Badges. Dann solltest du die bisherige Ausgabe anpassen, statt zwei Rabatt-Badges übereinander anzuzeigen.

Minimales CSS

.discount-badge {
  display: inline-flex;
  align-items: center;
  padding: .35rem .65rem;
  border-radius: .35rem;
  background: #8f2424;
  color: #fff;
  font-size: .875rem;
  font-weight: 700;
  line-height: 1.25;
}

Lege es nach Möglichkeit in der vorhandenen Theme-CSS-Datei ab. Verwende die Farben und Abstände deines Designsystems, statt bei jeder Produktkarte eigene Inline-Styles zu erzeugen.

Was ist mit Variantenwechseln?

Liquid wird auf dem Server gerendert. Ein Wechsel der Variante per JavaScript aktualisiert die bereits ausgegebene Zahl nicht automatisch. Manche Themes laden Teile der Produktinformationen bei einem Variantenwechsel neu; andere nicht.

Falls dein Theme die Preisregion dynamisch ersetzt, muss das Badge Teil genau dieser aktualisierten Region sein. Andernfalls muss die JavaScript-Variantenlogik auch das Badge neu rendern. Teste deshalb nicht nur die zuerst ausgewählte Variante.

Vier wichtige Prüfungen

  • Kein Vergleichspreis: Das Badge darf nicht erscheinen.
  • Vergleichspreis kleiner oder gleich Verkaufspreis: Ebenfalls kein Badge.
  • Variante gewechselt: Rabatt muss zur neuen Variante passen.
  • Rabattaktionen und Märkte: Kundenspezifische Rabatte an der Kasse oder unterschiedliche Marktpreise sind nicht automatisch identisch mit dem durch compare_at_price dargestellten Nachlass.

Für die rechtlich korrekte Darstellung von Preisermäßigungen – insbesondere den maßgeblichen vorherigen Preis nach den anwendbaren Verbraucherpreisregeln – ist der Händler verantwortlich. Ein technisch berechneter Prozentsatz ersetzt diese Prüfung nicht.

Warum dieses kleine Snippet sinnvoll ist

Du pflegst den Vergleichspreis dort, wo er hingehört: in Shopify. Das Theme berechnet daraus den Hinweis. Der Code benötigt keine zusätzliche Rabatt-App und lädt kein externes Skript. Ob er die Conversion Rate tatsächlich verbessert, solltest du anhand realer Daten prüfen, statt es zu versprechen.

Wenn du eine saubere Rabattdarstellung über Produktkarten, Produktseite und Variantenwechsel hinweg möchtest, gehört das zu einer durchdachten Shopify-Theme-Entwicklung. Passend dazu: Shopify CRO optimieren.

War dieser Artikel hilfreich?

Dein Feedback hilft uns, unsere Ratgeber zu verbessern.

Mit Digitalhaus Kunze gearbeitet?

Dann freuen wir uns über deine ehrliche Erfahrung auf Google – unabhängig davon, ob sie positiv oder kritisch war.

Auf Google bewerten

Artikel teilen

WhatsApp ↗ LinkedIn ↗ E-Mail ↗

Alle Ratgeberartikel

DIGITALHAUS / REGIONEN

In deiner Region aktiv.

Entdecke die verfügbaren regionalen Leistungsseiten. Betreut aus Wettin-Löbejün im Saalekreis.

Rhein-Neckar

Auch im Umfeld: Heidelberg · Ludwigshafen am Rhein · Schwetzingen · Viernheim

Halle & Saalekreis

Auch im Umfeld: Bad Dürrenberg · Landsberg · Leuna · Petersberg · Salzatal · Schkopau · Wettin-Löbejün

Leipzig & Umgebung

Auch im Umfeld: Delitzsch · Markkleeberg · Markranstädt · Schkeuditz · Taucha

Salzlandkreis

Auch im Umfeld: Alsleben (Saale) · Arnstein · Barby · Bördeland · Calbe (Saale) · Güsten · Ilberstedt · Könnern · Nienburg (Saale) · Seeland

Anhalt-Bitterfeld

Auch im Umfeld: Aken (Elbe) · Muldestausee · Osternienburger Land · Raguhn-Jeßnitz · Sandersdorf-Brehna · Südliches Anhalt · Zörbig

Magdeburg & Umgebung

Auch im Umfeld: Biederitz · Sülzetal · Wolmirstedt

Dessau-Roßlau & Umgebung

Auch im Umfeld: Aken (Elbe) · Coswig (Anhalt) · Oranienbaum-Wörlitz

Mansfeld-Südharz

Auch im Umfeld: Gerbstedt · Goldene Aue · Großörner · Klostermansfeld · Mittelhausen · Niederröblingen · Oberröblingen · Siebigerode · Vatterode · Walbeck · Wettelrode · Wolferstedt

Rhein-Main-Gebiet

Auch im Umfeld: Aschaffenburg · Bruchköbel · Budenheim · Bürgel · Dreieich · Flörsheim am Main · Friedrichsdorf · Griesheim · Groß-Gerau · Hofheim am Taunus · Ingelheim am Rhein · Kaiserlei · Langen (Hessen) · Maintal · Ober-Eschbach · Oberursel (Taunus) · Pfungstadt · Raunheim · Schwalbach am Taunus · Sulzbach (Taunus) · Taunusstein · Weiterstadt

Thüringen

Auch im Umfeld: Apolda · Arnstadt · Gotha · Rudolstadt · Stadtroda · Weimar

Sachsen

Auch im Umfeld: Freiberg · Freital · Mittweida · Pirna · Radebeul · Zwickau

Harz

Auch im Umfeld: Allrode · Bad Suderode · Ballenstedt · Derenburg · Drei Annen Hohne · Friedrichsbrunn · Gernrode · Heimburg · Hüttenrode · Huy · Ilsenburg · Langenstein · Osterwieck · Schierke · Treseburg