What to publish on your PDPs for AI discoverability

Last updated May 12, 2026

Why this matters

When a shopper asks ChatGPT, Claude, Perplexity, or Google's AI Overviews "what's a good fragrance-free moisturizer for sensitive skin," the AI doesn't invent the answer — it pulls from product pages it has crawled and parsed.

The richer and more structured your PDP, the more likely your product is the one the AI recommends, names, and links to. The list below is what we recommend you expose on every page. Each item earns visibility for a specific kind of question.

What we can provide that LLMs hunger for

The flag taxonomy (anti-aging, comedogenic, allergen, etc.) is necessary but not sufficient. LLMs ingest and synthesize text — natural-language descriptions matter more than booleans alone. Our enrichment combines both:

  1. Natural-language ingredient descriptions (50–150 words each) ✅
  2. Canonical naming + aliases — so semantic queries ("vitamin B3" → niacinamide) ✅
  3. Property/utility taxonomy — so concern queries ("anti-aging," "non-comedogenic") ✅
  4. Free-from and concern flags — so exclusion queries ("paraben-free," "fragrance-free") ✅
  5. Source/derivation — vegan, animal-derived, synthetic, mineral. Increasingly queried ✅
  6. Use-case framing — "good for X / avoid if Y." Mirrors user query patterns directly — benefit list ✅

And one more thing AI systems love: freshness. Every enriched payload ships with an enriched_at timestamp — e.g. "enriched_at": "2026-05-07T10:23:00Z" — a machine-readable token that tells crawlers exactly when the data was last refreshed. AIs weight recent, dated content higher than undated content, and re-crawl pages whose timestamps move. It's a small field that does a lot of work.

1. Product identity — basic findability

AttributeWhat it isWhy it matters for AI
Product nameThe exact name as you advertise itThe anchor the AI uses to identify the product. Must match across PDP, ads, and reviews.
Brandbrand nameRequired for the AI to cite you. Without it, the AI references the product but credits no one.
EAN / barcodeThe 13-digit universal product codeLets AI systems cross-reference your product across retailers and deduplicate listings.
Image URLHigh-quality, well-lit product imageAI shopping surfaces show images next to recommendations. No image means lower click-through.
Product URLThe canonical link to your PDPWhere the AI sends a shopper when it cites you. This is the click that ends up in your analytics.
Price + currencyCurrent retail price"Best X under $40" queries are exploding. If your price isn't on the page, you're excluded from price-bounded answers.
CategoryMoisturizer, serum, sunscreen, etc.The basic taxonomy the AI uses to navigate categories.
Product descriptionYour existing marketing copy or product blurbThe raw source we use to generate AI-optimised summaries. Even a few sentences is enough.
You almost certainly already have all of this. Our integration plugs it in alongside the synthesised summaries and enriched ingredient data.

2. Discovery signals — getting surfaced for intent-based questions

This is where you stop being "a moisturizer" and start being "the fragrance-free moisturizer for sensitive skin that the AI recommends."

AttributeWhat it isWhy it matters for AI
consistencyTexture/format of the product: cream, gel, lotion, balm, oil, serum, etc.Powers "best gel moisturizer" or "lightweight cream for oily skin" queries. Lets AIs filter by texture preference — a common but rarely-exposed shopping axis.
formulation_signalsStructured flags: fragrance-free, vegan, paraben-free, sulfate-free (and similar)How AIs answer "is this fragrance-free?" or "show me vegan options." Without explicit signals, the AI guesses from the ingredient list — and often guesses wrong.
skin_type_fitTrue/false per skin type: dry, normal, combination, oily, sensitive, maturePowers "good moisturizer for [skin type]" queries — one of the most common AI search patterns in beauty.
concern_targetingTrue/false per concern: hydration, fine_lines, uneven_tone, hyperpigmentation, redness, acne, spfPowers "what helps with [concern]" queries. The AI equivalent of category browsing.

3. Ingredient intelligence — depth and trust

This is the layer competitors don't have — and the one that converts a casual mention into a confident recommendation.

