LocalGov Drupal Accessibility & Sustainability
Sites blocking the scanner (3): www.lbhf.gov.uk, www.hackney.gov.uk, blackburn.gov.uk
A firewall rule, a robots.txt rule or a network block stopped the scanner on these sites, so their results are missing or partial. The fix is on the site’s side.
- www.lbhf.gov.uk: Blocked.
- Blocked by a firewall: 1 page(s) got a challenge or refusal instead of the page (HTTP 202 × 1). Identified as AWS WAF challenge (x-amzn-waf-action), Amazon CloudFront.
- Other pages answered with an error: HTTP 404 × 40.
Ask the site’s web team to let the user agent
vital-scansthrough its firewall (what to send them). - www.hackney.gov.uk: Partly blocked.
- Blocked by a firewall: 105 page(s) got a challenge or refusal instead of the page (HTTP 403 × 104, HTTP 202 × 1). Identified as Amazon CloudFront, AWS WAF challenge (x-amzn-waf-action).
Ask the site’s web team to let the user agent
vital-scansthrough its firewall (what to send them). - blackburn.gov.uk: Blocked.
- Unreachable: no page loaded in 1 run(s) (no connection within 10 s (often a firewall dropping traffic from this network)).
Run Actions → diagnose for this domain to see what the scanner’s network gets. A network block has to be lifted by the site’s team.
| Domain | Score | Trajectory | Pages audited (7d) | Median axe / page | Median Alfa / page | Trend |
|---|---|---|---|---|---|---|
| www.hackney.gov.uk Partly blocked | A 95 | ▬ stable +0 | 1104 | 1 | 37 | Median axe violations per page over 2 weeks: 1, 1. |
| www.luton.gov.uk | A 95 | ▬ stable +0 | 2946 | 1 | 40 | Median axe violations per page over 2 weeks: 1, 1. |
| go.walsall.gov.uk | F 36 | ▬ stable -2 | 2534 | 19 | 78 | Median axe violations per page over 2 weeks: 19, 20. |
Scores are a relative, automated signal based on axe violations per page (axe runs on every page; Alfa is sampled and reported separately). Automated testing finds only ~⅓ of barriers — use scores to compare and track direction, not as a pass/fail.
| Domain | 2026-W44 | 2026-W45 |
|---|---|---|
| www.hackney.gov.uk | 1 | 1 |
| www.luton.gov.uk | 1 | 1 |
| go.walsall.gov.uk | 19 | 20 |
Worst offenders across all domains
| Domain | Issue | Requirement | Severity | Pages |
|---|---|---|---|---|
| go.walsall.gov.uk | Buttons must have discernible text (WCAG 4.1.2) | Legally required | Critical | 968 |
| go.walsall.gov.uk | Certain ARIA roles must contain particular children (WCAG 1.3.1) | Legally required | Critical | 968 |
| go.walsall.gov.uk | Certain ARIA roles must be contained by particular parents (WCAG 1.3.1) | Legally required | Critical | 968 |
| go.walsall.gov.uk | <ul> and <ol> must only directly contain <li>, <script> or <template> elements (WCAG 1.3.1) | Legally required | Critical | 968 |
| go.walsall.gov.uk | Elements must meet minimum color contrast ratio thresholds (WCAG 1.4.3) | Legally required | Critical | 968 |
| www.hackney.gov.uk | ARIA input fields must have an accessible name (WCAG 4.1.2) | Legally required | Critical | 856 |
| go.walsall.gov.uk | Form field has accessible name (WCAG 4.1.2) | Legally required | Moderate | 490 |
| www.luton.gov.uk | Scrollable element is keyboard accessible (WCAG 2.1.1) | Legally required | Moderate | 485 |
| go.walsall.gov.uk | Element has its required owned elements (WCAG 1.3.1) | Legally required | Moderate | 490 |
| go.walsall.gov.uk | Element in required WAI-ARIA context role (WCAG 1.3.1) | Legally required | Moderate | 490 |
| go.walsall.gov.uk | Text has minimum contrast (WCAG 1.4.3) | Legally required | Moderate | 490 |
| www.hackney.gov.uk | Form field has accessible name (WCAG 4.1.2) | Legally required | Moderate | 432 |
| go.walsall.gov.uk | Elements must only use permitted ARIA attributes (WCAG 4.1.2) | Legally required | Serious | 217 |
| www.hackney.gov.uk | Frames must have an accessible name (WCAG 4.1.2) | Legally required | Serious | 21 |
| go.walsall.gov.uk | ARIA attributes must conform to valid values (WCAG 4.1.2) | Legally required | Critical | 15 |
| www.hackney.gov.uk | Links must have discernible text (WCAG 2.4.4) | Legally required | Serious | 2 |
| www.hackney.gov.uk | Required ARIA attributes must be provided (WCAG 4.1.2) | Legally required | Critical | 1 |
| www.hackney.gov.uk | Images must have alternative text (WCAG 1.1.1) | Legally required | Critical | 1 |
| www.hackney.gov.uk | ARIA hidden element must not be focusable or contain focusable elements (WCAG 4.1.2) | Legally required | Serious | 1 |
| www.hackney.gov.uk | <ul> and <ol> must only directly contain <li>, <script> or <template> elements (WCAG 1.3.1) | Legally required | Serious | 1 |
Cross-technology issues
| Technology | Finding | Lift | Sites | Pages |
|---|---|---|---|---|
| Google Ads | Paragraph line height is at least 1.5 (alfa) | 1.00× | 3 | 129 |
| Google Ads | Page starts with a level 1 heading (alfa) | 1.00× | 3 | 100 |
| Google Ads | Target size is at least 44×44 CSS pixels (Enhanced) (alfa) | 1.00× | 3 | 129 |
| Google Ads Conversion Tracking | Paragraph line height is at least 1.5 (alfa) | 1.00× | 3 | 129 |
| Google Ads Conversion Tracking | Page starts with a level 1 heading (alfa) | 1.00× | 3 | 100 |
| Google Ads Conversion Tracking | Target size is at least 44×44 CSS pixels (Enhanced) (alfa) | 1.00× | 3 | 129 |
| Google Analytics | Paragraph line height is at least 1.5 (alfa) | 1.00× | 3 | 129 |
| Google Analytics | Page starts with a level 1 heading (alfa) | 1.00× | 3 | 100 |
| Google Analytics | Target size is at least 44×44 CSS pixels (Enhanced) (alfa) | 1.00× | 3 | 129 |
| Drupal | Paragraph line height is at least 1.5 (alfa) | 1.00× | 3 | 129 |
| Drupal | Page starts with a level 1 heading (alfa) | 1.00× | 3 | 100 |
| Drupal | Target size is at least 44×44 CSS pixels (Enhanced) (alfa) | 1.00× | 3 | 129 |
| jQuery | Paragraph line height is at least 1.5 (alfa) | 1.00× | 3 | 129 |
| jQuery | Page starts with a level 1 heading (alfa) | 1.00× | 3 | 100 |
| jQuery | Target size is at least 44×44 CSS pixels (Enhanced) (alfa) | 1.00× | 3 | 129 |
| PHP | Paragraph line height is at least 1.5 (alfa) | 1.00× | 3 | 129 |
| PHP | Page starts with a level 1 heading (alfa) | 1.00× | 3 | 100 |
| PHP | Target size is at least 44×44 CSS pixels (Enhanced) (alfa) | 1.00× | 3 | 129 |
| HSTS | Paragraph line height is at least 1.5 (alfa) | 1.00× | 3 | 129 |
| HSTS | Page starts with a level 1 heading (alfa) | 1.00× | 3 | 100 |
| HSTS | Target size is at least 44×44 CSS pixels (Enhanced) (alfa) | 1.00× | 3 | 129 |
| Google Tag Manager | Paragraph line height is at least 1.5 (alfa) | 1.00× | 3 | 129 |
| Google Tag Manager | Page starts with a level 1 heading (alfa) | 1.00× | 3 | 100 |
| Google Tag Manager | Target size is at least 44×44 CSS pixels (Enhanced) (alfa) | 1.00× | 3 | 129 |
| Microsoft Advertising | Text is included in a landmark (alfa) | 1.48× | 2 | 87 |
Common Lighthouse recommendations
| Recommendation | Category | Sites | Pages | Est. saving |
|---|---|---|---|---|
| Reduce unused JavaScript | Performance | 3 | 251 | 140.0 MB · 499.4s |
| Render-blocking requests | Performance | 3 | 251 | 540.5s |
| Reduce JavaScript execution time | Performance | 3 | 251 | 425.9s |
| Minimize main-thread work | Performance | 3 | 251 | 382.3s |
| First Contentful Paint | Performance | 3 | 251 | — |
| Largest Contentful Paint | Performance | 3 | 251 | — |
| Total Blocking Time | Performance | 3 | 251 | — |
| Max Potential First Input Delay | Performance | 3 | 251 | — |
| Time to Interactive | Performance | 3 | 251 | — |
| Uses third-party cookies | Best Practices | 3 | 251 | — |
| Issues were logged in the `Issues` panel in Chrome Devtools | Best Practices | 3 | 251 | — |
| WebMCP tools registered | Agentic (AI-readiness) | 3 | 251 | — |
| WebMCP form coverage | Agentic (AI-readiness) | 3 | 251 | — |
| WebMCP schemas are valid | Agentic (AI-readiness) | 3 | 251 | — |
| llms.txt follows recommendations | Agentic (AI-readiness) | 3 | 251 | — |
| `ai-catalog.json` schema is valid | Agentic (AI-readiness) | 3 | 251 | — |
| Network dependency tree | Performance | 3 | 251 | — |
| Accessibility tree is not well-formed | Agentic (AI-readiness) | 3 | 250 | — |
| Reduce unused CSS | Performance | 3 | 248 | 10.7 MB · 61.6s |
| Use efficient cache lifetimes | Performance | 3 | 235 | 196.8s |
| Speed Index | Performance | 3 | 229 | — |
| Browser errors were logged to the console | Best Practices | 3 | 221 | — |
| Page prevented back/forward cache restoration | Performance | 3 | 138 | — |
| Cumulative Layout Shift | Agentic (AI-readiness) | 3 | 116 | — |
| Layout shift culprits | Performance | 3 | 116 | — |
Recurring patterns across domains
Tools
- URL error lookup — paste a URL or URL fragment and export all accessibility findings for that page as JSON, CSV, or JIRA-ready Markdown.
Why this exists
Continuous measurement beats one-off audits. This ledger tracks whether each site is getting more accessible and lighter over time, using axe-core and Alfa (the open source engine behind Siteimprove) for accessibility, and page weight with Sustainable Web Design CO₂ estimates for sustainability. Everything here is open: the scanner, the data, and the reports.
This data is also available beyond the web page: a read-only JSON API (no auth, no server), a machine-discovery API catalog, and for coding agents an llms.txt guide plus a local MCP server.