Stats as of 2026-09-18 20:55 UTC โ€” last scan: 2026-09-18

361 scan batches run

31,386 of 87,696 available pages audited (35.8% coverage) 23,901 successful audits (76.2% of audited)

Overall average Lighthouse scores (0โ€“100 scale):

Performance Accessibility Best Practices SEO
89 89 91 88

Lighthouse Scores by Country

Country Audited Available Perf A11y Best Practices SEO Last Scan
Austria 822 822 88 90 91 89 2026-09-13
Belgium 1,129 1,329 87 91 91 90 2026-09-18
Bulgaria 352 353 86 81 88 88 2026-08-24
Canada 1,441 4,469 93 88 90 88 2026-09-17
Croatia 257 257 91 72 92 89 2026-08-24
Czechia 866 866 89 87 92 88 2026-09-13
Denmark 1,142 1,536 88 95 96 89 2026-09-13
Estonia 401 401 91 87 85 89 2026-08-25
Finland 199 199 86 94 96 87 2026-08-25
France 1,467 10,009 89 90 91 88 2026-09-17
Germany 2,512 6,599 89 90 96 87 2026-09-17
Greece 1,752 1,752 87 86 90 88 2026-09-18
Hungary 392 392 89 77 82 86 2026-08-25
Iceland 145 145 92 92 91 91 2026-08-25
Ireland 536 536 91 91 90 88 2026-09-13
Italy 3,050 5,351 87 88 93 88 2026-09-18
Latvia 405 803 87 86 91 85 2026-09-14
Lithuania 122 122 86 81 87 85 2026-08-26
Luxembourg 573 573 91 93 93 91 2026-09-14
Malta 610 610 89 85 78 82 2026-09-14
Netherlands 945 945 92 94 94 88 2026-09-15
Norway 249 249 91 93 92 89 2026-09-15
Poland 2,694 14,951 87 86 89 90 2026-09-18
Portugal 1,246 3,508 84 83 83 88 2026-09-18
Cyprus 29 29 81 86 83 85 2026-08-23
Romania 807 807 87 78 90 84 2026-09-15
Slovakia 442 442 90 87 90 88 2026-09-17
Slovenia 214 214 87 80 89 85 2026-08-24
Spain 1,312 6,091 82 75 76 82 2026-09-16
Sweden 1,496 1,702 90 93 92 87 2026-09-15
Switzerland 2,123 2,123 85 91 96 87 2026-09-17
United Kingdom 1,661 19,511 92 94 91 87 2026-09-17

Scores are averages across all successfully audited URLs, displayed as 0โ€“100 (Lighthouse stores scores as 0.0โ€“1.0 internally).


๐Ÿ“ฅ Machine-readable results: Download machine-readable Lighthouse data (JSON) ยท Download per-URL Lighthouse data (CSV)


Overview

The Lighthouse scanner runs the Google Lighthouse CLI against each government page URL and extracts four headline category scores:

Category What it measures
Performance Page speed and Core Web Vitals (LCP, FID, CLS, etc.)
Accessibility WCAG-aligned accessibility checks (colour contrast, ARIA labels, keyboard navigation, โ€ฆ)
Best Practices Security headers, HTTPS, modern web APIs, console errors
SEO Search-engine crawlability, meta tags, structured data

All scores are on a 0โ€“100 scale (stored internally as 0.0โ€“1.0).

Note: PWA (Progressive Web App) audits are skipped for government sites because they are not relevant to the EU Web Accessibility Directive requirements and omitting them reduces per-URL scan time.


How to Interpret the Scores

Lighthouse scores are based on a single page load at the time of the audit. Scores can vary between runs due to network conditions and server load, so the values shown here are averages across all successfully audited URLs for each country.

  • 90โ€“100: Good
  • 50โ€“89: Needs improvement
  • 0โ€“49: Poor

For a detailed breakdown of individual audit failures, download the machine-readable Lighthouse data (JSON) or the per-URL Lighthouse data (CSV).


Running a Scan

  1. Go to Actions โ†’ Scan Lighthouse
  2. Click Run workflow
  3. Optionally enter a country code (e.g. ICELAND) or leave blank to scan all
  4. Optionally adjust the rate limit, concurrency, and skip-recently-scanned-days parameters

The scan runs automatically every day at 03:00 UTC. With --concurrency 3 and skipping URLs audited within the last 30 days, each daily run covers roughly 750โ€“1,000 URLs while ensuring every URL is refreshed at least monthly.

Via the command line

# Scan a single country
python3 -m src.cli.scan_lighthouse --country ICELAND

# Scan all countries (with a 110-minute runtime cap and 3 concurrent processes)
python3 -m src.cli.scan_lighthouse \
  --all \
  --max-runtime 110 \
  --concurrency 3 \
  --skip-recently-scanned-days 30 \
  --only-categories performance,accessibility,best-practices,seo \
  --throttling-method provided

Architecture

flowchart TD
    A["scan-lighthouse.yml\n(GitHub Actions โ€” daily at 03:00 UTC)"]
    A --> B["scan_lighthouse.py (CLI)"]
    B --> C["LighthouseScannerJob.scan_country()"]
    C --> D["Filter out recently-scanned URLs\n(_get_recently_scanned_urls)"]
    D --> E["LighthouseScanner.scan_urls_batch()\n(asyncio.Semaphore โ€” up to 3 concurrent)"]
    E --> F["For each URL (parallel)"]
    F --> G["subprocess: lighthouse URL --output=json\n--only-categories=performance,accessibility,\nbest-practices,seo --throttling-method=provided"]
    G --> H["_parse_lighthouse_output() โ†’ 4 category scores"]
    H --> I["Save to url_lighthouse_results table\n(incremental, per URL)"]
    I --> J["Write *_lighthouse.toon output file"]