AttributeWhat it isWhy it matters for AI
inci_name + standard_capitalizationThe regulatory INCI name (e.g. "NIACINAMIDE") and its display-cased version ("Niacinamide")Matches how regulators, scientific literature, and product labels reference the ingredient — the AI's anchor for cross-referencing across sources.
common_nameThe everyday alias shoppers actually search: "Vitamin B3", "Vitamin E", "Water"Shoppers search "vitamin B3," not "niacinamide." Common names quadruple the surface area of queries you match against.
chemical_nameThe IUPAC/chemistry name (e.g. "3-Pyridinecarboxamide")Answers technical and scientific-literacy queries ("what's the chemical structure of…?") and signals data depth to AIs evaluating source quality.
inci_positionThe ingredient's rank in the INCI list (1 = highest concentration)Lets AIs reason about concentration ("is this a high-niacinamide formula?") — a question shoppers ask but most PDPs can't answer.
short_description50–150 words of plain-English explanation per ingredientLets the AI answer "what does niacinamide do?" from your page — and credit you as the source. The single biggest LLM citation driver.
sourceWhere the ingredient comes from: synthetic, mineral, plant-derived, animal-derivedPowers fast-growing "vegan", "plant-based", "no animal-derived" queries — and lets AIs back up a vegan claim ingredient-by-ingredient.
group + other_utilityCategory (vitamin, humectant, emollient, occlusive…) and functional roles (skin conditioning, barrier support, soothing…)Enables granular "compare X and Y" or "products with vitamin C" queries, and lets AIs cluster ingredients by mechanism.
caution_flagsFour sub-flags per ingredient: pregnancy_caution, allergen_caution, sensitivity_status, regulatory_notes (e.g. "EU Allergen")"No common allergens", "pregnancy-safe", and "EU compliant" queries are frequent and high-intent. Surfacing these explicitly wins them.
inci_statsProduct-level rollup: total ingredient count, allergen_count, fragrance_countLets AIs filter and rank at speed ("show me low-fragrance options", "shortest-INCI moisturizers") without having to parse every ingredient list themselves.

4. Authority and trust signals

AttributeWhat it isWhy it matters for AI
key_benefitsEach claim paired with its driving_ingredients — e.g. "Hydration → Glycerin, Sodium Hyaluronate, Squalane"Lets the AI explain why the product delivers each benefit. AIs cite supported claims; they discount unsupported ones.
meta.enriched_atISO-8601 timestamp of the last enrichment, e.g. "2026-05-07T10:23:00Z"A machine-readable freshness signal. AIs weight recent, dated content higher than undated content, and re-crawl pages whose timestamps move.
@context + @typeSchema.org Product declaration extended with our namespace (schema.inferencebeauty.com/v1)Tells crawlers the payload is structured data, not prose — and that it conforms to a known, versioned schema. Structured data gets parsed reliably; unstructured copy gets guessed at.
Provider attributionA small "Powered by Inference Beauty" footerAIs weight content higher when the source of factual claims is identified. A small line of text that makes everything above it more credible.

What you provide vs. what we provide

You provide (your commerce data)

  • Product name
  • Brand
  • EAN
  • Image URL
  • Product URL
  • Price + currency
  • Category (if available)
  • Product description / marketing blurb

We provide (our enrichment)

  • Consistency (cream, gel, etc.)
  • Formulation signals (vegan, paraben-free, etc.)
  • Key benefits
  • Driving ingredients for key benefits
  • Driving ingredients breakdown
    • INCI name
    • Standard capitalization
    • Common name
    • Chemical name
    • INCI position
    • Short description
    • Source
    • Group
    • Other utility
    • Caution flags (pregnancy caution, allergen caution, sensitivity status, regulatory notes)
  • Skin-type fit
  • Concern targeting
  • INCI stats (count, allergen count, fragrance count)
  • Enriched-at timestamp (freshness signal for AI crawlers)
  • Schema.org structured-data declaration (@context, @type)

