SKILL.md orchestration (8 gated stages), references (rate_card.yaml, findings_to_service rubric, competitor sets), findings.schema.json contract, and scripts: kg_query.py (generalized KG examination), estimate.py (findings→rate-card 견적 md/xlsx/json), build_deck.py (9-slide branded PPTX), render_pdf.sh (Korean PDF via headless Chrome), plus client_brief.html template. Validated on Sono Hotels & Resorts findings: estimate OD-2026-001 (23-47M KRW) and a 9-slide deck generated cleanly. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
100 lines
3.4 KiB
JSON
100 lines
3.4 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"title": "ourdigital-presales-seo findings contract",
|
|
"description": "Shared artifact populated by analysis stages 1-4 and consumed by estimate.py (5) and build_deck.py (6). Generators must never re-crawl; they read this file.",
|
|
"type": "object",
|
|
"required": ["prospect", "discovery", "technical", "entity", "findings"],
|
|
"properties": {
|
|
"prospect": {
|
|
"type": "object",
|
|
"required": ["name", "domain"],
|
|
"properties": {
|
|
"name": {"type": "string"},
|
|
"domain": {"type": "string"},
|
|
"aliases": {"type": "array", "items": {"type": "string"}},
|
|
"vertical": {"type": "string"},
|
|
"audit_date": {"type": "string", "description": "YYYY-MM-DD"},
|
|
"account_code": {"type": "string"}
|
|
}
|
|
},
|
|
"discovery": {
|
|
"type": "object",
|
|
"properties": {
|
|
"sitemap_status": {"type": "integer"},
|
|
"robots_sitemap_declared": {"type": "boolean"},
|
|
"discoverable_urls": {"type": "integer"},
|
|
"estimated_pages": {"type": "string"},
|
|
"url_hygiene": {"type": "array", "items": {"type": "string"}}
|
|
}
|
|
},
|
|
"technical": {
|
|
"type": "object",
|
|
"properties": {
|
|
"cwv": {
|
|
"type": "object",
|
|
"properties": {
|
|
"lcp_ms": {"type": "number"}, "cls": {"type": "number"},
|
|
"ttfb_ms": {"type": "number"}, "perf": {"type": "number"}
|
|
}
|
|
},
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"org": {"type": "string", "enum": ["bare", "complete", "none"]},
|
|
"hotel_on_property": {"type": "boolean"}
|
|
}
|
|
},
|
|
"meta_dupe": {"type": "boolean"},
|
|
"title_i18n_mismatch": {"type": "boolean"},
|
|
"hreflang": {"type": "string", "enum": ["complete", "incomplete", "none"]}
|
|
}
|
|
},
|
|
"entity": {
|
|
"type": "object",
|
|
"properties": {
|
|
"panel": {"type": "string", "enum": ["company", "hotel", "none"]},
|
|
"name_split": {"type": "boolean"},
|
|
"legacy_contamination": {"type": "boolean"},
|
|
"subbrands_with_entity": {"type": "integer"},
|
|
"subbrands_total": {"type": "integer"},
|
|
"properties_with_entity": {"type": "integer"},
|
|
"properties_total": {"type": "integer"},
|
|
"wikipedia": {"type": "boolean"},
|
|
"competitor_benchmark": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {"type": "string"}, "score": {"type": "number"},
|
|
"type": {"type": "string"}, "wikipedia": {"type": "boolean"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"measurement": {
|
|
"type": "object",
|
|
"properties": {
|
|
"gsc_access": {"type": "boolean"},
|
|
"ga4_access": {"type": "boolean"},
|
|
"tag_gaps": {"type": "boolean"}
|
|
}
|
|
},
|
|
"findings": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"required": ["id", "class", "severity"],
|
|
"properties": {
|
|
"id": {"type": "string"},
|
|
"class": {"type": "string", "description": "crawlability|cwv|schema_entity|subbrand_entity|local|measurement|onpage"},
|
|
"severity": {"type": "string", "enum": ["critical", "high", "medium", "low"]},
|
|
"title_ko": {"type": "string"},
|
|
"evidence": {"type": "string"},
|
|
"recommended_services": {"type": "array", "items": {"type": "string"}}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|