{
  "schema_version": "2026-06-05",
  "purpose": "Internal 20-control search excellence contract for Google, Bing and AI answer-engine readiness. This is a quality gate, not a ranking promise.",
  "policy": {
    "no_ranking_guarantees": true,
    "no_spam_tactics": true,
    "no_keyword_stuffing": true,
    "no_paid_link_schemes": true,
    "no_medical_claims": true,
    "research_use_only": true,
    "live_actions_require_approval": true
  },
  "summary": {
    "controls_total": 20,
    "critical_controls": 13,
    "score_meaning": "All controls prove local readiness, source clarity and safe discoverability; they do not guarantee search position.",
    "review_cycle": "Run before deploy approval and after every material SEO/GEO content change."
  },
  "controls": [
    {
      "id": "crawl-index-foundation",
      "status": "implemented",
      "impact": "critical",
      "category": "technical_seo",
      "objective": "Keep robots, sitemap index and sitemap families aligned with only indexable public routes.",
      "evidence_artifacts": ["robots.txt", "sitemap-index.xml", "sitemap.xml", "crawl-priority-map.json", "tools/search-engine-readiness-audit.py", "tools/crawl-priority-audit.py", "tools/i18n-hreflang-audit.py"],
      "verification_commands": ["npm run qa:submit-ready", "npm run qa:crawl-priority", "npm run qa:hreflang-complete", "python3 tools/predeploy.py --json"],
      "quality_gates": ["robots advertises AI sitemap", "sitemap families resolve locally", "priority URLs have canonical and sitemap bindings", "hreflang completeness covers all public pages", "internal routes stay excluded"]
    },
    {
      "id": "ai-discovery-packaging",
      "status": "implemented",
      "impact": "critical",
      "category": "geo_ai_search",
      "objective": "Expose a compact AI discovery surface through llms, full context, site facts and AI sitemap.",
      "evidence_artifacts": ["llms.txt", "llms-full.txt", "site-facts.json", "sitemap-ai.xml", "zero-click-answer-coverage-map.json", "people-also-ask-coverage-map.json", "localized-answer-coverage-map.json", "search-journey-orchestration-map.json", "localized-serp-snippet-map.json", "tools/zero-click-answer-coverage-audit.py", "tools/people-also-ask-coverage-audit.py", "tools/localized-answer-coverage-audit.py", "tools/search-journey-orchestration-audit.py", "tools/localized-serp-snippet-audit.py"],
      "verification_commands": ["npm run qa:ai-context", "npm run qa:seo", "npm run qa:zero-click", "npm run qa:paa", "npm run qa:localized-answers", "npm run qa:journeys", "npm run qa:localized-serp"],
      "quality_gates": ["all product twins linked", "all category twins linked", "research-use policy visible", "zero-click answers source-bound", "PAA questions bound to FAQ feed", "localized questions cover 11 locales", "high-value journeys have one source-bound owner", "localized SERP snippets cover priority pages in 11 locales"]
    },
    {
      "id": "entity-disambiguation",
      "status": "implemented",
      "impact": "critical",
      "category": "entity_authority",
      "objective": "Make brand, operator, location and policy facts consistent across public and machine-readable sources.",
      "evidence_artifacts": ["site-facts.json", "entity-evidence-graph.json", "about.html", "imprint.html"],
      "verification_commands": ["npm run qa:entity", "npm run qa:entity-graph"],
      "quality_gates": ["legal entity matches", "KvK proof present", "trust URLs resolve"]
    },
    {
      "id": "sameas-contact-proof",
      "status": "implemented",
      "impact": "high",
      "category": "entity_authority",
      "objective": "Guard sameAs/contact/schema reconciliation so answer engines do not confuse the entity.",
      "evidence_artifacts": ["entity-resolution-map.json", "entity-evidence-graph.json", "tools/entity-resolution-map-audit.py"],
      "verification_commands": ["npm run qa:entity-resolution", "npm run qa:entity"],
      "quality_gates": ["sameAs URLs verified", "contact anchors verified", "conflict guards present"]
    },
    {
      "id": "structured-data-rich-results",
      "status": "implemented",
      "impact": "critical",
      "category": "schema_rich_results",
      "objective": "Keep Organization, WebSite, ProductGroup, Offer, Breadcrumb, FAQ and Article schema contracts valid.",
      "evidence_artifacts": ["structured-data-coverage-map.json", "tools/rich-results-audit.py", "tools/structured-data-coverage-audit.py"],
      "verification_commands": ["npm run qa:schema", "npm run qa:structured-data"],
      "quality_gates": ["schema types mapped", "offer data guarded", "no fake review markup"]
    },
    {
      "id": "product-offer-variant-integrity",
      "status": "implemented",
      "impact": "critical",
      "category": "commerce_seo",
      "objective": "Ensure product variants, from-prices, sale prices and price-per-unit ladders stay logical.",
      "evidence_artifacts": ["assets/data/catalog_products.json", "product-feed.json", "tools/pricing-consistency-audit.js"],
      "verification_commands": ["npm run qa:pricing", "npm run qa:product-feed"],
      "quality_gates": ["sale price never exceeds regular", "from price equals cheapest variant", "larger variants do not regress value"]
    },
    {
      "id": "product-feed-merchant-readiness",
      "status": "implemented",
      "impact": "high",
      "category": "commerce_seo",
      "objective": "Keep product feed, Merchant/free-listing readiness, product discovery map and PDP URLs aligned for manual external parser review.",
      "evidence_artifacts": ["product-feed.json", "merchant-organic-readiness-map.json", "product-discovery-readiness-map.json", "priority-product-visibility-map.json", "tools/product-feed-audit.py", "tools/merchant-organic-readiness-audit.py", "tools/priority-product-visibility-audit.py"],
      "verification_commands": ["npm run qa:product-feed", "npm run qa:merchant-readiness", "npm run qa:product-discovery", "npm run qa:priority-products"],
      "quality_gates": ["48 products present", "99 variants derive commerce-search fields", "fresh-batch maps to preorder semantics", "priority products mapped", "high-value PDP visibility mapped", "PDP URLs resolve", "live submission requires explicit approval"]
    },
    {
      "id": "image-search-assets",
      "status": "implemented",
      "impact": "high",
      "category": "image_search",
      "objective": "Keep product image variants, sitemap image entries and visible media assets index-ready.",
      "evidence_artifacts": ["sitemap-images.xml", "assets/products", "tools/image-search-readiness-audit.py"],
      "verification_commands": ["npm run qa:image", "python3 tools/predeploy.py --json"],
      "quality_gates": ["image sitemap present", "product image URLs resolve", "image formats present"]
    },
    {
      "id": "topical-authority-clusters",
      "status": "implemented",
      "impact": "critical",
      "category": "content_strategy",
      "objective": "Maintain commercial and educational topical clusters that route search intent cleanly.",
      "evidence_artifacts": ["topical-query-clusters.json", "search-intent-map.json", "tools/topical-authority-audit.py"],
      "verification_commands": ["npm run qa:authority", "npm run qa:clusters"],
      "quality_gates": ["pillar pages mapped", "commercial pages linked", "cluster source pages exist"]
    },
    {
      "id": "content-expansion-briefs",
      "status": "implemented",
      "impact": "high",
      "category": "content_strategy",
      "objective": "Keep the next content opportunities tied to existing clusters, citations and acceptance checks.",
      "evidence_artifacts": ["content-expansion-briefs.json", "query-demand-priority-map.json", "topical-query-clusters.json", "tools/content-expansion-briefs-audit.py"],
      "verification_commands": ["npm run qa:briefs", "npm run qa:demand", "npm run qa:growth"],
      "quality_gates": ["briefs source clusters", "acceptance checks present", "ranking promises blocked"]
    },
    {
      "id": "answer-source-citations",
      "status": "implemented",
      "impact": "critical",
      "category": "geo_ai_search",
      "objective": "Bind answer-engine source choices to preferred citation URLs and safe answer boundaries.",
      "evidence_artifacts": ["ai-citation-pack.json", "answer-engine-corpus.json", "answer-engine-source-map.json", "tools/answer-engine-corpus-audit.py", "tools/answer-engine-source-map-audit.py"],
      "verification_commands": ["npm run qa:ai-citations", "npm run qa:answer-corpus", "npm run qa:answer-sources"],
      "quality_gates": ["preferred citation URLs resolve", "source IDs bind", "safe boundaries present"]
    },
    {
      "id": "snippet-bank-faq-feed",
      "status": "implemented",
      "impact": "critical",
      "category": "geo_ai_search",
      "objective": "Keep concise answer snippets and FAQ feed source-bound for long-tail AI/search answers.",
      "evidence_artifacts": ["answer-snippet-bank.json", "faq-answer-feed.json", "tools/research-frame-copy-audit.py", "tools/faq-answer-feed-audit.py"],
      "verification_commands": ["npm run qa:answer-snippets", "npm run qa:faq-feed", "npm run qa:research-frame"],
      "quality_gates": ["snippet IDs bind", "FAQ source pages resolve", "measurement sources present", "public SEO/GEO copy passes research-frame drift guard"]
    },
    {
      "id": "geo-answer-qa",
      "status": "implemented",
      "impact": "critical",
      "category": "geo_ai_search",
      "objective": "Test answer-engine prompts against preferred sources, citation behavior and safe framing.",
      "evidence_artifacts": ["geo-answer-qa-matrix.json", "ai-citation-pack.json", "answer-engine-corpus.json", "answer-engine-source-map.json", "tools/research-frame-copy-audit.py"],
      "verification_commands": ["npm run qa:geo-answer", "npm run qa:answer-corpus", "npm run qa:ai-context", "npm run qa:research-frame"],
      "quality_gates": ["prompt cases mapped", "preferred citations bound", "unsafe answers blocked", "fresh-batch and research-use wording stays source-safe"]
    },
    {
      "id": "query-cannibalization-guard",
      "status": "implemented",
      "impact": "critical",
      "category": "content_strategy",
      "objective": "Prevent category, PDP, stack and article pages from competing for the wrong primary intent.",
      "evidence_artifacts": ["query-cannibalization-map.json", "search-alias-intent-map.json", "priority-page-experience-map.json", "tools/query-cannibalization-audit.py"],
      "verification_commands": ["npm run qa:aliases", "npm run qa:cannibalization", "npm run qa:page-experience"],
      "quality_gates": ["primary targets defined", "secondary paths documented", "PDP ownership protected"]
    },
    {
      "id": "internal-link-equity-routing",
      "status": "implemented",
      "impact": "high",
      "category": "internal_linking",
      "objective": "Route link equity from hubs, articles and proof pages toward commercial and trust-critical pages.",
      "evidence_artifacts": ["internal-link-equity-map.json", "tools/internal-link-equity-audit.py", "tools/content-commerce-bridge-audit.py"],
      "verification_commands": ["npm run qa:link-equity", "npm run qa:content-bridge"],
      "quality_gates": ["local routes exist", "cluster bindings exist", "commerce bridges present"]
    },
    {
      "id": "priority-page-experience",
      "status": "implemented",
      "impact": "critical",
      "category": "user_experience_seo",
      "objective": "Keep priority pages readable, proof-rich and conversion-capable without breaking research-use safety.",
      "evidence_artifacts": ["priority-page-experience-map.json", "tools/priority-page-experience-audit.py", "tests/seo-geo.spec.js"],
      "verification_commands": ["npm run qa:page-experience", "npm run qa:mobile"],
      "quality_gates": ["CTA routes guarded", "proof links resolve", "mobile project wired"]
    },
    {
      "id": "serp-feature-opportunities",
      "status": "implemented",
      "impact": "high",
      "category": "serp_ctr",
      "objective": "Map page-level opportunities for FAQ, product, image, sitelink and answer-style SERP features.",
      "evidence_artifacts": ["serp-feature-opportunity-map.json", "tools/serp-feature-opportunity-audit.py", "structured-data-coverage-map.json"],
      "verification_commands": ["npm run qa:serp-features", "npm run qa:structured-data"],
      "quality_gates": ["feature types mapped", "schema contracts linked", "measurement plans present"]
    },
    {
      "id": "serp-experiment-governance",
      "status": "implemented",
      "impact": "critical",
      "category": "serp_ctr",
      "objective": "Govern title/meta experiments with source-bound copy, measurable windows and rollback actions.",
      "evidence_artifacts": ["serp-experiment-map.json", "tools/serp-experiment-map-audit.py", "search-performance-feedback-loop.json", "search-visibility-kpi-baseline.json", "tools/search-visibility-kpi-audit.py"],
      "verification_commands": ["npm run qa:serp-experiments", "npm run qa:serp", "npm run qa:visibility"],
      "quality_gates": ["test windows defined", "fallback actions present", "ranking promises rejected"]
    },
    {
      "id": "freshness-lastmod-rss",
      "status": "implemented",
      "impact": "high",
      "category": "freshness",
      "objective": "Keep sitemap lastmod, RSS dates and refresh governance honest and evidence-bound.",
      "evidence_artifacts": ["content-refresh-governance.json", "blog/feed.xml", "tools/freshness-integrity-audit.py"],
      "verification_commands": ["npm run qa:freshness", "npm run qa:content-refresh"],
      "quality_gates": ["no fake lastmod churn", "RSS dates locked", "material change required"]
    },
    {
      "id": "performance-cwv-static",
      "status": "implemented",
      "impact": "critical",
      "category": "performance",
      "objective": "Protect crawl/render quality through static Core Web Vitals, asset budget and image loading checks.",
      "evidence_artifacts": ["tools/core-web-vitals-audit.py", "tools/perf-budget.py", "tools/image-search-readiness-audit.py"],
      "verification_commands": ["npm run qa:perf", "python3 tools/predeploy.py --json"],
      "quality_gates": ["no blocking script regressions", "asset budgets pass", "image dimensions and decoding healthy"]
    }
  ]
}
