Pdp ai readable
EVAS PDP GEO/AEO agent skills for Aside: OpenSEO demand → OCR HTML → Imweb deploy + JSON-LD. Includes vendored OpenSEO skills.
npx -y skills add passeth/evas-pdp-geo-skills --skill pdp-ai-readableAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 16 days oldThe repository was created 16 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Convert image-heavy EVAS product detail pages into AI-readable HTML for Imweb (KR default): Mistral OCR 4 (mistral-ocr-4-0), 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.
SKILL.md
8.3 KB, as published. Nobody here has run it
PDP AI-Readable
One-line run (convert only, no deploy)
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
- Collect product facts + detail images
- OCR (prefer Mistral OCR 4)
- Build layout v3: uninterrupted images +
<details open>continuous text - Write Product + FAQPage JSON-LD files (not inside Froala body)
- Save artifacts under
artifacts/pdp/{brand}/idx-{n}/ - Cosmetics claim safety pass
Canonical layout (v3)
[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
See Mistral OCR 4 section below.
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
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/
Mistral OCR 4 (required for new SKUs)
Default OCR engine for this pipeline. Do not skip for new products unless artwork text is already fully available as trusted HTML/disclosure.
| Item | Value |
|---|---|
| Product | Mistral OCR 4 |
| Model id (API) | mistral-ocr-latest or docs card ocr-4-0 / project alias mistral-ocr-4-0 |
| Docs | https://docs.mistral.ai/models/model-cards/ocr-4-0 · Cookbook: https://docs.mistral.ai/resources/cookbooks?useCase=OCR |
| Why here | Long vertical PDP images need accurate KR/EN text, tables, and ingredient lines for GEO without inventing claims |
| Pilot evidence | artifacts/pdp/fraijour/idx-19/ocr/ + source.json → "ocr_model": "mistral-ocr-4-0" |
What OCR 4 gives us (use it)
- Extracted markdown/text per detail slice
- Prefer structured fields when returned: bounding boxes, block types (title/table/…), confidence — keep low-confidence lines out of clinical claims or mark
<!-- REVIEW --> - Strong multilingual (KR packaging + EN global art)
Procedure
- Collect detail images in order (CDN
fr-dib/ imweb upload URLs). - Call Mistral OCR API per slice (or batched if API supports multi-page).
- Save raw responses:
ocr/slice_01.json … slice_N.json ocr/combined_markdown.json - Post-correct brand/product OCR errors (예: 약육 → 약쑥, FRAIJOUR spelling).
- Build HTML tables/lists/FAQ answers only from OCR + mall disclosure (가격·고시).
- Record in
source.json:{ "ocr_model": "mistral-ocr-4-0", "ocr_provider": "mistral", "images": ["…"] }
Auth
- API key:
MISTRAL_API_KEYenv, Aside secrets, or session file (never commit keys). - If key missing: stop convert for new SKUs, or use existing
ocr/only when user confirms reuse.
Fallback
Only if Mistral unavailable and user accepts lower quality:
- Vision LLM transcript of each slice (explicitly label
ocr_model: vision-fallback) - Never present fallback as Mistral OCR 4
EN skill
Reuse KR ocr/ facts; re-OCR only when EN-only artwork differs.
Layout + schema build rules (v3.2)
- Build HTML without
<style>tags. - First child inside
.evas-pdp-ai: visible.evas-pdp-seo-leadpure-text blurb (ingredient ppm, texture, volume). - Emit
clean-summary.txt+product-v3.jsonld.json+faq-v3.jsonld.json+graph-v3.2.jsonld.json(@graph). - Product.description = clean-summary only; never concatenate Froala/HTML/CSS.
- Always set cosmetics
additionalPropertyfrom OCR/disclosure facts only. - Header inject snippet must be one IIFE writing one
application/ld+jsonwith@graph.
Structured data guards (critical)
Confirmed failure modes on Imweb:
-
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 indeployed-*.html. Use inline styles only. Imweb may still inject lazy-image styles (ignore those). -
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. -
description must be pure text
Reject any description matching/evas-pdp|summary::|\{display|font-family/.
Prefer explicitclean-summary.txt/ SEO meta over scraping Froala HTML. -
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). -
@id policy
- Product:
https://www.evasmall.co.kr/shop_view/?idx={n}#product - FAQPage:
…#faqwithabout→ Product@id - brand/manufacturer:
https://www.evascosmetic.com/#brand-…/#organization(site-wide graph)
- Product:
-
Shipping/return in Offer only when live page states them (e.g. 2,500원 / 2만원 이상 무료 / 14일 반품).
-
Verify live after deploy:
- inject Product
descCss=falseandadditionalProperty.length >= 5 - Imweb Product
descCss=false - FAQPage question count matches body
- inject Product
Field placement (critical)
Imweb product form has two HTML fields:
| Field | DOM / admin label | What goes here |
|---|---|---|
| 요약 설명 | simple_content / first Froala / live .goods_summary | Short pure text only (clean-summary.txt) — no images, no full widget |
| 상품 상세 설명 | prod_content / Froala under "상품 상세 설명" / live ._prod_detail_detail_lazy_load | Full deployed-*.html widget |
Wrong placement symptom
- Full AI panel appears beside price / in summary column (
goods_summary) - Detail tab lower on page is empty or short
Deploy targeting rules
- Identify editors by section label, not only by size
- Summary editor: set
clean-summarytext only (one short paragraph) - Detail editor: set full widget HTML
- Never put
evas-pdp-aifull layout into summary - After save, live-check:
.goods_summary .evas-pdp-aimust be absent- detail lazy load must contain
.evas-pdp-ai