---
name: "evas-pdp-geo-en"
description: "English EVAS PDP GEO/AEO pipeline for evascosmetic.com (or Imweb EN unit): separate OpenSEO EN demand research, EN related-prompts, EN HTML/FAQ/JSON-LD, EN-only deploy. Use when user says idx={N} EN PDP GEO, after KR handoff, or English product-page AI optimization. Never edit KR unit in the same session."
---

# EVAS PDP GEO (EN — separate job)

## One-line run

```text
idx={N} EN PDP GEO
```

Or after KR: `idx={N} EN 핸드오프` / `풀 파이프라인 EN`

**Agent contract:** resolve idx → require KR folder `artifacts/pdp/{brand}/idx-{N}/` with verified KR when possible → run EN demand + convert + EN-unit deploy only. Never open KR language tab.

English product-page GEO/AEO for EVAS **global** property.

**Hard rule: EN is a separate job from KR.**

## Imweb language switch (critical UI)

EN content is **not** a separate admin site only. On the **same product edit screen**:

```text
상품 상세 편집 화면
  ┌──────────────┐
  │ 🇰🇷   🇺🇸      │  ← language tabs (flag)
  └──────────────┘
  Froala 상세 에디터 (이 플래그에 묶인 HTML만 저장됨)
```

### How to deploy EN safely

1. Open product: `https://evasmall.imweb.me/admin/shopping/product/detail?idx={N}`
2. Confirm current flag: **KR selected** has underline under 🇰🇷
3. Click **🇺🇸 US flag** to enter EN content unit for product fields (name / summary / detail HTML / SEO fields that are language-scoped)
4. Wait for editor to reload EN content (do not paste while still on KR)
5. Snapshot: EN product name / English body should show; Korean body must not be the active editor content
6. Paste `deployed-en.html` into **EN** detail editor only
7. Set EN SEO title/meta if those fields switch with the flag
8. Save once on EN unit
9. **Immediately click 🇰🇷 again** only if you need KR — but prefer **close the tab** after EN save to avoid accidental KR overwrite
10. Live verify: `https://www.evascosmetic.com/.../?idx={N}` (global), not `evasmall.co.kr`

### Hard rules

- While 🇺🇸 is active, never open/save KR-looking HTML
- While 🇰🇷 is active, this skill must **stop** (hand back to `evas-pdp-geo-kr`)
- If unsure which flag is active: snapshot for underline under the flag circle before any paste
- Sidebar "nation-flag EVAS COSMETICS" site switcher (if present) is different from **in-editor 🇰🇷/🇺🇸 content tabs** — prefer the **in-editor product language flags** for PDP body HTML

  
Do not reuse KR OpenSEO volumes, KR FAQ wording, or KR Imweb language unit.  
Do not open KR product tabs while deploying EN.

## When to run

Call this skill when:

1. User explicitly asks for EN, **or**
2. `evas-pdp-geo-kr` finished a SKU and hands off with `handoff_en: true` **and** EN gate is met

### EN gate (default)

- KR live verified for this SKU (details open + KR FAQ/JSON-LD)
- KR `related-prompts.json` has `source: openseo|gsc|hybrid` (not market_theme guess)
- User did not set `skip_en: true`
- Prefer ≥1 successful KR SKU before batch EN; for pilot, user override is OK

If gate fails: write `artifacts/pdp/{brand}/idx-{n}/EN_BLOCKED.md` and stop.

## Why separate from KR

| Topic | KR | EN |
|---|---|---|
| Site | `evasmall.co.kr` | `evascosmetic.com` (or Imweb EN unit) |
| OpenSEO market | KR / ko (e.g. location 2410) | EN market (US or target country) — **own seeds + metrics** |
| Demand language | Korean prompts | English prompts |
| Imweb language unit | KR only | EN only — never same edit session as KR |
| Claims | Korean disclosure + OCR | Same product facts, EN wording, no new clinicals |

OpenSEO is market-specific. Saving KR keywords does **not** cover EN. Run `research_keywords` / metrics again for EN seeds.

## End-to-end loop

```text
0) Prerequisites
   OpenSEO MCP + EN-capable project (or same project with EN location/language)
   Optional GSC for global domain
   KR artifact folder exists: artifacts/pdp/{brand}/idx-{n}/

1) Demand (OpenSEO EN)
   Seeds from EN product name + problem intents
   research_keywords + get_keyword_metrics (EN location/language)
   SERP sample for top candidates
   → artifacts/seo-aeo/keywords/{date}-en-idx{n}.json
   → artifacts/pdp/{brand}/idx-{n}/related-prompts.en.json

2) Convert
   Reuse KR OCR facts (do not re-OCR unless artwork differs)
   Build EN layout v3 from KR structure
   FAQ from related-prompts.en.json; answers only from product facts
   → deployed-en.html, product-v3.en.jsonld.json, faq-v3.en.jsonld.json

3) Deploy (EN unit only)
   Imweb EN language unit / global site only
   Never touch KR detail HTML in this session
   Header inject only if global site shares registry pattern

4) Verify EN live
   EN text, details open, Product+FAQ JSON-LD if applicable
```

