Verifying page-level rules
Landmark, title and language rules can't be judged from a single component. Scan your built output (dist/) to verify them on the real, composed page.
Some accessibility rules are about the whole page, not any single element: landmarks (is content inside a <main>?), the document <title>, the page lang, a skip link. A component or partial can't answer them — that structure lives in the layout that composes it. So on a source scan of a component, Equall marks those criteria not verifiable on this scan instead of inventing a false violation — or a false pass.
This is not rendered/DOM scanning. It's the same static engine, pointed at your built HTML — the composed page as a real document.
The two-scan pattern
Run Equall twice, each scan honest about what it sees:
- Write-time, on your source — fast, zero-noise feedback while you code. Page-level rules stay out of the way (
not verifiable on this scan). - Post-build, on your
dist/— the built HTML is a real, composed document, so page-level rules execute and their criteria move from Not evaluated to Supports / Does not support in the Support Summary.
equall scan src/ # 1. write-time — components / partials
astro build && equall scan dist/ # 2. post-build — the composed pagesFramework recipes
Astro
astro build && npx equall scan dist/Next.js (static export)
// next.config.js
module.exports = { output: 'export' }next build && npx equall scan out/CI: build, then gate
# .github/workflows/a11y.yml
- run: npm run build
- run: npx equall scan dist/ --min-score 90 # exit 1 if the score drops below 90--min-score is the only gate — a successful scan otherwise exits 0. It tracks a trend; it makes no compliance claim.
The payoff: a visible coverage uplift
The same page, scanned two ways:
# source scan (a component)
○ Not evaluated document-title (2.4.2), html-has-lang (3.1.1) — verify on the built output
# post-build scan (dist/index.html)
✓ Supports (automated) document-title (2.4.2), html-has-lang (3.1.1)The built scan verified what the component couldn't: those criteria are now honestly resolved instead of sitting in Not evaluated.
Honest caveats
- Static, not rendered. Content injected by client-side JavaScript, hydration, or a SPA router is not in the built HTML, so Equall won't see it. For SPA/SSR you need a rendered check Equall deliberately does not perform.
- Verify, not certify. A clean post-build scan does not make the site conformant. The per-criterion verdicts are an automated evidence layer — a full statement needs manual + assistive-technology testing. See the Verdict reference and Scoring.