Product Labels and Badges for Magento 2
Product Labels adds sale, new, stock and brand labels to product images by rules and product attributes, so they appear and disappear as prices, stock and the catalog change.
Labels can show the real discount or the stock left, use one of 12 editable templates or your own image, and appear on category, search and widget listings and on the product page, on Luma and Hyvä.
- Sale, new and low-stock labels by rules
- Real discount % and stock left on the label
- A brand logo for every attribute option
- 12 editable templates or your own image
- Nine positions, several labels per product
- Hyvä support built in
Product labels, stickers and badges that follow your catalog
A "Sale" sticker you upload once is easy. Keeping it on the right products is the hard part: the discount ends, stock runs out, a new collection arrives, and someone has to update the badges by hand.
Product Labels puts labels on product images by rules and product attributes, so they appear and disappear as your catalog changes:
- Sale labels for products with a discount, showing the real percentage or amount saved
- "New" labels for products added in the last N days
- "Only 3 left" and "Out of stock" labels driven by stock quantity and status
- A brand logo or feature badge for every option of a product attribute
- Labels on category, search and widget listings, related products and the main product image
Most stores use labels for sales and discounts, free shipping, brand and feature badges, and out-of-stock notices. All of these run on their own once the rule is set.
Labels that switch on by themselves
A rule-based label is shown on every product that matches its conditions. You build the conditions the same way as in Magento's promotion rules, combining them with ALL or ANY:
- Discount: percent discount, final price, or the difference between price and final price. The label reads the price after catalog price rules and special prices, so it shows the discount Magento actually gives.
- New arrivals: Magento's "Set Product as New" dates, or days since the product was created or updated.
- Stock: quantity in stock (for example, fewer than 5 for a low-stock label), stock status and whether the product is salable.
- Catalog: category, attribute set, SKU, brand or any attribute available for promotion rules.
Each label also has its own customer groups, store views and active dates. For example, show a "-20%" label on pants only to visitors who aren't logged in, with the discount itself set up in a Magento catalog price rule. Product Labels shows discounts; it doesn't create them.
Configurable products are covered too: a label can follow the selected variant and update when the shopper picks a swatch, or appear on the parent product when any of its variants matches the rule.
Show the real numbers on the label
Label text can include values taken from each product, so one label works for the whole catalog:
- "Save 25%" or "Save $30" from the product's discount percentage or amount
- "Only 3 left" from the stock or salable quantity
- "Sale ends in 4 days" from the special price end date
- "Added 3 days ago" from the days since the product became new
- Any attribute value, such as the material or warranty period
The numbers are calculated for every product in advance, when the extension rebuilds its label index, so you don't edit labels when a price or stock level changes. The list of variables is in the user manual.
Brand logos and attribute badges without a rule for each
An attribute label gives every option of a dropdown or multiple-select attribute its own image or text. Create one label for the Brand attribute, add a logo for each brand, and every product gets the logo of its brand. Stores with many brands save the most time here.
The same works for any attribute you sell by: a warranty badge, an energy class, "Made in Italy" or a free shipping badge. On configurable products, the parent shows the attribute labels of its variants.
Ready templates, your own images, or text
A label can be an image (PNG, GIF, JPG or SVG), text, or text on one of 12 ready templates: badge, price tag, rounded and wave shapes, arrow, flag, circles and a corner. Templates are HTML and LESS, so you can edit them or create your own, with a preview on test data before saving. Text labels can include HTML and emoji.
A label can also have a tooltip on hover and a link, for example to the sale page. Clickable labels work from the keyboard, and label text is marked as decorative for screen readers and search engines.
You can use the same label on listings and the product page, or a different one for each, for example a small badge in the category grid and a bigger one on the product image.
Nine positions and several labels per product
Each label goes into a placeholder: one of nine positions on the product image (top, middle or bottom, left, center or right), or a manual placeholder you add anywhere in your theme's template.
When several labels match one product, the placeholder decides how they're shown: the maximum number of labels, whether they line up horizontally or vertically, and which come first by sort order. A product on sale that's also new and low in stock doesn't end up with three badges on top of each other.
If you don't need labels on certain pages, hide them there, for example in the shopping cart.
See what a rule matches before it goes live
For instance, here's a label for a sale on bags:
-
Step 1. Set the sale dates, store views and customer groups for the label.
-
Step 2. Choose the products in the Conditions tab, for example the Bags category. After you save, the tab shows how many products the conditions match, so you can check the reach before the label's start date.
-
Step 3. Pick the image or template, the text and the position. The label grid shows a preview of each label.
The sale label appears on every bag in the category and leaves on its own when the sale dates end.
Hyvä support built in
Hyvä support is part of the extension since version 2.6.0, with no separate compatibility package to install. On Hyvä, labels show on category, search and CMS listings, related product tiles and the main product image. The only extra step is for your developer: after installing or updating, regenerate the Hyvä config and rebuild Tailwind, as described in the Hyvä guide.
Built for large catalogs
Labels are prepared in advance by their own index and rendered in the page HTML, so the storefront doesn't check rules for each product on every visit. A category page loads the labels for all its products in one database query.
The 2026 releases were focused on stores with large catalogs: labels stay visible during a full reindex, two reindexes can't run at the same time, and the index changelog is cleaned in batches, so a large backlog doesn't stall the database.
Still comparing product label extensions? Our comparison of Magento 2 product label extensions puts the paid and free options side by side on label rules, cart labels and Hyvä support, including where another one is the better fit.
Save time by starting your support request online and we'll connect you to an expert.
What can product labels be used for in a Magento store?
Stores most often use labels to mark sales and discounts, free shipping, brand or feature badges taken from product attributes, new arrivals and out-of-stock products.
With Product Labels, these labels follow the catalog: a sale label shows on discounted products, a "New" label on products added in the last N days, and an "Only 3 left" label when stock drops below the quantity you set. A bestseller label is set by hand, with an attribute, SKU or category.
What types of labels can I create?
There are two types. A rule label appears on every product that matches its conditions (discount, new, stock, category, attributes). An attribute label gives each option of a dropdown attribute its own image or text, such as a logo for every brand.
A label can be an image (including SVG), text, or text on one of 12 editable HTML and LESS templates. You can use the same label on listings and the product page or a different one for each. To adapt a label for small screens, add media queries to its styles.
Can a label show the actual discount or the stock left?
Yes. Label text can include variables that are filled in for each product: the discount percentage or amount, the stock or salable quantity, the days left until the special price ends, the days since the product became new, and any attribute value. So one label shows "Save 25%" on one product and "Save 10%" on another.
The discount is read from the final price, after catalog price rules and special prices. The variables are listed in the user manual.
How do I create a product label?
- Choose a placeholder: one of nine positions on the product image or a manual placeholder in your theme.
- Create the label: its type, conditions, store views, customer groups and active dates.
- Set the look: a ready template, your own image or text, and the label text.
- Save and apply the label.
Custom CSS is optional. The quick start guide walks through the first label.
Where can a label be placed?
Each label goes into a placeholder. Nine placeholders form a 3x3 grid on the product image, so you can choose the top right corner, the bottom left corner, the center and so on.
A manual placeholder puts a label anywhere on the page. To use it, add the placeholder's code snippet to your theme template. A placeholder can hold several labels, with a limit, a horizontal or vertical direction, and sort order to decide which come first.
Which pages show product labels?
Labels show wherever Magento renders a product image in a list: category and search results, CMS pages and widgets, and related, up-sell and cross-sell products. On the product page, they show on the main image.
Labels aren't designed for the cart and checkout. If they appear there with your theme, hide them on those pages in the extension settings.
Why does a label show on the category page but not on the product page?
The most common reason is a custom or Hyvä product gallery that doesn't have the placeholder the label uses. Add a manual placeholder to the gallery template, or choose a placeholder that your gallery supports.
If a label is missing everywhere, check that the label index is up to date (in "Update by Schedule" mode, changes wait for cron or for the Apply button in the label form) and flush the page cache.
Can I schedule labels for a sale?
Yes. Each label has Active From and Active To dates, plus store views and customer groups. The dates are applied when the label index is rebuilt, which runs daily by default, so a label switches on or off on that day rather than at the exact minute.
Does it work with Hyvä themes?
Yes. Hyvä support is built into the extension since version 2.6.0, so there's no separate compatibility package. Labels show on Hyvä category, search and CMS listings, related product tiles and the main product image.
After installing or updating, regenerate the Hyvä config and rebuild Tailwind. See the Hyvä guide.
Does it support GraphQL or headless (PWA) storefronts?
No. Labels are rendered on the server as part of the page HTML, and the extension has no GraphQL or REST API for labels. It's built for Luma-based and Hyvä themes.
mirasvit/module-cataloglabel-hyva was still installed, composer update refused to resolve and named no way out until you removed it by hand. Composer now removes it by itself during the upgrade.<script> pasted into it was stored and shown to shoppers. Descriptions are now cleaned on save like titles, and simple formatting such as <b> still works. Labels saved before this update are not cleaned automatically, so open and save them again to clean them.item.phtml that rendered labels without calling setViewCode('list') got the product-page appearance in the listing. The layout now tells the block which appearance to use on each page. If your template calls setViewCode() itself, that call still takes precedence.color did not appear on a configurable product whose red variant has that value, because the parent product has no color of its own. The parent now shows the labels of its variants' option values for that attribute.Mirasvit\CatalogLabel\Block\Product\Label PHP class was removed — Nothing in the extension had used it since 2.5.17 removed the templates it rendered, and it could no longer load labels even if called. Storefront labels are unaffected, and the Block\Product\Label\Renderer, Label\Placeholder and Label\Display blocks remain. Only custom code or a custom theme that referenced this class directly needs updating — use Block\Product\Label\Renderer instead.[stock_qty] label variable showed 0 on every configurable product. It now shows the combined stock of the configurable's child products. On stores without MSI, [salable_qty] had the same problem and is fixed too.getAdditionalHtmlManually()).mirasvit/module-cataloglabel-hyva, is gone: everything it contained is part of Product Labels itself. That is the labels on Hyvä category, search and CMS product listings, the label overlaid on the product page's main image, the Tailwind styles that position a label in its corner of the image, and the script that refreshes labels when a shopper picks a swatch on a configurable product. There is no longer an extra package to find and keep in step, and on a Luma store the Hyvä part simply stays dormant. If the package is installed on your store, remove it before you upgrade — the first item under Improvements has the commands.bin/magento hyva:config:generate and then npm run build-prod in your theme's web/tailwind directory. The extension now registers its own Tailwind sources, which the retired package used to do on its behalf. Skipping it leaves a label sitting under the product image instead of on it: the theme keeps serving the stylesheet it was built with, and that file knows nothing about the position-* classes the extension puts on a placeholder.Hyva_MirasvitCatalogLabel is gone, not renamed — The Hyvä module no longer exists in any form, and neither does its dependency on hyva-themes/magento2-compat-module-fallback. Which template a block uses is now decided in layout: a hyva_default.xml that Magento merges only on a Hyvä theme points the one block that needs it at its Hyvä version. Nothing in the extension asks which theme is active. setup:upgrade removes the old module name from app/etc/config.php for you. You only need to act if you referenced Hyva_MirasvitCatalogLabel yourself — in a custom di.xml, a layout file, or a deployment script that enables modules by name.Hyva_MirasvitCatalogLabel::ajax.phtml to Mirasvit_CatalogLabel::ajax-hyva.phtml. The other two the retired package carried — labelRenderer.phtml and label/display.phtml — are gone entirely: both themes render the extension's own Mirasvit_CatalogLabel::labelRenderer.phtml and Mirasvit_CatalogLabel::label/display.phtml. The same goes for the JavaScript, which is now Mirasvit_CatalogLabel::js/label-updater.js. An override sitting at a path that no longer exists is simply not read, and there is no error to say so — the stock template renders instead. Luma template paths did not change.role, no tabindex, no Enter/Space handling — and its link text was counted by search engines as anchor text for the product, which is the "identical anchor text for different pages" warning 2.5.15 fixed for Luma. That anchor was also nested inside the product tile's own link, which is invalid HTML. All three are fixed on Hyvä by the merge, because both themes now render the same template. Luma storefronts were unaffected by any of them.gallery.phtml renders the product.labels block itself, as the Hyvä instructions describe, the extension added the same label a second time on top. It now sees that the label is already in the gallery and leaves it alone. The retired package behaved the same way, so stores that had it installed may already have seen this. A stock Hyvä gallery was never affected.view/frontend/templates/product/badge.phtml, product/list.phtml, product/view.phtml and view/adminhtml/templates/label/preview.phtml. Labels on the storefront and the label preview in the admin are unaffected — they use different templates. Only a custom theme that copied or referenced one of these four files directly needs updating.Helper\Data::getProductHtml(), getProductListHtml() and getProductViewHtml(). Two of them could no longer render anything at all, and the third rendered a template that is now gone. Custom code calling them should use Block\Product\Label\Renderer or Block\Product\Label\Placeholder instead.Block\Adminhtml\Label\Preview, Model\System\Config\Source\LabelOutputType and Model\System\Config\Source\RenderMode. They were not referenced anywhere in the module, but custom code or a custom theme that referred to them must be updated.[discount_percent] label variable and the "Percent Discount" label condition returning wrong values for bundle products. A fixed bundle with a percentage-based special price reported a large negative discount; once the bundle's required options cost more than the special price saved, the discount went negative as well; and dynamic bundles reported no discount at all. The discount is now measured between the bundle's full regular price and its full discounted price — required options included — so it matches the discount you configured (a 20% special price now reports 20%).0.Blog
We are committed to being open and transparent with our customers. When you purchase our module, you automatically receive one year of free support service and free updates.
Why is this important?
- Seamless Installation and Configuration: We understand that setting up a new module can take time to configure according to your specific needs. That’s why we offer a full year of free support. Our experienced team is here to assist you with installation, configuration, and any questions you might have. We're eager to share our expertise to ensure you get the most out of your purchase.
- Stay Updated with Magento (Adobe Commerce) Releases: Magento releases new versions approximately every three months. These updates can sometimes introduce compatibility challenges. To keep your store running smoothly, we provide a year of free access to the latest versions of our modules, ensuring that you can upgrade Magento and our modules without encountering any obstacles.
- Subscription Included: Renewing your subscription ensures continued access to the latest updates and support from our team. This means you can be confident that any issues you encounter with the extension will be resolved quickly and efficiently. You can cancel your subscription at any time without any additional fees.
These are our primary. A major portion of our new clients come from referrals from our existing clients. Our professional team of developers, marketers and support staff have invested the best knowledge and experience in the field into our work, so you know you can come back to us again and again.
One year free and high quality support. We go to great lengths to provide maximum satisfaction with every module you have purchased in our store. By helping you with installation, configuration, answering your every question, we do all our best to eliminate any possible problems.
30-days money back guarantee. If you are not satisfied with our extension performance for any reason, we provide a full refund.
We constantly add new features to all our modules, and are always interested in hearing your opinion and implementing your suggested features in our future developments.
We provide an expanded user guide for every aspect of our extension, so you can find answers for all your burning questions.
You can customize extension according to your needs and requirements.
The Module is easy to install and upgrade, just follow our step-by-step user guide. Additionally, the extension is ready to use with the Hyvä theme.
No core modifications. The extension has been tested in a Magento Cloud environment and is fully compatible with it.
Andriy Kovalenko