{
  "summary": {
    "health_score": 71,
    "business_type": "SaaS product documentation / help center (Quire — project management software)",
    "top_findings": [
      "Hreflang attribute values use underscores instead of BCP47 hyphens for pt_BR, zh_TW, zh_HK across all 1,932 guide URLs — Google may ignore these language-targeting signals for 3 of 13 locales sitewide.",
      "The agile-scrum and customer-relationship-pipeline template pages are written as feature-tour narratives when Google's SERPs for their target queries reward template-gallery-style pages with a visual preview and prominent 'use this template' CTA — both are losing high-intent traffic to competitors.",
      "A duplicated, conflicting <meta name=\"viewport\"> tag in _layouts/default.html sets user-scalable=no, blocking pinch-zoom on every page and failing WCAG 1.4.4, even though a correct zoom-friendly tag exists later in the same document.",
      "WebSite JSON-LD resolves to the wrong URL (bare quire.io domain instead of quire.io/guide) sitewide due to a case-sensitive Liquid typo (site.baseUrl vs. site.baseurl) in _includes/_seo.html.",
      "35% of guide pages (48 of 139) have zero contextual internal links, ~22 of ~30 nav categories have no pillar/landing page, and 55 pages are reachable only through the sidebar (not from any page body) — a weak topical-authority signal for search engines and AI answer engines."
    ],
    "quick_wins": [
      "Change hreflang values to use hyphens (pt-BR, zh-TW, zh-HK) — the correct BCP47 codes already exist in _data/i18n.yml, so this is a one-line template fix affecting 1,494 URLs.",
      "Fix the site.baseUrl → site.baseurl typo in _includes/_seo.html to correct the WebSite schema entity sitewide.",
      "Delete the duplicate <link rel=\"canonical\"> and the duplicate, zoom-blocking <meta viewport> tag in _layouts/default.html (both are leftover duplicates, not intentional).",
      "Add a Cache-Control header for static assets (CSS/JS/images/fonts) at the nginx layer — config-only change, benefits every repeat visit across all 13 locales.",
      "Add an hreflang x-default fallback pointing to the English version of each page."
    ]
  },
  "categories": [
    {
      "name": "Technical SEO",
      "score": 78,
      "what_works": [
        "Fully server-rendered static HTML on every page — no client-side hydration required to see content",
        "robots.txt correctly allows AI and search crawlers on /guide/, explicit sitemap declaration",
        "1:1 translation parity across all 13 locales + English (138 pages each, 1,932 URLs), zero orphaned/missing pages",
        "Hreflang reciprocity complete (14-way alternate set) and self-referencing canonicals correct in value",
        "Clean URL structure, single-hop redirects, custom true 404, HSTS with preload, gzip compression"
      ],
      "findings": [
        {"title": "Hreflang values use underscores instead of BCP47 hyphens for pt_BR, zh_TW, zh_HK", "severity": "Critical", "description": "All 1,932 guide pages emit hreflang=\"pt_BR\"/\"zh_TW\"/\"zh_HK\" instead of the valid pt-BR/zh-TW/zh-HK. Underscore region subtags are invalid per RFC 5646, risking Google ignoring these annotations for 3 of 13 locales sitewide.", "recommendation": "In _includes/head.html, emit lang.bcp47 (already correctly defined in _data/i18n.yml) for the hreflang attribute instead of lang.code."},
        {"title": "Missing hreflang x-default annotation sitewide", "severity": "High", "description": "None of the 1,932 pages include hreflang=\"x-default\", leaving no fallback target for unmatched locales.", "recommendation": "Add one x-default alternate per page in the hreflang loop, pointing to the English (root) URL."},
        {"title": "Duplicate <link rel=\"canonical\"> tag on every page", "severity": "High", "description": "_layouts/default.html emits the canonical tag twice (lines 59 and 78) with matching values today, but this is invalid HTML and a latent divergence risk.", "recommendation": "Delete one of the two duplicate canonical lines in _layouts/default.html."},
        {"title": "Duplicate, conflicting viewport meta tags — one blocks pinch-zoom", "severity": "High", "description": "_layouts/default.html:74 emits a viewport tag with maximum-scale=1, user-scalable=no (blocks pinch-zoom, fails WCAG 1.4.4), while _includes/head.html:30 emits a correct zoom-friendly tag later. The restrictive tag appears first and is honored by most browsers.", "recommendation": "Remove the restrictive viewport tag in _layouts/default.html:74, keep only the zoom-friendly version in _includes/head.html:30."},
        {"title": "Guide images lack width/height attributes (CLS risk)", "severity": "Medium", "description": "All sampled <img> tags have no width/height or aspect-ratio reservation, a common cause of layout shift as images pop in.", "recommendation": "Add explicit width/height attributes (or CSS aspect-ratio) to all guide images."},
        {"title": "Render-blocking stylesheets and unpreconnected Google Fonts request", "severity": "Medium", "description": "Four stylesheets load synchronously in <head>, including a cross-origin Google Fonts stylesheet with no rel=preconnect.", "recommendation": "Add preconnect hints for Google Fonts origins; audit for duplicate/overlapping main.css includes; defer non-critical stylesheets."},
        {"title": "Missing security and caching headers", "severity": "Medium", "description": "Responses lack Content-Security-Policy, X-Content-Type-Options: nosniff, Referrer-Policy, and Cache-Control (only ETag/Last-Modified validators present).", "recommendation": "Add baseline security headers and explicit Cache-Control at the nginx/CDN layer."},
        {"title": "Shared app-shell chrome precedes guide content in raw HTML", "severity": "Low", "description": "Login/signup/notification chrome renders ahead of article content in the DOM on every page, diluting text-to-boilerplate ratio for crawlers/AI extraction.", "recommendation": "Consider moving shared chrome later in DOM order (positioned visually via CSS) so article content appears earlier in source order."},
        {"title": "No IndexNow protocol integration", "severity": "Low", "description": "No IndexNow key file or ping integration found despite a mature sitemap/lastmod pipeline.", "recommendation": "Add an IndexNow key file and push-on-publish step to accelerate Bing/Yandex/Naver indexing."}
      ]
    },
    {
      "name": "Content Quality",
      "score": 84,
      "what_works": [
        "All 139 sampled EN pages follow the documented convention: intro paragraph, H2 sections, H3 topic labels, visible FAQ section at the bottom",
        "100% of EN pages have both frontmatter faq: and a matching visible FAQ, giving self-contained, quotable passages",
        "Strong Organization schema and visible trust signals (contact, /security, /privacy, /terms, feedback widget)",
        "Explicit 'AI translated' disclosure banner on non-English pages",
        "No literal duplicate content found; templated phrasing across parallel pages still reflects page-specific flows"
      ],
      "findings": [
        {"title": "Thin content on ~25% of pages", "severity": "Medium", "description": "35 of 139 EN pages fall under 400 body words (median 675); 8 pages are under 200 words.", "recommendation": "Expand the sub-200-word tier with genuinely useful detail (edge cases, related-task links); leave inherently simple pages as-is."},
        {"title": "No freshness/last-modified signal despite active rewrites", "severity": "Medium", "description": "120 of 139 pages (86%) share an identical static date of 2019-08-23 despite recent substantive rewrites; the template already supports last_modified_at but no page sets it.", "recommendation": "Populate last_modified_at via jekyll-last-modified-at or manual field during editorial passes."},
        {"title": "No author/editor bylines or credentialing", "severity": "Low", "description": "No _docs/en/ page has an author field; only site-level Organization schema provides authorship context.", "recommendation": "Add a lightweight site-wide 'Written and maintained by the Quire Support Team' byline/Organization-as-author schema."},
        {"title": "Homepage heading order inverts the documented convention and omits FAQ", "severity": "Low", "description": "index.md opens with an H3 before the intro paragraph and first H2, and has no FAQ section unlike all topic pages.", "recommendation": "Drop/demote the H3 'Welcome' heading; document the homepage's FAQ exemption in GUIDE-FORMAT.md."},
        {"title": "Formulaic sentence templates across structurally-parallel pages", "severity": "Info", "description": "Parallel UI-action pages reuse near-identical sentence templates; currently still page-specific, not duplicate content.", "recommendation": "Periodically spot-check templated batches for continued differentiation, especially any future programmatic generation."}
      ]
    },
    {
      "name": "On-Page SEO & Internal Linking",
      "score": 58,
      "what_works": [
        "8 Overview pages act as de facto pillar pages and correctly link down into their category's primary spokes",
        "The Formula cluster (formula-01 through formula-06) is a well-built hub-and-spoke example with bidirectional linking",
        "Distinct-intent pages that look similar on title (blink-search vs search-tasks) are scoped differently, avoiding keyword cannibalization"
      ],
      "findings": [
        {"title": "No pillar page for ~22 of ~30 nav categories", "severity": "High", "description": "Only the 8 Overview pages function as pillars; categories like Import & Export, Mobile, Troubleshooting, Security, Billing exist only as sidebar labels with no landing page.", "recommendation": "Create a lightweight pillar page for each major nav category lacking one, prioritizing Import & Export, Mobile, Notifications, Search, Calendar, Permissions."},
        {"title": "35% of pages (48 of 139) have zero contextual internal links", "severity": "High", "description": "Entire categories are link-islands: Import & Export (4 of 5 pages), Troubleshooting (0 cross-links among 5 pages), Mobile (6 of 8 pages unlinked), Security (0 links between SSO and IP allowlists).", "recommendation": "Add 'Related articles' link blocks (2-4 contextual links) to zero-outbound-link pages, starting with Import/Export, Troubleshooting, Mobile, Security."},
        {"title": "Spokes frequently fail to link back to their own pillar", "severity": "High", "description": "quire-calendar-view, quire-timeline-view, quire-table-view, and quire-board-view don't link back to project-view even though it links to all four; inconsistent linking within the reminders/notifications cluster.", "recommendation": "Enforce mandatory bidirectional linking between every spoke and its pillar."},
        {"title": "55 pages are orphaned from in-content links", "severity": "Medium", "description": "Pages like user-interface, navigate-quire, milestones, activity-log, quire-mcp, single-sign-on, all Templates and Import/Export pages receive no inbound link from any page body, relying solely on sidebar nav.", "recommendation": "Add inbound contextual links from related content and new category pillar pages."},
        {"title": "Overlapping-scope page groups are not cross-linked", "severity": "Medium", "description": "Notifications, Search, Calendar, and Permissions each split one conceptual topic across multiple pages with little to no cross-linking, creating soft cannibalization risk.", "recommendation": "Add explicit 'see also' cross-links within each overlapping group; link feature-permission pages back to the general permission-role pillar."},
        {"title": "Homepage does not function as a topical hub", "severity": "Low", "description": "index.md links to only 6 hand-picked 'Highlights' cards rather than to the ~30 category pillars.", "recommendation": "Expand the homepage to link to a category index or more pillar pages, not just 6 featured items."},
        {"title": "Password/login-recovery journey split across two competing pages", "severity": "Medium", "description": "basic-account-settings and locked-out-account both rank for overlapping 'reset/forgot password' intent but each covers only part of the journey.", "recommendation": "Add clear cross-links between the two pages, or consolidate into one canonical login-recovery page."}
      ]
    },
    {
      "name": "Schema / Structured Data",
      "score": 60,
      "what_works": [
        "Organization schema is rich and well-formed (absolute URLs, sameAs profiles, contactPoint, founder, parentOrganization, foundingDate)",
        "FAQPage schema is auto-generated at build time from a single frontmatter faq: source of truth, avoiding manual duplication drift",
        "FAQPage markup is structurally valid JSON-LD across sampled pages, retained deliberately for AI/LLM citation value despite Google retiring FAQ rich results",
        "No deprecated schema types in use anywhere"
      ],
      "findings": [
        {"title": "WebSite @id/url broken sitewide due to case-typo (site.baseUrl vs site.baseurl)", "severity": "High", "description": "_includes/_seo.html references site.baseUrl (capital U) but _config.yml defines baseurl (lowercase); Liquid is case-sensitive so this always resolves to nil, dropping the /guide subpath from WebSite.@id/url on every page across all 14 locales.", "recommendation": "Change site.baseUrl to site.baseurl in _includes/_seo.html."},
        {"title": "BreadcrumbList not implemented; scaffold is dead code", "severity": "Medium", "description": "_layouts/single.html gates breadcrumb rendering on site.breadcrumbs (never set) and includes a non-existent file (_includes/breadcrumbs.html).", "recommendation": "Implement _includes/breadcrumbs.html with BreadcrumbList JSON-LD reflecting the category hierarchy, and set site.breadcrumbs: true."},
        {"title": "Individual articles use generic CreativeWork Microdata instead of Article/TechArticle JSON-LD", "severity": "Medium", "description": "Articles are marked up with itemtype=CreativeWork Microdata missing author, publisher, image, mainEntityOfPage; dates are non-ISO formatted.", "recommendation": "Add a JSON-LD TechArticle block per page with author, publisher, image, mainEntityOfPage, and ISO 8601 dates."},
        {"title": "FAQPage schema content drift from visible FAQ on 8/139 sampled pages", "severity": "Medium", "description": "8 pages have frontmatter faq: question sets that genuinely differ from the visible FAQ section (e.g. billing-01-master-organization.md).", "recommendation": "Audit and reconcile the 8 flagged pages so schema and visible FAQ cover the same questions."},
        {"title": "FAQPage schema retained for AI/LLM value, no longer produces Google rich results", "severity": "Info", "description": "Google has retired FAQPage rich results sitewide; the markup still has AI/GEO citation value.", "recommendation": "No removal needed; keep as-is."},
        {"title": "HowTo schema — on hold, no action needed", "severity": "Info", "description": "Previously reviewed and implementation-ready, intentionally on hold pending AI-citation round-3 data collection per prior project decision.", "recommendation": "No new action until the hold is lifted."}
      ]
    },
    {
      "name": "Performance (CWV)",
      "score": 68,
      "what_works": [
        "LCP comfortably in the 'good' range (1.5-1.65s) across all 4 tested pages in lab conditions",
        "No long tasks (>50ms) observed during load on any page — low INP risk though not directly measurable",
        "DOM size reasonable (696-906 elements), well under bloat threshold",
        "Compression applied correctly (gzip/brotli on all text assets)",
        "No CLS observed in lab runs; static Jekyll architecture keeps TTFB reasonable with no application-layer bottleneck"
      ],
      "findings": [
        {"title": "Static assets have no Cache-Control/Expires headers", "severity": "High", "description": "Every first-party static asset (CSS, JS, PNGs, icon fonts) is served with only ETag/Last-Modified, forcing conditional revalidation on every repeat visit across all 13 locales.", "recommendation": "Add Cache-Control: public, max-age=31536000, immutable with cache-busting filenames for all static assets."},
        {"title": "All content images are unoptimized PNG with no WebP/AVIF or responsive srcset", "severity": "High", "description": "Screenshots (130-340 KB/page combined) are all PNG with no modern format or responsive sizing; homepage thumbnails are served 2.8x larger than displayed.", "recommendation": "Re-encode screenshots to WebP with PNG fallback; generate correctly-sized homepage thumbnails instead of scaling down in CSS."},
        {"title": "No width/height attributes on any <img> element", "severity": "Medium", "description": "CLS measured 0 in this fast lab run, but the lack of intrinsic sizing is a fragile, environment-dependent result that can surface shifts on slower connections.", "recommendation": "Add explicit width/height attributes to every <img> tag across all guide templates."},
        {"title": "Heavy third-party analytics/ad-tag footprint (23-24 of ~47-51 requests per page)", "severity": "Medium", "description": "Duplicated conversion tags found (both AW-1067329176/AW-11044828705 and both UA-48347893-1/G-VDRZSEZ5M5) suggesting redundant legacy tags never cleaned up.", "recommendation": "Confirm whether duplicate conversion/analytics tags are still needed and remove redundant ones."},
        {"title": "Render-blocking CSS chain including cross-origin Google Fonts import", "severity": "Medium", "description": "4 stylesheets block first paint, including a cross-origin Google Fonts stylesheet adding a DNS+connection+download round trip before FCP.", "recommendation": "Self-host or preconnect the Google Fonts stylesheet; consolidate bootstrap.min.css + blog.css + main.css."},
        {"title": "Homepage TTFB (780ms) is inconsistent with inner pages (480-670ms)", "severity": "Low", "description": "Homepage TTFB is close to the 800ms 'needs improvement' boundary while inner article pages are notably faster.", "recommendation": "Investigate whether a CDN/edge cache sits in front of quire.io/guide/ and whether the homepage is served from a colder cache tier."},
        {"title": "Lab-only measurement — no CrUX/PSI field data available", "severity": "Info", "description": "No Google API key configured and the keyless PSI quota was exhausted; results are single-run lab measurements, not 75th-percentile field data.", "recommendation": "Re-run with real PageSpeed Insights/CrUX API access once a Google API key is available."}
      ]
    },
    {
      "name": "AI Search Readiness",
      "score": 77,
      "what_works": [
        "robots.txt allows all major AI crawlers (GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended) with only irrelevant paths blocked",
        "Fully server-side rendered static site — raw HTML contains full body content, FAQ text, and JSON-LD ideal for AI crawlers",
        "100% FAQ coverage across all 139 EN pages, backed by valid FAQPage JSON-LD matching visible text verbatim",
        "Strong Organization schema sameAs links including LinkedIn, YouTube, G2, Capterra, Trustpilot, GetApp, SoftwareAdvice, and a zh-TW Wikipedia entry",
        "Complete canonical tags + 13-language hreflang alternates, visible 'Last updated' dates"
      ],
      "findings": [
        {"title": "Visible and frontmatter FAQ answers are shorter than optimal AI-citation length", "severity": "High", "description": "Across 809 visible FAQ answers sitewide, average length is 25.9 words; frontmatter answers average only 37 words, well short of the 134-167 word AI-citation sweet spot. Only the tasklist-* series (~10 pages) has been reworked to 60-120+ words.", "recommendation": "Lengthen frontmatter faq: answers toward 100-167 words on the ~130 pages not yet covered by the tasklist-series rework, keeping visible FAQ copy concise per GUIDE-FORMAT.md."},
        {"title": "No English Wikipedia entity for Quire the software", "severity": "Medium", "description": "en.wikipedia.org/wiki/Quire is an unrelated disambiguation page, despite a zh-TW Wikipedia article already existing and being referenced in schema.", "recommendation": "Pursue a neutral, notability-compliant English Wikipedia article for Quire (software), mirroring the existing zh-TW entry."},
        {"title": "No YouTube video content embedded in guide pages", "severity": "Medium", "description": "Organization schema links to an active YouTube channel, but no guide pages embed walkthrough videos; YouTube mentions show the strongest observed correlation with AI citations of any brand signal checked.", "recommendation": "Embed relevant existing YouTube walkthroughs on high-traffic guide pages (add-task, board-view, permissions)."},
        {"title": "No llms.txt present", "severity": "Low", "description": "Both quire.io/llms.txt and quire.io/guide/llms.txt return 404. Doesn't block crawl access but forgoes a curated entry point across ~1,800 URLs.", "recommendation": "Generate a /guide/llms.txt from existing frontmatter listing canonical English URLs with short summaries."},
        {"title": "AI training-only crawlers not distinguished from AI-search crawlers in robots.txt", "severity": "Low", "description": "CCBot and anthropic-ai inherit the wildcard Allow: / alongside GPTBot/PerplexityBot/ClaudeBot, with no way to permit AI-search crawling while opting out of training-only scraping.", "recommendation": "Add explicit Disallow: / for CCBot/anthropic-ai if opting out of training-data scraping while keeping AI-search visibility."}
      ]
    },
    {
      "name": "Images",
      "score": 55,
      "what_works": [
        "No horizontal scroll/overflow detected on any page or viewport tested",
        "Responsive image/card grids and notice/callout blocks scale cleanly across breakpoints"
      ],
      "findings": [
        {"title": "All content images are unoptimized PNG, no responsive srcset", "severity": "High", "description": "Screenshots average 20-45 KB each with no WebP/AVIF or srcset; combined image payload is 130-340 KB per article page.", "recommendation": "Re-encode to WebP/AVIF (quality ~75-80) and add responsive srcset/<picture> markup."},
        {"title": "Homepage thumbnails served ~2.8x larger than displayed", "severity": "Medium", "description": "Six homepage thumbnails are natively 608x420px but displayed at 214x148px, roughly 8x the pixel area actually needed.", "recommendation": "Generate correctly-sized thumbnail assets instead of scaling down in CSS."},
        {"title": "No width/height attributes on any image", "severity": "Medium", "description": "Missing intrinsic sizing is a CLS risk under real-world (non-lab) conditions.", "recommendation": "Add explicit width/height attributes to all <img> elements."},
        {"title": "Minor image alt-text gaps", "severity": "Low", "description": "Each of 4 sampled pages has exactly one image missing alt text out of 7-12 images per page.", "recommendation": "Audit and fill missing alt attributes site-wide as part of routine accessibility maintenance."}
      ]
    }
  ],
  "action_plan": {
    "phases": [
      {
        "name": "Phase 1: Critical Fixes",
        "timeframe": "Week 1",
        "items": [
          "Fix hreflang values to use BCP47 hyphens (pt-BR, zh-TW, zh-TW) instead of underscores in _includes/head.html — affects 1,494 URLs",
          "Fix site.baseUrl → site.baseurl typo in _includes/_seo.html to correct WebSite schema sitewide",
          "Remove the duplicate <link rel=\"canonical\"> tag in _layouts/default.html",
          "Remove the duplicate, zoom-blocking <meta viewport> tag in _layouts/default.html (keep the correct one in _includes/head.html)",
          "Add hreflang x-default fallback pointing to the English version of each page"
        ]
      },
      {
        "name": "Phase 2: High-Impact Improvements",
        "timeframe": "Weeks 2-3",
        "items": [
          "Restructure agile-scrum and customer-relationship-pipeline pages to lead with a template preview + prominent 'Use This Template' CTA, matching competitor SERP structure",
          "Add Cache-Control headers for static assets at the nginx layer",
          "Re-encode guide screenshots to WebP and fix oversized homepage thumbnails",
          "Add 'Related articles' link blocks to the 48 zero-outbound-link pages, prioritizing Import/Export, Troubleshooting, Mobile, Security",
          "Fix bidirectional pillar-spoke linking for the four primary View pages (calendar/timeline/table/board) and the notifications cluster",
          "Reconcile the 8 pages where FAQ schema content drifts from the visible FAQ"
        ]
      },
      {
        "name": "Phase 3: Content & Authority",
        "timeframe": "Month 2",
        "items": [
          "Create pillar/landing pages for the ~22 nav categories currently without one (prioritize Import & Export, Mobile, Notifications, Search, Calendar, Permissions)",
          "Lengthen frontmatter FAQ answers toward 100-167 words on the ~130 pages not yet covered by the tasklist-series rework",
          "Add width/height attributes to all guide images sitewide",
          "Populate last_modified_at on pages with genuine recent rewrites so freshness signals are accurate",
          "Implement BreadcrumbList schema (fix the dead _includes/breadcrumbs.html reference) and upgrade article markup to JSON-LD TechArticle",
          "Expand the 8 sub-200-word thin-content pages with genuinely useful detail",
          "Pursue an English Wikipedia entity for Quire (software), mirroring the existing zh-TW article"
        ]
      },
      {
        "name": "Phase 4: Monitoring & Iteration",
        "timeframe": "Ongoing",
        "items": [
          "Configure a Google API key to unlock real PageSpeed Insights/CrUX field data and re-run the performance audit",
          "Configure a free Moz API key and verify quire.io in Bing Webmaster Tools to unlock referring-domain/backlink data",
          "Add an IndexNow key/ping integration to accelerate Bing/Yandex/Naver indexing of new and updated pages",
          "Periodically spot-check templated page batches for continued page-specific differentiation",
          "Re-audit once the on-hold HowTo schema work is unblocked by AI-citation round-3 data collection",
          "Fix mobile navigation so the hamburger menu and the guide's section TOC are either merged or clearly differentiated"
        ]
      }
    ]
  },
  "artifacts": {
    "findings_dir": "findings/",
    "screenshots_dir": "screenshots/"
  }
}
