Skincare shoppers read the ingredient list before they read the marketing copy. For anyone managing eczema, pregnancy restrictions, fungal acne or a fragrance allergy, that list is not a detail at the bottom of the page — it is the buying decision. If they cannot find it, they assume you are hiding something, and they leave.

Most Shopify themes were not built for this. The ingredient list ends up pasted into the description tab as an unbroken block of Latin, or worse, into an image that no one can search, copy or hear read aloud. This guide covers where the list belongs on a product page, how to keep it accurate, and the presentation patterns that answer the shopper’s question instead of burying it.

What is an INCI list, exactly?

INCI stands for International Nomenclature of Cosmetic Ingredients — a standardised naming system so that the same ingredient carries the same name in every market. Water is Aqua, vitamin E is Tocopherol, and shea butter is Butyrospermum Parkii Butter. The point is unambiguity across languages, not obscurity.

Two rules govern how the list is ordered, and both matter for how you display it:

  • Descending order of weight, down to 1%. In the EU this comes from Regulation (EC) No 1223/2009, Article 19.
  • Below 1%, order is free. Anything under one percent can be listed in any sequence after the ingredients above one percent.

That second rule is the one brands most often misread when they reorder a list to put a hero ingredient higher. You cannot promote Retinol above Aqua because it is the selling point. The US FDA applies the same descending-order principle to cosmetic labelling.

Fragrance is the common exception: individual fragrance compounds may be declared collectively as Parfum or Fragrance. In the EU, 26 specific fragrance allergens must still be named individually once they exceed 0.001% in a leave-on product or 0.01% in a rinse-off one.

Where should the ingredient list go on the product page?

Put the full list on the product page itself, in text, above the reviews and below the core buying information — price, variant, add to cart, how to use. It should be reachable without leaving the page, without opening a PDF and without a search. A shopper checking for one ingredient should find it in under ten seconds.

The three placements that consistently fail:

In a PDF or an image. An ingredient list inside a JPEG cannot be searched with Cmd+F, cannot be read by a screen reader, cannot be translated by the browser, and cannot be indexed. It is the single most common mistake in beauty ecommerce, and it is usually done because the list came from the packaging artwork rather than from the product data.

Behind a link to a separate page. Every extra click is an invitation to leave. This is information that supports the purchase; it belongs on the page where the purchase happens.

Only in the description tab, unformatted. A wall of 40 Latin names with no structure is technically present and practically unreadable. Presence is not the same as legibility.

How to make a long Latin list readable

Split the job in two. Answer the question most shoppers actually have — what does this do, and is the thing I care about in here — then give the complete list underneath for the people who want to read every line. One layer without the other fails a different half of your customers.

A structure that works on a real product page:

  1. Key actives, called out. Three to five ingredients with the concentration where you have one, and a plain sentence on what each does. Niacinamide 5% — evens tone and supports the barrier.
  2. Sensitivity flags. Fragrance-free, alcohol-free, essential-oil-free, non-comedogenic — as short labels, only where they are true.
  3. The full INCI list, verbatim, in text, in the correct order.
  4. Last updated date for the list itself, and the batch or formula version if you reformulate.

Two implementation details make a disproportionate difference:

  • Keep it selectable text. Not an image, not a canvas. A shopper searching for phenoxyethanol should be able to hit Cmd+F and find it.
  • Give the block a real heading and a stable anchor. It gives you a linkable target for customer service replies, and it gives search engines a labelled section rather than a run-on paragraph.

Should the ingredient list be structured data?

Do not invent structured data for it. Schema.org has no property for a cosmetic ingredient declaration, and stretching an unrelated type to fit is a manual-action risk rather than an optimisation. What you can legitimately do is mark up the questions your ingredient list generates — is this fragrance-free? — as FAQPage, provided those questions and answers are visible on the page.

The visibility condition is not a technicality. Structured data must reflect what a visitor sees; markup describing content that isn’t rendered is exactly what Google’s structured data policies prohibit.

Keeping the list accurate when the formula changes

Store the ingredient list as product data, not as prose typed into the description. In Shopify that means a metafield on the product — a multi-line text field for the full INCI list, plus separate fields for actives and their concentrations. The theme renders whatever the field contains.

This matters the first time you reformulate. If the list lives in the description of every product, a preservative swap becomes a manual find-and-replace across dozens of products, and one missed entry is a compliance problem rather than a typo. If it lives in a metafield, it is one field per product, editable by whoever owns the formula rather than whoever owns the website.

The same structure lets you do things the description never could:

  • Filter a collection by fragrance-free because the flag is a value, not a sentence.
  • Show “contains: niacinamide” on a collection card.
  • Feed accurate ingredient data to a routine builder or a skin-type quiz.
  • Export the list for a marketplace listing without reformatting it by hand.

Does any of this help you rank?

Indirectly, and more than you would expect. Ingredient names are queries. People search “niacinamide serum fragrance free” and “is bakuchiol safe in pregnancy”, and a product page carrying a legible, text-based ingredient section with a labelled heading is eligible for those searches in a way that a page with the list trapped in a JPEG is not.

The same content is what AI assistants read when someone asks whether a product contains a particular ingredient. Assistants extract passages, not pages — a clearly headed ingredient section with the list in text is extractable; an image is not there at all. This is the cheapest overlap between doing right by a customer with a fragrance allergy and being found.

The short version

  • Full INCI list on the product page, in selectable text, in the legally correct order.
  • Actives and sensitivity flags first, complete list underneath.
  • Ingredient data in a metafield, never typed into the description.
  • No invented structured data; FAQPage only for questions the page visibly answers.
  • Date the list, and update it when the formula changes.

None of this requires a custom build. It requires a theme that treats the ingredient list as product data with a place to live, rather than as text you paste somewhere and hope shoppers find.

Halftone is built this way: ingredient and INCI sections are native to the product page, driven by metafields, with actives, sensitivity flags and the full list rendered as text. The documentation covers the fields and how they map.