## Inputs from KR handoff

Expect from KR folder:

```text
artifacts/pdp/{brand}/idx-{n}/
  INDEX.json
  deployed-kr.html          # reference structure only
  product-v3.jsonld.json    # facts
  faq-v3.jsonld.json        # KR FAQ (do not copy questions blindly)
  related-prompts.json      # KR demand (do not reuse volumes for EN SERP claims)
  ocr/                      # fact source
  source.json
```

Handoff note (optional):

```json
{
  "from_skill": "evas-pdp-geo-kr",
  "idx": "19",
  "brand": "fraijour",
  "kr_verified_live": true,
  "handoff_en": true,
  "skip_en": false
}
```

## Step 1 — EN demand (OpenSEO)

1. Confirm project + **EN market** (do not assume KR location 2410)
2. Seeds examples: `wormwood cream`, `calming watery cream`, `combination skin moisturizer`, brand `fraijour`
3. `research_keywords` / `get_keyword_metrics` / small SERP sample
4. Write `related-prompts.en.json`:

```json
{
  "product_idx": "19",
  "lang": "en",
  "source": "openseo",
  "market": "US/en or as configured",
  "prompts": [
    { "prompt": "...", "intent": "...", "volume": null, "kd": null, "seed_keyword": "..." }
  ]
}
```

5. `save_keywords` only after user confirm, tags e.g. `lang:en`, `sku:idx-19`, `line:wormwood`

## Step 2 — EN convert

- Layout same as KR v3: images first + `<details open>` text panel
- Translate/adapt copy; keep numbers (12,000ppm, 100ml, price if shown) only if on disclosure
- FAQ questions follow EN demand prompts; answers stay fact-grounded
- Do not invent US-only clinical claims

## Step 3 — Deploy EN only

1. Open global site admin / EN language unit
2. Paste `deployed-en.html`
3. EN SEO title/meta from EN demand terms
4. Save; **do not open KR unit**

## Step 4 — Verify

- [ ] EN body live
- [ ] `details` open
- [ ] No accidental KR overwrite on `evasmall.co.kr`
- [ ] Artifacts saved: `deployed-en.html`, `related-prompts.en.json`, `meta-en.md`

## OpenSEO note (saved keywords)

`save_keywords` stores terms **on the OpenSEO project** for later:

- `list_saved_keywords` — resume without re-research
- Tag filters (`lang:en`, `sku:idx-19`) — cluster per page
- Other skills (`keyword-clustering`, competitor, content briefs) read saved sets
- **Does not** auto-publish to Imweb or change live pages

KR saved keywords ≠ EN saved keywords. Tag by `lang:`.

## Failure modes

| Failure | Action |
|---|---|
| KR not verified | Block EN; fix KR first |
| Only KR OpenSEO market available | Research EN with explicit locationCode/languageCode or pause |
| Imweb tab switched to KR | Abort; re-verify KR live |
| Claim not in OCR/disclosure | Omit or mark REVIEW |

## Related

- `evas-pdp-geo-kr` — must finish (or user override) before this
- `pdp-ai-readable` — layout mechanics
- `keyword-research` — OpenSEO demand
- Pilot: `artifacts/pdp/fraijour/idx-19/`


## Structured data guards (same as KR, EN surface)

EN inherits the same failure modes on Imweb/global:

1. **No `<style>`** in `deployed-en.html` — CSS leaks into platform Product.description
2. Visible pure-text **SEO lead** (`.evas-pdp-seo-lead`) at top; write `clean-summary.en.txt`
3. One inject `@graph` = `[Product, FAQPage]` with stable `@id`s on the **EN product URL**
4. `additionalProperty` required (ingredient concentration, concern, texture, volume, mildness) — facts from KR OCR/disclosure, EN wording
5. Do not invent clinicals or extract counts
6. brand/manufacturer keep `https://www.evascosmetic.com/#…` ids
7. Deploy EN language unit / global site only; never edit KR unit in this job
8. Verify live: inject Product description has no CSS; `additionalProperty.length >= 5`

Header inject: prefer a single EN-safe registry or separate global header — do not corrupt KR Header Code 상단 when editing global.

