{ "$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"}} } } } } }