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:
- Natural-language ingredient descriptions (50–150 words each) ✅
- Canonical naming + aliases — so semantic queries ("vitamin B3" → niacinamide) ✅
- Property/utility taxonomy — so concern queries ("anti-aging," "non-comedogenic") ✅
- Free-from and concern flags — so exclusion queries ("paraben-free," "fragrance-free") ✅
- Source/derivation — vegan, animal-derived, synthetic, mineral. Increasingly queried ✅
- 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
| Attribute | What it is | Why it matters for AI |
|---|---|---|
| Product name | The exact name as you advertise it | The anchor the AI uses to identify the product. Must match across PDP, ads, and reviews. |
| Brand | brand name | Required for the AI to cite you. Without it, the AI references the product but credits no one. |
| EAN / barcode | The 13-digit universal product code | Lets AI systems cross-reference your product across retailers and deduplicate listings. |
| Image URL | High-quality, well-lit product image | AI shopping surfaces show images next to recommendations. No image means lower click-through. |
| Product URL | The canonical link to your PDP | Where the AI sends a shopper when it cites you. This is the click that ends up in your analytics. |
| Price + currency | Current retail price | "Best X under $40" queries are exploding. If your price isn't on the page, you're excluded from price-bounded answers. |
| Category | Moisturizer, serum, sunscreen, etc. | The basic taxonomy the AI uses to navigate categories. |
| Product description | Your existing marketing copy or product blurb | The 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."
| Attribute | What it is | Why it matters for AI |
|---|---|---|
consistency | Texture/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_signals | Structured 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_fit | True/false per skin type: dry, normal, combination, oily, sensitive, mature | Powers "good moisturizer for [skin type]" queries — one of the most common AI search patterns in beauty. |
concern_targeting | True/false per concern: hydration, fine_lines, uneven_tone, hyperpigmentation, redness, acne, spf | Powers "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.
| Attribute | What it is | Why it matters for AI |
|---|---|---|
inci_name + standard_capitalization | The 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_name | The 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_name | The 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_position | The 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_description | 50–150 words of plain-English explanation per ingredient | Lets the AI answer "what does niacinamide do?" from your page — and credit you as the source. The single biggest LLM citation driver. |
source | Where the ingredient comes from: synthetic, mineral, plant-derived, animal-derived | Powers fast-growing "vegan", "plant-based", "no animal-derived" queries — and lets AIs back up a vegan claim ingredient-by-ingredient. |
group + other_utility | Category (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_flags | Four 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_stats | Product-level rollup: total ingredient count, allergen_count, fragrance_count | Lets 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
| Attribute | What it is | Why it matters for AI |
|---|---|---|
key_benefits | Each 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_at | ISO-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 + @type | Schema.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 attribution | A small "Powered by Inference Beauty" footer | AIs 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_signalsincludes "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_descriptionfor niacinamide indriving_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_cautionacross the fulldriving_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:
- Confirm your commercial data (name, brand, EAN, image, price, URL, description) is correct and up to date.
- 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
Example request — fetching the enriched payload for EAN 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.