Internal
SEO audit
Fetches every route as a crawler would, parses its head, and checks the canonical URL, OpenGraph card, structured data and robots behaviour against what the route inventory says it should be.
Run the audit
Each route is requested over HTTP so the server-rendered head is what gets inspected — not the in-memory router state. The expectations come from src/data/site-routes.ts, the same inventory the OpenGraph card generator reads, so a new route cannot be silently skipped.
Figure accessibility
Every figure is checked in the live DOM rather than the server HTML, because the chart fallbacks render once the CSV resolves. Each route is loaded in an offscreen frame; for every <figure> the audit confirms the accessible name, the role="group" scroll region, that the drawing itself is hidden from screen readers, that the aria-controls target holds a real captioned table with scoped headers — and it clicks the “Show data table” button to verify the control actually flips aria-expanded and reveals the table.
What this page does not check
- Whether search engines accept the structured data. The check here is validity and shape (
@context,@type, parseable JSON), not Google’s eligibility rules. - Live indexing status. The canonical host is
https://gender-gap-insights.lovable.app; a preview deployment serves the same tags from a different host by design. - Sitemap coverage drift beyond the route inventory — regenerate the cards with
bun run ogafter adding a route.