{
  "seo": {
    "h1": [
      "Birthday Website Maker"
    ],
    "lang": "en",
    "links": {
      "total": 79,
      "external": 0,
      "internal": 79
    },
    "title": "Birthday Website Maker – Create a Birthday Surprise Website",
    "issues": [],
    "h2Count": 15,
    "sitemap": {
      "ok": true,
      "sample": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\" xmlns:xhtml=\"http://www.w3.org/1999/xhtml\">\n<url>\n<loc>https://birthdaywebsite.app/</loc>\n<xhtml:link rel=\"alternate\" hreflang=\"en\" href=\"https://birthdaywebsite.app/\" />\n<xhtml:link rel=\"alternate\" hreflang=\"zh-CN\" href=\"https://birthdaywebsite.app/zh\" />\n<xhtml:link rel=\"alternate\" hreflang=\"ja\" href=\"https://birthdaywebsite.app/ja\" />\n<xhtml:link rel=\"alternate\" hreflang=\"ko\" href=\"https://birth",
      "status": 200
    },
    "twitter": {
      "card": "summary_large_image",
      "image": "https://birthdaywebsite.app/og/home/default.png",
      "title": "Birthday Website Maker – Create a Birthday Surprise Website"
    },
    "hreflang": [
      {
        "rel": "alternate",
        "tag": "<link rel=\"alternate\" hrefLang=\"en\" href=\"https://birthdaywebsite.app\"/>",
        "href": "https://birthdaywebsite.app/",
        "hreflang": "en"
      },
      {
        "rel": "alternate",
        "tag": "<link rel=\"alternate\" hrefLang=\"zh-CN\" href=\"https://birthdaywebsite.app/zh\"/>",
        "href": "https://birthdaywebsite.app/zh",
        "hreflang": "zh-CN"
      },
      {
        "rel": "alternate",
        "tag": "<link rel=\"alternate\" hrefLang=\"ja\" href=\"https://birthdaywebsite.app/ja\"/>",
        "href": "https://birthdaywebsite.app/ja",
        "hreflang": "ja"
      },
      {
        "rel": "alternate",
        "tag": "<link rel=\"alternate\" hrefLang=\"ko\" href=\"https://birthdaywebsite.app/ko\"/>",
        "href": "https://birthdaywebsite.app/ko",
        "hreflang": "ko"
      },
      {
        "rel": "alternate",
        "tag": "<link rel=\"alternate\" hrefLang=\"x-default\" href=\"https://birthdaywebsite.app\"/>",
        "href": "https://birthdaywebsite.app/",
        "hreflang": "x-default"
      }
    ],
    "canonical": "https://birthdaywebsite.app/",
    "openGraph": {
      "url": "https://birthdaywebsite.app",
      "image": "https://birthdaywebsite.app/og/home/default.png",
      "title": "Birthday Website Maker – Create a Birthday Surprise Website",
      "description": "Birthday Website Maker helps you create a personalized birthday website with photos, music, and a heartfelt letter. Preview free, then unlock and share with one link."
    },
    "robotsTxt": {
      "ok": true,
      "sample": "User-Agent: *\nAllow: /\nDisallow: /api/\nDisallow: /_next/\nDisallow: /settings/\nDisallow: /dashboard\nDisallow: /payment\nDisallow: /admin/\n\nSitemap: https://birthdaywebsite.app/sitemap.xml\n",
      "status": 200
    },
    "robotsMeta": "",
    "description": "Birthday Website Maker helps you create a personalized birthday website with photos, music, and a heartfelt letter. Preview free, then unlock and share with one link.",
    "structuredData": [
      {
        "raw": "{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://birthdaywebsite.app#organization\",\"name\":\"Birthday Website Maker\",\"url\":\"https://birthdaywebsite.app\",\"logo\":\"https://birthdaywebsite.app/logo.png\",\"email\":\"support@birthdaywebsite.app\"},{\"@type\":\"WebSite\",\"@id\":\"https://birthdaywebsite.app#website\",\"name\":\"Birthday Website Maker\",\"url\":\"https://birthdaywebsite.app\",\"inLanguage\":[\"en\",\"zh-CN\",\"ja\",\"ko\"],\"publisher\":{\"@id\":\"https://birthdaywebsite.app#organization\"}",
        "type": "Organization, WebSite, WebPage, SoftwareApplication, FAQPage",
        "valid": true
      }
    ]
  },
  "score": {
    "total": 80,
    "dimensions": {
      "seo": 20,
      "security": 1,
      "performance": 18,
      "techClarity": 15,
      "accessibility": 16,
      "maintainability": 10
    }
  },
  "audits": {
    "lighthouse": {
      "used": false,
      "reason": "Set ENABLE_LIGHTHOUSE=1 to enable Lighthouse CLI audits.",
      "enabled": false,
      "skipped": true
    }
  },
  "issues": [
    {
      "fix": "Add Strict-Transport-Security after confirming the full site works over HTTPS.",
      "area": "Security",
      "code": "security.missing_hsts_header",
      "title": "Missing HSTS header",
      "detail": "HSTS was not found in the response headers.",
      "fixUrl": "/fix/missing-hsts-header/",
      "severity": "high"
    },
    {
      "fix": "Add a CSP header at the CDN or server layer and test third-party scripts.",
      "area": "Security",
      "code": "security.missing_csp_header",
      "title": "Missing Content-Security-Policy header",
      "detail": "Content-Security-Policy was not found in the response headers.",
      "fixUrl": "/fix/missing-csp-header/",
      "severity": "high"
    },
    {
      "fix": "Add X-Frame-Options: SAMEORIGIN or use frame-ancestors in CSP.",
      "area": "Security",
      "code": "security.missing_x_frame_options_header",
      "title": "Missing X-Frame-Options header",
      "detail": "X-Frame-Options was not found in the response headers.",
      "fixUrl": "/fix/missing-x-frame-options/",
      "severity": "medium"
    },
    {
      "fix": "Add X-Content-Type-Options: nosniff.",
      "area": "Security",
      "code": "security.missing_x_content_type_options_header",
      "title": "Missing X-Content-Type-Options header",
      "detail": "X-Content-Type-Options was not found in the response headers.",
      "fixUrl": "",
      "severity": "medium"
    },
    {
      "fix": "Add Referrer-Policy: strict-origin-when-cross-origin.",
      "area": "Security",
      "code": "security.missing_referrer_policy_header",
      "title": "Missing Referrer-Policy header",
      "detail": "Referrer-Policy was not found in the response headers.",
      "fixUrl": "/fix/missing-referrer-policy/",
      "severity": "low"
    },
    {
      "fix": "Restrict browser features that the site does not use.",
      "area": "Security",
      "code": "security.missing_permissions_policy_header",
      "title": "Missing Permissions-Policy header",
      "detail": "Permissions-Policy was not found in the response headers.",
      "fixUrl": "",
      "severity": "low"
    },
    {
      "fix": "Associate every input with a visible label or accessible aria-label.",
      "area": "Accessibility",
      "code": "accessibility.form_labels_missing",
      "title": "Form labels may be missing",
      "detail": "16 text-like inputs and 11 labels were found.",
      "fixUrl": "",
      "severity": "medium"
    },
    {
      "fix": "Add visible button text or aria-label for icon-only buttons.",
      "area": "Accessibility",
      "code": "accessibility.buttons_missing_accessible_names",
      "title": "Buttons may lack accessible names",
      "detail": "4 button(s) appear to have no text or aria-label.",
      "fixUrl": "",
      "severity": "medium"
    },
    {
      "fix": "Check server response time, CDN caching, redirects, and backend bottlenecks.",
      "area": "Performance",
      "code": "performance.slow_initial_html_response",
      "title": "Slow initial HTML response",
      "detail": "The initial fetch took about 5129ms.",
      "fixUrl": "/fix/slow-initial-html-response/",
      "severity": "medium"
    }
  ],
  "origin": "https://birthdaywebsite.app",
  "status": 200,
  "summary": {
    "seoIssues": 0,
    "totalIssues": 9,
    "techDetected": 4,
    "securityIssues": 6,
    "detectionChannels": 8,
    "performanceIssues": 1,
    "accessibilityIssues": 2
  },
  "finalUrl": "https://birthdaywebsite.app/",
  "hostname": "birthdaywebsite.app",
  "inputUrl": "https://birthdaywebsite.app/",
  "security": {
    "tls": {
      "sans": [
        "birthdaywebsite.app",
        "www.birthdaywebsite.app",
        "*.www.birthdaywebsite.app"
      ],
      "issuer": "CN=WE1, O=Google Trust Services",
      "subject": "CN=birthdaywebsite.app",
      "validTo": "Jan 15 08:33:03 2027 GMT",
      "protocol": "TLSv1.3",
      "validFrom": "Oct 17 07:33:07 2026 GMT",
      "daysToExpiry": 89
    },
    "issues": [
      {
        "fix": "Add Strict-Transport-Security after confirming the full site works over HTTPS.",
        "area": "Security",
        "code": "security.missing_hsts_header",
        "title": "Missing HSTS header",
        "detail": "HSTS was not found in the response headers.",
        "fixUrl": "/fix/missing-hsts-header/",
        "severity": "high"
      },
      {
        "fix": "Add a CSP header at the CDN or server layer and test third-party scripts.",
        "area": "Security",
        "code": "security.missing_csp_header",
        "title": "Missing Content-Security-Policy header",
        "detail": "Content-Security-Policy was not found in the response headers.",
        "fixUrl": "/fix/missing-csp-header/",
        "severity": "high"
      },
      {
        "fix": "Add X-Frame-Options: SAMEORIGIN or use frame-ancestors in CSP.",
        "area": "Security",
        "code": "security.missing_x_frame_options_header",
        "title": "Missing X-Frame-Options header",
        "detail": "X-Frame-Options was not found in the response headers.",
        "fixUrl": "/fix/missing-x-frame-options/",
        "severity": "medium"
      },
      {
        "fix": "Add X-Content-Type-Options: nosniff.",
        "area": "Security",
        "code": "security.missing_x_content_type_options_header",
        "title": "Missing X-Content-Type-Options header",
        "detail": "X-Content-Type-Options was not found in the response headers.",
        "fixUrl": "",
        "severity": "medium"
      },
      {
        "fix": "Add Referrer-Policy: strict-origin-when-cross-origin.",
        "area": "Security",
        "code": "security.missing_referrer_policy_header",
        "title": "Missing Referrer-Policy header",
        "detail": "Referrer-Policy was not found in the response headers.",
        "fixUrl": "/fix/missing-referrer-policy/",
        "severity": "low"
      },
      {
        "fix": "Restrict browser features that the site does not use.",
        "area": "Security",
        "code": "security.missing_permissions_policy_header",
        "title": "Missing Permissions-Policy header",
        "detail": "Permissions-Policy was not found in the response headers.",
        "fixUrl": "",
        "severity": "low"
      }
    ],
    "cookies": {
      "total": 0,
      "issues": []
    },
    "headers": [
      {
        "fix": "Add Strict-Transport-Security after confirming the full site works over HTTPS.",
        "key": "strict-transport-security",
        "label": "HSTS",
        "value": "",
        "present": false,
        "severity": "high"
      },
      {
        "fix": "Add a CSP header at the CDN or server layer and test third-party scripts.",
        "key": "content-security-policy",
        "label": "Content-Security-Policy",
        "value": "",
        "present": false,
        "severity": "high"
      },
      {
        "fix": "Add X-Frame-Options: SAMEORIGIN or use frame-ancestors in CSP.",
        "key": "x-frame-options",
        "label": "X-Frame-Options",
        "value": "",
        "present": false,
        "severity": "medium"
      },
      {
        "fix": "Add X-Content-Type-Options: nosniff.",
        "key": "x-content-type-options",
        "label": "X-Content-Type-Options",
        "value": "",
        "present": false,
        "severity": "medium"
      },
      {
        "fix": "Add Referrer-Policy: strict-origin-when-cross-origin.",
        "key": "referrer-policy",
        "label": "Referrer-Policy",
        "value": "",
        "present": false,
        "severity": "low"
      },
      {
        "fix": "Restrict browser features that the site does not use.",
        "key": "permissions-policy",
        "label": "Permissions-Policy",
        "value": "",
        "present": false,
        "severity": "low"
      }
    ]
  },
  "topFixes": [
    {
      "fix": "Add Strict-Transport-Security after confirming the full site works over HTTPS.",
      "area": "Security",
      "code": "security.missing_hsts_header",
      "title": "Missing HSTS header",
      "detail": "HSTS was not found in the response headers.",
      "fixUrl": "/fix/missing-hsts-header/",
      "priority": "P1",
      "severity": "high"
    },
    {
      "fix": "Add a CSP header at the CDN or server layer and test third-party scripts.",
      "area": "Security",
      "code": "security.missing_csp_header",
      "title": "Missing Content-Security-Policy header",
      "detail": "Content-Security-Policy was not found in the response headers.",
      "fixUrl": "/fix/missing-csp-header/",
      "priority": "P1",
      "severity": "high"
    },
    {
      "fix": "Add X-Frame-Options: SAMEORIGIN or use frame-ancestors in CSP.",
      "area": "Security",
      "code": "security.missing_x_frame_options_header",
      "title": "Missing X-Frame-Options header",
      "detail": "X-Frame-Options was not found in the response headers.",
      "fixUrl": "/fix/missing-x-frame-options/",
      "priority": "P1",
      "severity": "medium"
    },
    {
      "fix": "Add X-Content-Type-Options: nosniff.",
      "area": "Security",
      "code": "security.missing_x_content_type_options_header",
      "title": "Missing X-Content-Type-Options header",
      "detail": "X-Content-Type-Options was not found in the response headers.",
      "fixUrl": "",
      "priority": "P2",
      "severity": "medium"
    },
    {
      "fix": "Associate every input with a visible label or accessible aria-label.",
      "area": "Accessibility",
      "code": "accessibility.form_labels_missing",
      "title": "Form labels may be missing",
      "detail": "16 text-like inputs and 11 labels were found.",
      "fixUrl": "",
      "priority": "P2",
      "severity": "medium"
    },
    {
      "fix": "Add visible button text or aria-label for icon-only buttons.",
      "area": "Accessibility",
      "code": "accessibility.buttons_missing_accessible_names",
      "title": "Buttons may lack accessible names",
      "detail": "4 button(s) appear to have no text or aria-label.",
      "fixUrl": "",
      "priority": "P2",
      "severity": "medium"
    },
    {
      "fix": "Check server response time, CDN caching, redirects, and backend bottlenecks.",
      "area": "Performance",
      "code": "performance.slow_initial_html_response",
      "title": "Slow initial HTML response",
      "detail": "The initial fetch took about 5129ms.",
      "fixUrl": "/fix/slow-initial-html-response/",
      "priority": "P2",
      "severity": "medium"
    },
    {
      "fix": "Add Referrer-Policy: strict-origin-when-cross-origin.",
      "area": "Security",
      "code": "security.missing_referrer_policy_header",
      "title": "Missing Referrer-Policy header",
      "detail": "Referrer-Policy was not found in the response headers.",
      "fixUrl": "/fix/missing-referrer-policy/",
      "priority": "P3",
      "severity": "low"
    },
    {
      "fix": "Restrict browser features that the site does not use.",
      "area": "Security",
      "code": "security.missing_permissions_policy_header",
      "title": "Missing Permissions-Policy header",
      "detail": "Permissions-Policy was not found in the response headers.",
      "fixUrl": "",
      "priority": "P3",
      "severity": "low"
    }
  ],
  "redirects": [],
  "rendering": {
    "axe": {
      "used": false,
      "enabled": false
    },
    "dom": {},
    "used": false,
    "title": "",
    "failed": false,
    "reason": "Set ENABLE_PLAYWRIGHT=1 to enable rendered DOM scanning.",
    "source": "",
    "status": 0,
    "enabled": false,
    "globals": {},
    "finalUrl": "",
    "available": true,
    "classHints": {},
    "durationMs": 0,
    "textSample": "",
    "requestCount": 0,
    "requestLimit": 0,
    "abortedByLimit": false,
    "failedRequestCount": 0
  },
  "scannedAt": "2026-10-17T17:51:20.208Z",
  "wordpress": {
    "notes": "No strong WordPress signal was found in the public HTML/resources.",
    "theme": "",
    "themes": [],
    "plugins": [],
    "restApi": false,
    "detected": false,
    "generator": "",
    "themeDetails": null,
    "versionHints": [],
    "legacySignals": [],
    "pluginDetails": []
  },
  "performance": {
    "note": "This MVP uses fast static performance signals. Enable Lighthouse CLI to add lab performance, SEO, accessibility, and best-practices scores.",
    "issues": [
      {
        "fix": "Check server response time, CDN caching, redirects, and backend bottlenecks.",
        "area": "Performance",
        "code": "performance.slow_initial_html_response",
        "title": "Slow initial HTML response",
        "detail": "The initial fetch took about 5129ms.",
        "fixUrl": "/fix/slow-initial-html-response/",
        "severity": "medium"
      }
    ],
    "htmlBytes": 353374,
    "resources": {
      "total": 102,
      "images": 29,
      "preload": 9,
      "scripts": 28,
      "lazyImages": 38,
      "stylesheets": 3
    },
    "durationMs": 5129,
    "lighthouse": {
      "used": false,
      "reason": "Set ENABLE_LIGHTHOUSE=1 to enable Lighthouse CLI audits.",
      "enabled": false,
      "skipped": true
    }
  },
  "technologies": [
    {
      "id": "1d18453c00",
      "code": "bc42338b4653",
      "name": "Google Analytics 4",
      "risk": "",
      "version": "",
      "category": "Analytics",
      "evidence": [
        {
          "value": "g-white",
          "source": "html"
        }
      ],
      "confidence": "high",
      "confidenceScore": 82,
      "evidenceSources": [
        "html"
      ],
      "versionEvidence": null
    },
    {
      "id": "c09f221393",
      "code": "d0491df3c527",
      "name": "Tailwind CSS",
      "risk": "",
      "version": "",
      "category": "CSS / UI",
      "evidence": [
        {
          "value": "class=\"bg-fd-secondary/50 p-3 empty:hidden",
          "source": "html"
        }
      ],
      "confidence": "low",
      "confidenceScore": 40,
      "evidenceSources": [
        "html"
      ],
      "versionEvidence": null
    },
    {
      "id": "18080496ca",
      "code": "8f55b22d0494",
      "name": "Next.js",
      "risk": "",
      "version": "",
      "category": "Frontend Framework",
      "evidence": [
        {
          "value": "/_next/static",
          "source": "html"
        },
        {
          "value": "/_next/static",
          "source": "resources"
        },
        {
          "value": "next-router",
          "source": "headers"
        }
      ],
      "confidence": "high",
      "confidenceScore": 99,
      "evidenceSources": [
        "html",
        "resources",
        "headers"
      ],
      "versionEvidence": null
    },
    {
      "id": "d9eb22af03",
      "code": "8c3c6c8c2657",
      "name": "Cloudflare",
      "risk": "",
      "version": "",
      "category": "Hosting / CDN",
      "evidence": [
        {
          "value": "cf-ray",
          "source": "headers"
        },
        {
          "value": "cloudflareinsights.com",
          "source": "resources"
        }
      ],
      "confidence": "high",
      "confidenceScore": 91,
      "evidenceSources": [
        "headers",
        "resources"
      ],
      "versionEvidence": null
    }
  ],
  "accessibility": {
    "axe": {
      "used": false,
      "reason": "",
      "enabled": false,
      "violations": [],
      "violationCount": 0,
      "incompleteCount": 0
    },
    "note": "This is a fast static accessibility scan. Enable Playwright + axe-core for automated rendered-page audits.",
    "forms": {
      "inputs": 16,
      "labels": 11
    },
    "images": {
      "total": 54,
      "missingAlt": 0
    },
    "issues": [
      {
        "fix": "Associate every input with a visible label or accessible aria-label.",
        "area": "Accessibility",
        "code": "accessibility.form_labels_missing",
        "title": "Form labels may be missing",
        "detail": "16 text-like inputs and 11 labels were found.",
        "fixUrl": "",
        "severity": "medium"
      },
      {
        "fix": "Add visible button text or aria-label for icon-only buttons.",
        "area": "Accessibility",
        "code": "accessibility.buttons_missing_accessible_names",
        "title": "Buttons may lack accessible names",
        "detail": "4 button(s) appear to have no text or aria-label.",
        "fixUrl": "",
        "severity": "medium"
      }
    ],
    "buttons": {
      "empty": 4,
      "total": 36
    },
    "headings": [
      {
        "text": "Birthday Website Maker",
        "level": 1
      },
      {
        "text": "Make their birthday page right here",
        "level": 2
      },
      {
        "text": "Whose birthday is it?",
        "level": 3
      },
      {
        "text": "Fill the party with surprises",
        "level": 3
      },
      {
        "text": "All set for the party",
        "level": 3
      },
      {
        "text": "What is a birthday website?",
        "level": 2
      },
      {
        "text": "How Birthday Website Maker works",
        "level": 2
      },
      {
        "text": "Write it",
        "level": 3
      },
      {
        "text": "Preview it",
        "level": 3
      },
      {
        "text": "Unlock and send",
        "level": 3
      },
      {
        "text": "Eight surprises. All of them yours.",
        "level": 2
      },
      {
        "text": "A cake that counts down",
        "level": 3
      },
      {
        "text": "Your letter — or a template",
        "level": 3
      },
      {
        "text": "Moments: up to 10 photos",
        "level": 3
      },
      {
        "text": "Little surprises + your song",
        "level": 3
      },
      {
        "text": "One link, $5.99 to unlock",
        "level": 3
      },
      {
        "text": "This is what they open",
        "level": 2
      },
      {
        "text": "For every kind of birthday",
        "level": 2
      },
      {
        "text": "Girlfriend",
        "level": 3
      },
      {
        "text": "Boyfriend",
        "level": 3
      },
      {
        "text": "Wife",
        "level": 3
      },
      {
        "text": "Husband",
        "level": 3
      },
      {
        "text": "Best friend",
        "level": 3
      },
      {
        "text": "Mom",
        "level": 3
      },
      {
        "text": "Dad",
        "level": 3
      },
      {
        "text": "Long distance",
        "level": 3
      },
      {
        "text": "One page, many moods",
        "level": 2
      },
      {
        "text": "Soft & sweet",
        "level": 3
      },
      {
        "text": "Film & cream",
        "level": 3
      },
      {
        "text": "Cake & cheer",
        "level": 3
      },
      {
        "text": "Quiet love",
        "level": 3
      },
      {
        "text": "Daylight",
        "level": 3
      },
      {
        "text": "Example pages",
        "level": 2
      },
      {
        "text": "“Happy birthday, love”",
        "level": 3
      },
      {
        "text": "“Ten years of bad decisions”",
        "level": 3
      },
      {
        "text": "“Thank you for the small things”",
        "level": 3
      },
      {
        "text": "“It’s midnight where you are”",
        "level": 3
      },
      {
        "text": "Birthday website vs card, video, or party invite",
        "level": 2
      },
      {
        "text": "What a birthday website can feel like",
        "level": 2
      },
      {
        "text": "Priced like a gift",
        "level": 2
      },
      {
        "text": "Preview",
        "level": 3
      },
      {
        "text": "Birthday party gift",
        "level": 3
      },
      {
        "text": "Questions before you make one",
        "level": 2
      },
      {
        "text": "What is Birthday Website Maker?",
        "level": 3
      },
      {
        "text": "Is it a party invitation or RSVP site?",
        "level": 3
      },
      {
        "text": "Is it free?",
        "level": 3
      },
      {
        "text": "Do I need an account?",
        "level": 3
      },
      {
        "text": "Does the person I send it to need an app or an account?",
        "level": 3
      },
      {
        "text": "What can I put on the page?",
        "level": 3
      },
      {
        "text": "Do I need design or coding skills?",
        "level": 3
      },
      {
        "text": "Who can see the page?",
        "level": 3
      },
      {
        "text": "Can they open it before their birthday?",
        "level": 3
      },
      {
        "text": "Can I edit the page after I share it?",
        "level": 3
      },
      {
        "text": "Does it write the letter for me?",
        "level": 3
      },
      {
        "text": "Will it look right on their phone?",
        "level": 3
      },
      {
        "text": "Their birthday, in your words",
        "level": 2
      },
      {
        "text": "More birthday website ideas",
        "level": 2
      },
      {
        "text": "Birthday website for girlfriend",
        "level": 3
      },
      {
        "text": "Birthday website for boyfriend",
        "level": 3
      },
      {
        "text": "Birthday website for wife",
        "level": 3
      },
      {
        "text": "Birthday website for husband",
        "level": 3
      },
      {
        "text": "Birthday website for best friend",
        "level": 3
      },
      {
        "text": "Birthday website for mom",
        "level": 3
      },
      {
        "text": "Long distance birthday surprise",
        "level": 3
      },
      {
        "text": "Birthday surprise website",
        "level": 3
      },
      {
        "text": "Birthday guides",
        "level": 2
      },
      {
        "text": "How to Make a Birthday Website (No Coding, in One Evening)",
        "level": 3
      },
      {
        "text": "What Is a Birthday Website? And When It Beats a Card",
        "level": 3
      },
      {
        "text": "How to Choose Photos for a Birthday Surprise Page",
        "level": 3
      },
      {
        "text": "When and How to Send a Birthday Surprise Link (Midnight, Morning, or In Person)",
        "level": 3
      },
      {
        "text": "Best Birthday Website Makers in 2026: An Honest Comparison",
        "level": 3
      },
      {
        "text": "Best Songs for a Birthday Surprise (for Partners, Friends, and Parents)",
        "level": 3
      }
    ],
    "viewport": true
  },
  "responseHeaders": {
    "nel": "{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}",
    "date": "Sat, 17 Oct 2026 17:51:14 GMT",
    "link": "<https://birthdaywebsite.app/>; rel=\"alternate\"; hreflang=\"en\", <https://birthdaywebsite.app/zh>; rel=\"alternate\"; hreflang=\"zh\", <https://birthdaywebsite.app/ja>; rel=\"alternate\"; hreflang=\"ja\", <https://birthdaywebsite.app/ko>; rel=\"alternate\"; hreflang=\"ko\", <https://birthdaywebsite.app/>; rel=\"alternate\"; hreflang=\"x-default\"",
    "vary": "rsc, next-router-state-tree, next-router-prefetch, next-router-segment-prefetch",
    "cf-ray": "a4c1265599a2dbe9-LAX",
    "server": "cloudflare",
    "alt-svc": "h3=\":443\"; ma=86400",
    "report-to": "{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=as4a5BX74sWvwYbDCjymNVZwPODvKPHSI9Ye9JUoili4h3E%2BBJB6magPxY%2F14vvkBhtDNz2Tk%2FFZwcf1yf6VPe3n1umkwL1i2KaefEZiUpmyrPbqk6YCSjc%2Br8WiZTbzLANqFvP6\"}]}",
    "connection": "keep-alive",
    "x-opennext": "1",
    "content-type": "text/html; charset=utf-8",
    "x-powered-by": "Next.js",
    "cache-control": "private, no-cache, no-store, max-age=0, must-revalidate",
    "server-timing": "cfEdge;dur=1549,cfOrigin;dur=0,cfWorker;dur=3438",
    "content-encoding": "br",
    "transfer-encoding": "chunked"
  },
  "detectionSignals": {
    "html": {
      "bytes": 353374,
      "comments": 44,
      "cssVariables": 0,
      "jsonLdBlocks": 1,
      "stylesInline": 1,
      "scriptsInline": 45,
      "scriptsExternal": 29
    },
    "meta": {
      "total": 14,
      "generator": "",
      "frameworkHints": [
        {
          "name": "next-size-adjust",
          "content": ""
        }
      ]
    },
    "audits": {
      "lighthouse": {
        "used": false,
        "reason": "Set ENABLE_LIGHTHOUSE=1 to enable Lighthouse CLI audits.",
        "enabled": false,
        "skipped": true
      }
    },
    "render": {
      "axe": {
        "used": false,
        "enabled": false
      },
      "dom": {},
      "used": false,
      "source": "",
      "enabled": false,
      "globals": {},
      "classHints": {},
      "durationMs": 0,
      "requestCount": 0,
      "failedRequestCount": 0
    },
    "classes": {
      "bootstrap": 12,
      "elementor": 0,
      "vueScoped": 0,
      "attributes": 962,
      "tailwindLike": 2774,
      "wordpressBlocks": 0
    },
    "headers": {
      "total": 16,
      "identity": [
        {
          "key": "server",
          "value": "cloudflare"
        },
        {
          "key": "x-powered-by",
          "value": "Next.js"
        },
        {
          "key": "cf-ray",
          "value": "a4c1265599a2dbe9-LAX"
        }
      ],
      "cacheHeaderCount": 1,
      "securityHeaderCount": 0
    },
    "channels": [
      {
        "key": "static-html",
        "label": "Static HTML",
        "signals": 1,
        "description": "Server-returned HTML, metadata, inline scripts, comments, and visible markup."
      },
      {
        "key": "resource-urls",
        "label": "Resource URLs",
        "signals": 102,
        "description": "Script, CSS, image, font, iframe, and asset paths extracted from public markup."
      },
      {
        "key": "response-headers",
        "label": "Response headers",
        "signals": 4,
        "description": "Main-document headers such as Server, CDN, cache, security, and framework hints."
      },
      {
        "key": "meta-tags",
        "label": "Meta tags",
        "signals": 14,
        "description": "Generator, Open Graph, Twitter Card, viewport, robots, and framework metadata."
      },
      {
        "key": "css-classes",
        "label": "CSS classes",
        "signals": 962,
        "description": "Utility classes, page-builder classes, scoped framework attributes, and block editor classes."
      },
      {
        "key": "auxiliary-files",
        "label": "Auxiliary files",
        "signals": 2,
        "description": "robots.txt and sitemap.xml checks collected by the scanner fetch layer."
      },
      {
        "key": "rendered-dom",
        "label": "Rendered DOM",
        "signals": 0,
        "description": "Playwright-rendered DOM, runtime globals, class hints, and post-load network responses when enabled."
      },
      {
        "key": "automated-audits",
        "label": "Automated audits",
        "signals": 0,
        "description": "Optional axe-core and Lighthouse checks when enabled on the runtime."
      }
    ],
    "warnings": [],
    "resources": {
      "total": 102,
      "byType": {
        "feeds": 0,
        "fonts": 0,
        "other": 42,
        "images": 29,
        "iframes": 0,
        "scripts": 28,
        "stylesheets": 3
      },
      "topHosts": [
        {
          "name": "birthdaywebsite.app",
          "count": 101
        },
        {
          "name": "static.cloudflareinsights.com",
          "count": 1
        }
      ],
      "externalHosts": [
        "static.cloudflareinsights.com"
      ],
      "firstPartyHost": "birthdaywebsite.app"
    },
    "methodology": "Themerella uses a self-owned static scanner that combines HTML, resources, headers, metadata, CSS-class hints, robots.txt, and sitemap.xml. Enable Playwright to add rendered DOM, runtime globals, dynamic network responses, axe, and Lighthouse."
  }
}