EU compliance6 min read
EU Nutrition Label vs US Nutrition Facts: A Shopify Guide
Selling food into the EU from Shopify? See how an EU nutrition label differs from a US Nutrition Facts panel and how to build it as real text, not an image.
In this guide
- EU nutrition label vs US Nutrition Facts: the differences that matter
- The EU table: values, order and “of which” lines
- Common mistakes when a US label is reused
- Why a text table beats a label image on a product page
- How to build an EU nutrition label as text with Etiketto
- What this does not do
- Rebuild one label first
If you sell food or supplements into the EU and your product pages show a US-style Nutrition Facts panel, often as an uploaded image, that panel is probably not what EU shoppers and food authorities expect to see. The EU nutrition declaration has its own layout, units and basis. They are set out in Regulation (EU) No 1169/2011 on food information to consumers, published on EUR-Lex.
This post compares the two formats, lists the mistakes that come from reusing a US label, and shows how to build the EU version as real text on a Shopify product page.
Written by the StoreFleet team. The first draft was AI-assisted and a person reviewed it. This is general information, not legal advice, and following it does not guarantee compliance. Points marked (verify) are ones we have not checked line by line: check them against the current consolidated text of the regulation or with a qualified adviser before you rely on them. If you want the full list of what a food product page should show, see our EU food product page checklist.
EU nutrition label vs US Nutrition Facts: the differences that matter
The two formats answer different questions. The US panel is built around a serving. The EU table is built around a fixed reference quantity, so shoppers can compare one product with another.
| US Nutrition Facts panel | EU nutrition declaration | |
|---|---|---|
| Basis for values | Per serving, with servings per container | Per 100 g or per 100 ml; per portion may be added alongside, under conditions (verify Article 33) |
| Energy | Calories | kJ and kcal, both shown |
| Salt | Sodium | Salt (salt equivalent = sodium × 2.5, Annex I) |
| Sub-lines | Total Fat, Saturated Fat, Trans Fat, Total Carbohydrate, Dietary Fiber, Total Sugars, Added Sugars | Fat “of which saturates”; carbohydrate “of which sugars” |
| Carbohydrate | Total Carbohydrate includes dietary fiber (verify) | Carbohydrate excludes fibre; fibre is an optional separate line (verify Annex I) |
| Daily Value | Daily Value percentages are part of the panel | Not part of the mandatory table; reference intakes are optional (verify Article 32(4)) |
| Layout | A fixed panel design | A table with the numbers aligned, where space permits (Article 34(2)) |
If you copy the US panel, you are likely to miss the per-100 g values, the kJ figure or the salt line, and your carbohydrate figure may include fibre that the EU table counts separately.
The EU table: values, order and “of which” lines
Article 30(1) lists the mandatory content of the nutrition declaration. Annex XV sets the order and units. For the mandatory items, that gives seven rows:
- Energy (kJ / kcal)
- Fat
- of which saturates
- Carbohydrate
- of which sugars
- Protein
- Salt
Optional nutrients, such as fibre, slot into the Annex XV order when you declare them: fibre goes after the carbohydrate rows and before protein. For the full format, including the optional rows and rounding, see our guide to the EU nutrition declaration format.
The “of which” lines are part of the line above. Saturates are part of the fat total, and sugars are part of the carbohydrate total. So an “of which” value can never be larger than its total. A sugars value of 12 g under a carbohydrate value of 9 g cannot be right. This is the quickest sanity check you can run on any label, and it catches the typos that creep in when values are copied from a spreadsheet or a supplier sheet.
Common mistakes when a US label is reused
- Per-serving values in a per-100 g column. A 30 g serving is not 100 g. Recalculate from your specification or lab results.
- Sodium where salt is expected. Multiply sodium by 2.5 to get salt.
- Calories only. Energy must be shown in kJ and kcal.
- Fibre counted in carbohydrate. The US total includes fiber; the EU carbohydrate line does not (verify).
- An “of which” line larger than its total. Check every saturates and sugars value against the line above.
- Allergens not emphasised in the ingredients. Article 21 requires allergens to be emphasised in the list of ingredients, for example in bold (verify the exact wording for your case).
Why a text table beats a label image on a product page
An uploaded label image is hard to read on a phone, cannot be translated, and screen readers and search engines cannot read the values in it. It also goes stale: change the recipe and you have to redo the image.
A real text table follows the same rules as the rest of your page. It can be translated, read aloud and updated in one place.
You can build it by hand in your theme: product metafields for each value, then Liquid or HTML in a tab or accordion. It works. The parts that tend to break are keeping the same table structure across a whole catalogue and bolding allergens inside free-text ingredient lists. If metafield values do not show up, see Shopify nutrition and allergen metafields not showing.
How to build an EU nutrition label as text with Etiketto
Etiketto: EU Nutrition Labels is a Shopify app for food shops selling into the EU. It shows the food information Regulation (EU) No 1169/2011 requires on your product pages: a nutrition table, ingredients with allergens in bold, and the operator.
Here is the flow for a product that currently uses a US-style image:
- Get your values per 100 g or 100 ml from your own specification, lab results or producer. Convert sodium to salt, and add the kJ figure if you only have calories. To get the kJ figure from your fat, carbohydrate and protein values, enter them in the EU nutrition label generator.
- Run the “of which” check yourself: saturates no larger than fat, sugars no larger than carbohydrate.
- Enter the values in the app’s editor: energy in kJ and kcal, fat, saturates, carbohydrate, sugars, fibre, protein and salt, per 100 g.
- Add the ingredients and mark the allergens with asterisks. The product page shows the marked words in bold. Only the words you mark are emphasised.
- Add the operator’s name and address.
- Add the Food information block to the product template of an Online Store 2.0 theme in the theme editor. No theme code changes. Pick a table, accordion, compact or card layout.
- Remove the old label image from the product description, then check the live page against the pack.
The block renders plain HTML text, not an image, so search engines, screen readers and translation tools read it like the rest of the page. Label wording comes in 10 languages. If you sell one product in several flavours or sizes, you can give each variant its own label, and the page shows the label of the variant the shopper picks.
What this does not do
The app shows the values you enter in the structure of an EU table. It does not calculate your nutrition values, convert a US panel for you, or decide which claims you may make, and it does not make a page compliant by itself. Have your values checked by your lab, supplier or a regulatory adviser, and check which other information applies to your products.
Rebuild one label first
Pick one product that shows a US-style label image, rebuild it as a per-100 g text table, and compare the live page with the pack before you move on to the rest. To show the nutrition table, bold allergens and operator details from one editor and one theme block, install Etiketto: EU Nutrition Labels from the Shopify App Store.