{
  "ok": true,
  "generated_at": "2026-05-28T18:13:01.494Z",
  "checks": [
    "JSON-LD component presence",
    "word count floor",
    "semantic coverage floor",
    "image alt injection",
    "canonical/og:url metadata",
    "sitemap inclusion",
    "thin /prompts/[slug] sitemap ban"
  ],
  "pages": [
    {
      "route": "/",
      "word_count": 1292,
      "exact_keyword_count": 8,
      "exact_keyword_density_pct": 0.62,
      "semantic_keyword_count": 157,
      "semantic_density_pct": 12.15,
      "expected_schema": [
        "WebApplication",
        "FAQPage",
        "BreadcrumbList"
      ],
      "source_schema_component": [
        "WebApplication",
        "FAQPage",
        "BreadcrumbList",
        "Article",
        "CollectionPage"
      ],
      "missing_expected_schema": [],
      "img_missing_alt": 0,
      "failures": []
    },
    {
      "route": "/ai-photo-prompt-editor",
      "word_count": 1162,
      "exact_keyword_count": 10,
      "exact_keyword_density_pct": 0.86,
      "semantic_keyword_count": 140,
      "semantic_density_pct": 12.05,
      "expected_schema": [
        "WebApplication",
        "FAQPage"
      ],
      "source_schema_component": [
        "WebApplication",
        "FAQPage",
        "BreadcrumbList",
        "Article",
        "CollectionPage"
      ],
      "missing_expected_schema": [],
      "img_missing_alt": 0,
      "failures": []
    },
    {
      "route": "/chatgpt-photo-editing-prompts",
      "word_count": 1181,
      "exact_keyword_count": 12,
      "exact_keyword_density_pct": 1.02,
      "semantic_keyword_count": 143,
      "semantic_density_pct": 12.11,
      "expected_schema": [
        "Article",
        "FAQPage",
        "BreadcrumbList"
      ],
      "source_schema_component": [
        "WebApplication",
        "FAQPage",
        "BreadcrumbList",
        "Article",
        "CollectionPage"
      ],
      "missing_expected_schema": [],
      "img_missing_alt": 0,
      "failures": []
    },
    {
      "route": "/ai-photo-editing-prompts",
      "word_count": 977,
      "exact_keyword_count": 6,
      "exact_keyword_density_pct": 0.61,
      "semantic_keyword_count": 114,
      "semantic_density_pct": 11.67,
      "expected_schema": [
        "CollectionPage",
        "FAQPage"
      ],
      "source_schema_component": [
        "WebApplication",
        "FAQPage",
        "BreadcrumbList",
        "Article",
        "CollectionPage"
      ],
      "missing_expected_schema": [],
      "img_missing_alt": 0,
      "failures": []
    },
    {
      "route": "/prompt-library",
      "word_count": 1344,
      "exact_keyword_count": 5,
      "exact_keyword_density_pct": 0.37,
      "semantic_keyword_count": 133,
      "semantic_density_pct": 9.9,
      "expected_schema": [
        "CollectionPage",
        "FAQPage"
      ],
      "source_schema_component": [
        "WebApplication",
        "FAQPage",
        "BreadcrumbList",
        "Article",
        "CollectionPage"
      ],
      "missing_expected_schema": [],
      "img_missing_alt": 0,
      "failures": []
    },
    {
      "route": "/pricing",
      "title_len": 43,
      "description_len": 124,
      "failures": []
    },
    {
      "route": "/privacy",
      "title_len": 43,
      "description_len": 144,
      "failures": []
    },
    {
      "route": "/terms",
      "title_len": 40,
      "description_len": 142,
      "failures": []
    },
    {
      "route": "/cookie-policy",
      "title_len": 41,
      "description_len": 137,
      "failures": []
    },
    {
      "route": "/refund",
      "title_len": 40,
      "description_len": 131,
      "failures": []
    },
    {
      "route": "/contact",
      "title_len": 40,
      "description_len": 137,
      "failures": []
    }
  ],
  "failures": [],
  "waiver_notes": [
    "Exact primary-keyword density is not forced to 2.5%-3.6% when it would create keyword stuffing; semantic coverage must be >=2.5% and exact terms must remain visibly present.",
    "Raw Stitch images without alt are remediated by getRawDesignBody fallback alt injection so the rendered HTML carries non-empty alt text."
  ]
}