WCAG AA Colour Contrast Audit

Thom Vaughan & Pedro Ortiz Suarez

Static analysis of colour contrast compliance across 240 of the web's most-crawled domains, using only inline and embedded CSS from archived homepage captures. The full paper has further details, and the code is available on GitHub.

Data source: the February 2026 crawl archive (CC-MAIN-2026-08) from Common Crawl.

Abstract visualisation of colour contrast
Domains analysed
of 428 with captures
240 domains analysed out of 428 with captures
Mean pass rate
normal text (4.5:1)
59.8% mean pass rate for normal text at 4.5 to 1 contrast ratio
Mean pass rate
large text (3.0:1)
69.7% mean pass rate for large text at 3.0 to 1 contrast ratio
Fully compliant
100% pass rate
20.4% of domains are fully compliant with a 100% pass rate

Four in ten colour pairings fall below WCAG contrast thresholds

Results above describe only domains where inline or embedded CSS declared at least one foreground or background colour pairing. Sites styled entirely via external stylesheets are excluded from pairing analysis.

Across the 240 domains where colour pairings were extractable, the median pass rate for normal text contrast is 62.7%. Roughly one in five sites (20.4%) achieve full compliance, whilst over a quarter (26.2%) fail more than half their pairings.

The large text threshold is more forgiving: the median jumps to 74.0%. This gap matters because much of the web's low-contrast text appears in smaller UI elements like navigation, footers, and form labels.

Of the 4,327 unique colour pairings extracted, 1,771 (40.9%) fail the 4.5:1 normal text threshold. Many failures cluster around ratios of 1.0:1, caused by white-on-white or black-on-black from assumed default backgrounds.

Data coverage

240 with extractable colour pairings (56%) 188 no pairings found (44%)

Sites with no pairings typically rely entirely on external stylesheets or JavaScript-injected styles, which this static analysis cannot capture.

Light through layered glass

Pass rate distribution

Number of domains in each pass rate bucket for normal text (4.5:1 threshold). The largest group sits in the 50–75% range.

Cumulative view

Normal vs. large text thresholds

59.8%
mean pass rate
62.7%
median pass rate
69.7%
mean pass rate
74.0%
median pass rate

Mean pass rate by category

Excluding “Other”. Hosting/platform sites perform worst; education and e-commerce fare best.


Domains were classified by TLD pattern matching (e.g. .edu and .ac.uk for Education, .gov and .gouv.fr for Government) and a manually curated list of known domains for the remaining categories; domains that matched none of these rules were placed in "Other", which accounts for the majority of the sample.

Category breakdown

A grid of colours
Pass rate statistics by domain category, sorted by average pass rate descending.
Category n Avg % Median % 100% < 50%

Fully compliant sites

49 sites achieved a 100% pass rate across all detected pairings. The 15 with the most pairings tested are shown here (more pairings = more confident result).

Notable failures

Sites with genuine contrast problems (excluding assumed-default artefacts like white-on-white). Shown with actual colour swatches.

Paint swatches in earth tones

A note on methodology

This audit examines only inline style attributes and embedded <style> blocks found in archived homepage captures. It does not fetch external stylesheets, execute JavaScript, or render the page in a browser. As a result, the analysis captures a subset of each site's true colour landscape: the pairings that are declaratively present in the HTML document itself.

Where a foreground colour is declared without a corresponding background (or vice versa), the audit assumes the CSS default: white (#fff) for backgrounds, black (#000) for text. This produces a number of 1.0:1 ratio artefacts (white-on-white, black-on-black) that are not real visual failures but limitations of static analysis without rendering context.

Many 0% pass rate sites in the raw data have only a single pairing at 1.0:1. The “notable failures” section filters these out, showing only sites whose worst pairings have ratios that suggest genuine contrast problems rather than default-assumption artefacts.

Pairings where both foreground and background colours are explicitly declared should be interpreted as higher-confidence findings.

Sites that rely entirely on external stylesheets, CSS frameworks loaded via <link>, or JavaScript-driven rendering (such as single-page applications) will appear in the “no pairings found” category. This accounts for 188 of the 428 domains with captures, meaning the 240 analysed domains skew towards sites that use at least some inline or embedded styling.

All captures were drawn from the CC-MAIN-2026-08 crawl. Where multiple captures of the same registered domain existed, the audit preferred the www subdomain or bare domain over deeper subdomains, and HTTPS over HTTP.