Skip to content

Lighthouse: raise a11y/SEO floors to 0.95 (closes #125) - #161

Merged
PAMulligan merged 3 commits into
mainfrom
feat/lighthouse-raise-floors-125
Aug 24, 2026
Merged

Lighthouse: raise a11y/SEO floors to 0.95 (closes #125)#161
PAMulligan merged 3 commits into
mainfrom
feat/lighthouse-raise-floors-125

Conversation

@PAMulligan

Copy link
Copy Markdown
Collaborator

Summary

Closes #125 — raises the Lighthouse accessibility and SEO category floors from the 0.90 calibration value to 0.95, after fixing the theme-controlled audits that were holding scores down.

Theme a11y fixes (themes/flavian-shop/)

  • list audit (all pages): the header/footer wp:navigation blocks had no inner links, so core's Page List fallback nested <ul class="wp-block-page-list"> directly inside the navigation <ul> — invalid list children. Both navs now declare explicit wp:navigation-link inner blocks.
  • heading-order audit (/shop/, /cart/): product-grid titles were h3 directly after the page h1, and the footer column headings were h3 with no preceding h2. Normalized to h2 (explicit fontSize presets keep rendering identical). Same fix applied to the USP strip on the shop-landing template.
  • Bonus correctness fix: the archive/taxonomy h1 used wp:post-title outside the loop, which rendered the first product's title ("Test Beanie") as the page title on /shop/. Replaced with wp:query-title (showPrefix:false) → /shop/ renders "Shop", category pages render the term name.

SEO

No new work needed: the theme SEO layer (inc/seo.php, #116) merged after the #124 calibration run and already closed the meta-description gap — content SEO now measures 1.0 on all three content pages. That's option (b) from the issue, already shipped.

CI

  • categories:accessibility0.95 (both assertMatrix entries), categories:seo0.95 (content entry; functional pages stay unasserted — WooCommerce noindex).
  • New lighthouse-reports build artifact (raw .lighthouseci/ LHR JSON + HTML, 30-day retention) so specific failing audits stay readable after the temporary-public-storage link expires (~7 days).
  • Docs: floor tables, calibration history, and a new "Known residual audits" section documenting the one remaining WooCommerce-owned ding — the mini-cart drawer's aria-hidden-focus (pre-hydration Interactivity API markup), which the theme can't fix without dropping the mini-cart.

Verification

Ran the exact CI sequence locally (Docker stack + WooCommerce installer + tests/visual/seed.sh, then lhci collect/assert), 3 runs per URL, deterministic:

URL a11y (was) a11y (now) SEO (was) SEO (now)
/ 0.92 0.96 0.91 1.0
/shop/ 0.91 0.96 0.92 1.0
/product/test-hoodie/ 0.94 0.97 0.92 1.0
/cart/ 0.94 1.0 0.58 (noindex, exempt) 0.66 (noindex, exempt)

pnpm lighthouse:assert passes all 4 URLs × 3 runs at the new floors.

🤖 Generated with Claude Code

Paul Mulligan and others added 3 commits August 23, 2026 17:35
Three audits held content pages at 0.91-0.94 accessibility:

- list: wp:navigation had no inner links, so core fell back to the
  Page List block, nesting <ul class="wp-block-page-list"> directly
  inside the navigation <ul> (invalid list children). Header and footer
  navs now declare explicit navigation-link inner blocks.
- heading-order: product grids used h3 titles straight after the h1
  (archive + taxonomy templates), the footer column headings were h3
  with no h2 before them on functional pages, and the USP strip used h3
  after the shop-landing hero h1. All normalized to h2; the explicit
  fontSize presets keep the rendered size identical.
- The archive/taxonomy h1 also mis-rendered the first product's title
  via wp:post-title outside the loop; replaced with wp:query-title
  (showPrefix:false) so /shop/ renders "Shop" and category pages
  render the term name.

Verified against the seeded Docker stack: a11y 0.96 (/), 0.96 (/shop/),
0.97 (/product/test-hoodie/), 1.0 (/cart/) across 3 runs each. The only
remaining ding is WooCommerce's mini-cart drawer aria-hidden-focus
(pre-hydration markup), documented in tests/lighthouse/README.md.

Refs #125

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Closes the calibration follow-up from PR #124:

- categories:accessibility -> 0.95 on both assertMatrix entries and
  categories:seo -> 0.95 on content pages. The theme's own SEO layer
  (inc/seo.php, PR #116, merged after the #124 calibration run) already
  brought content SEO to 1.0, and the theme a11y fixes brought scores to
  0.96-1.0, so the floors now bind just below observed headroom.
- Upload .lighthouseci/ (LHR JSON + HTML reports) as a lighthouse-reports
  build artifact (30-day retention) so the specific failing audits are
  readable after the ~7-day temporary-public-storage link expires.
- Document the residual WooCommerce-owned audit (mini-cart drawer
  aria-hidden-focus on pre-hydration markup) and refresh the floor
  tables and calibration history in tests/lighthouse/README.md and
  CONTRIBUTING.md.

Verified green locally against the seeded Docker stack: lhci assert
passes all 4 URLs x 3 runs at the new floors.

Closes #125

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@PAMulligan
PAMulligan merged commit 5f772c0 into main Aug 24, 2026
19 checks passed
@PAMulligan
PAMulligan deleted the feat/lighthouse-raise-floors-125 branch August 24, 2026 01:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Lighthouse: raise a11y/SEO floors from 0.90 toward 0.95 on content pages

1 participant