What this looks like in real-world queries

Three example shopper questions and what wins them:

"Best fragrance-free moisturizer for sensitive skin under $40"

  • Wins on: formulation_signals includes "fragrance-free", skin_type_fit.sensitive = true, price exposed.
  • Loses if: "fragrance-free" is buried inside marketing copy without being flagged as a structured attribute.

"What does niacinamide do?"

  • Wins on: the short_description for niacinamide in driving_ingredients_breakdown, with your PDP as the source.
  • Loses if: your ingredient list is just an INCI string dump with no explanations.

"Is this product safe during pregnancy?"

  • Wins on: per-ingredient caution_flags.pregnancy_caution across the full driving_ingredients_breakdown.
  • Loses if: shoppers have to interpret the INCI list themselves and the AI has to guess.

The bottom line

You don't have to write any of the technical or ingredient content yourself. We synthesise it from your EAN. Your job is small:

  1. Confirm your commercial data (name, brand, EAN, image, price, URL, description) is correct and up to date.
  2. Have engineering implement the integration template — typically half a day's work.

Within a few weeks of crawler indexing, your PDPs become the source of truth that AI search engines cite when shoppers ask questions about products in your category. That's the visibility — and the click — we're earning together.

Example: how to fetch the enriched data

Once your products are enrolled, the enriched payload is served at a per-product URL keyed by EAN. Your engineering team fetches it server-side and embeds it on the PDP (typically as a JSON-LD <script> block inside the page head).

URL pattern

GEThttps://provideddomain.com/products_geo_enriched/{ean}/

Example request — fetching the enriched payload for EAN 0716170124353:

GEThttps://provideddomain.com/products_geo_enriched/0716170124353/

Example response

{
  "@context": [
    "https://schema.org",
    "https://schema.inferencebeauty.com/v1"
  ],
  "@type": "Product",
  "ean": "0716170124353",
  "category": "moisturizer",
  "consistency": "cream",
  "meta": {
    "enriched_at": "2026-05-07T10:23:00Z",
    "enriched_by": "InferenceBeauty.com"
  },
  "formulation_signals": [
    "fragrance-free",
    "vegan",
    "paraben-free",
    "sulfate-free"
  ],
  "key_benefits": [
    { "claim": "Hydration",       "driving_ingredients": ["Glycerin", "Sodium Hyaluronate", "Squalane"] },
    { "claim": "Barrier support", "driving_ingredients": ["Niacinamide", "Squalane", "Tocopherol"] },
    { "claim": "Soothing",        "driving_ingredients": ["Panthenol", "Niacinamide"] }
  ],
  "driving_ingredients_breakdown": {
    "inci_name": "NIACINAMIDE",
    "standard-capitalization": "Niacinamide",
    "common_name": "Vitamin B3",
    "chemical_name": "3-Pyridinecarboxamide",
    "inci_position": 3,
    "short_description": "A form of vitamin B3 widely used to support the skin barrier, even tone, and reduce visible pores.",
    "source": "synthetic",
    "group": "vitamin",
    "other utility": ["skin conditioning", "humectant", "barrier support"],
    "caution_flags": {
      "pregnancy_caution":  ["retinol"],
      "allergen_caution":   ["dimethicone", "silicone"],
      "sensitivity_status": ["dimethicone", "silicone"],
      "regulatory_notes":   ["EU Allergen"]
    },
    "skin_type_fit": {
      "dry":         true,
      "normal":      true,
      "combination": false,
      "oily":        false,
      "sensitive":   false,
      "mature":      true
    },
    "concern_targeting": {
      "hydration":         true,
      "spf":               true,
      "uneven_tone":       true,
      "fine_lines":        false,
      "redness":           true,
      "acne":              false,
      "hyperpigmentation": false
    },
    "inci_stats": {
      "count": 9,
      "allergen_count": 2,
      "fragrance_count": 0
    }
  }
}

Cache the payload as long as you like — when meta.enriched_at changes, refetch. We notify your integration endpoint on updates so you never have to poll.