---
name: "pdp-ai-readable"
description: "Convert image-heavy EVAS product detail pages into AI-readable HTML for Imweb (KR default): Mistral OCR, images-first + open collapsible text panel, Product/FAQ JSON-LD files for header inject. Use for PDP convert, 상세페이지 AI, GEO/AEO product HTML, BubbleShare-style conversion without BubbleShare. Prefer evas-pdp-geo-kr for full OpenSEO+deploy loop when user only gives idx/product code."
---

# PDP AI-Readable

## One-line run (convert only, no deploy)

```text
idx={N} PDP convert only
```

Full loop (demand+deploy) → use **`evas-pdp-geo-kr`** with `idx={N} KR PDP GEO`.

Convert one product detail page into crawlable HTML for EVAS Imweb.

**Default language: Korean (`evasmall.co.kr`). Do not deploy EN unless explicitly requested.**

For the full KR GEO loop (OpenSEO MCP → prompts → deploy → verify), use **`evas-pdp-geo-kr`**.

## Goal

1. Collect product facts + detail images
2. OCR (prefer Mistral OCR 4)
3. Build **layout v3**: uninterrupted images + `<details open>` continuous text
4. Write Product + FAQPage JSON-LD files (not inside Froala body)
5. Save artifacts under `artifacts/pdp/{brand}/idx-{n}/`
6. Cosmetics claim safety pass

## Canonical layout (v3)

```text
[detail images only]
<details open>
  summary: 제품 정보·성분·FAQ (클릭하여 접기/펼치기)
  panel: dense continuous HTML (tables, how-to, FAQ answers)
</details>
```

Why:
- Design images stay clean
- Humans see text expanded by default
- Crawlers still get full text in DOM
- Froala strips `<script>` → JSON-LD via site Header inject, not body

## Inputs

Required:
- Product URL (KR mall)

Optional:
- `related-prompts.json` (from OpenSEO / GSC)
- Brand `@id` (default FRAIJOUR)
- Organization `@id`: `https://www.evascosmetic.com/#organization`

## Workflow

### 1. Page evidence
- name, price, short description, disclosure
- detail images (`fr-dib` / upload CDN)

### 2. OCR
1. `mistral-ocr-4-0` when key available
2. Correct brand OCR errors (약육 → 약쑥)
3. Never invent clinical numbers not on artwork/disclosure
4. Save `ocr/slice_XX.json`

### 3. Demand language
If related-prompts / OpenSEO exists, drive FAQ and title seeds from it.
Else product-grounded FAQ only; volumes `unknown`.

### 4. Build HTML
- Images first (single set)
- Open collapsible continuous text panel
- No JSON-LD scripts in body

### 5. JSON-LD files
- `product-v3.jsonld.json`, `faq-v3.jsonld.json`
- Header registry snippet for idx

### 6. Deliverables
```text
artifacts/pdp/{brand}/idx-{n}/
  INDEX.json
  deployed-kr.html
  product-v3.jsonld.json
  faq-v3.jsonld.json
  related-prompts.json
  ocr/
  meta.md
```

### 7. Deploy notes (KR only)
- Imweb KR language unit only
- Verify live open details + `data-evas-pdp-ld`

## EN

Do **not** deploy EN from this skill. Generate EN files only when orchestrated by `evas-pdp-geo-en`.
During KR work: never switch Imweb EN language tabs.

Orchestration:
- KR full loop → `evas-pdp-geo-kr`
- EN full loop (separate OpenSEO market) → `evas-pdp-geo-en`

## Reference
`artifacts/pdp/fraijour/idx-19/`




## Layout + schema build rules (v3.2)

1. Build HTML **without** `<style>` tags.
2. First child inside `.evas-pdp-ai`: visible `.evas-pdp-seo-lead` pure-text blurb (ingredient ppm, texture, volume).
3. Emit `clean-summary.txt` + `product-v3.jsonld.json` + `faq-v3.jsonld.json` + `graph-v3.2.jsonld.json` (`@graph`).
4. Product.description = clean-summary only; never concatenate Froala/HTML/CSS.
5. Always set cosmetics `additionalProperty` from OCR/disclosure facts only.
6. Header inject snippet must be one IIFE writing one `application/ld+json` with `@graph`.

## Structured data guards (critical)

Confirmed failure modes on Imweb:

1. **CSS leak into platform Product.description**  
   If detail HTML contains a `<style>` block, Imweb may scrape it into auto Product JSON-LD.  
   **Rule:** no `<style>` tags in `deployed-*.html`. Use inline styles only. Imweb may still inject lazy-image styles (ignore those).

2. **Dual Product nodes**  
   Imweb always emits its own Product (no `@id`). We inject a canonical Product with `@id` …`#product`.  
   Do **not** invent a second custom Product. Prefer one inject `@graph` = `[Product, FAQPage]`.  
   Platform Product cannot be deleted; keep its description clean by (1) no style blocks (2) pure-text SEO lead paragraph at top of detail.

3. **description must be pure text**  
   Reject any description matching `/evas-pdp|summary::|\{display|font-family/`.  
   Prefer explicit `clean-summary.txt` / SEO meta over scraping Froala HTML.

4. **additionalProperty required for cosmetics GEO**  
   Include at least: key ingredient + concentration (if disclosed), skin concern, texture, volume, mildness positioning.  
   Do not invent ppm/counts not on artwork/disclosure (e.g. do not invent "17 extracts" if page says otherwise).

5. **@id policy**  
   - Product: `https://www.evasmall.co.kr/shop_view/?idx={n}#product`  
   - FAQPage: `…#faq` with `about` → Product `@id`  
   - brand/manufacturer: `https://www.evascosmetic.com/#brand-…` / `#organization` (site-wide graph)

6. **Shipping/return in Offer** only when live page states them (e.g. 2,500원 / 2만원 이상 무료 / 14일 반품).

7. **Verify live** after deploy:  
   - inject Product `descCss=false` and `additionalProperty.length >= 5`  
   - Imweb Product `descCss=false`  
   - FAQPage question count matches body

