European Accessibility Act

EAA compliance for Ghost: WCAG 2.1 AA checklist & fixes

Ghost focuses on publishing, which means the content surface — articles, newsletters, member areas — is where accessibility lives or dies. The default theme (Source) is in good shape; risk lives in third-party themes and the embedded member portal popup, which was historically a focus-trap offender. A focused publishing CMS used by independent newsletters and media brands.

Category
Content management system
Standard
WCAG 2.1 Level AA via EN 301 549
Deadline
28 June 2025 (EU consumer services)
Risk for B2C
High — public-facing, consumer-billed

What the EAA actually requires from a Ghost site

The European Accessibility Act (Directive 2019/882) applies to consumer-facing online services from 28 June 2025. For a Ghost site selling to EU consumers, that means the storefront, checkout, account area, and any embedded payment flow have to meet WCAG 2.1 Level AA via the harmonised standard EN 301 549. Microenterprises with under 10 employees and below €2 million in turnover are exempt for services, but not for products.

Fines vary by member state. Germany caps individual penalties at €100,000; France can fine up to 4% of group turnover; Spain reaches €600,000 for serious or repeated breaches. None of those numbers are theoretical — market surveillance authorities have already started auditing storefronts in Germany and France in the run-up to enforcement.

In practice, the work breaks down into three buckets: theme-level fixes (focus styles, contrast, semantics), interaction-level fixes (carousels, modals, drawers, gallery widgets), and content-level fixes (alt text, headings, descriptive link text). The list below covers the Ghost-specific failure points we see most often during scans.

Top WCAG failures we see on Ghost sites

Across hundreds of Ghost scans, the same handful of issues show up over and over. None of them require ripping the theme apart — most are fixable in a few hours by someone comfortable in the platform's editor or template files.

  • Members portal popup focus management

    Older versions trapped focus and lacked Esc to close.

    2.1.2, 2.4.3 — Level A
  • Custom theme heading hierarchy

    Themes that use H1 for the article title and H2 for the site title break document outline.

    1.3.1, 2.4.6 — Level A/AA

Concrete code fixes for Ghost

Below are copy-paste fixes for the most common Ghost issues. They assume you have access to your theme code or the platform's custom-code injection panel. If you cannot edit code directly, share these snippets with whoever maintains the site — every one of them is a ten-minute change.

Override the members popup overlay container with a focus trap library

TypeScript
// Drop into your code injection, footer
import { createFocusTrap } from 'focus-trap';
document.addEventListener('click', (e) => {
  if ((e.target as HTMLElement).matches('[data-portal]')) {
    setTimeout(() => {
      const dialog = document.querySelector('iframe[src*="portal"]');
      if (dialog) createFocusTrap(dialog as HTMLElement).activate();
    }, 200);
  }
});

Until Ghost ships native focus management, layer a focus-trap on the iframe to keep keyboard users inside the popup.

Tools and plugins worth installing first

  • Ghost's Source theme as a baseline

  • Code injection panel for site-wide tweaks

How to scan a Ghost site without missing anything

Automated scanners catch about 30–40% of WCAG issues; the rest need manual review. The good news is that the 30–40% includes the most expensive issues to remediate after the fact, so an automated scan is the cheapest way to get unstuck. Run one before you change a line of theme code.

  • Audit a sample article, a member-only article, and the /portal flow.

Run a free public scan against any Ghost URL right now — no signup, results in 60 seconds.

Other content management system platforms

Find every accessibility issue on your site in 60 seconds.

Free public scan. No card. AI-generated fixes for every issue we find.