European Accessibility Act
EAA compliance for SvelteKit: WCAG 2.1 AA checklist & fixes
Svelte's compiler emits warnings for accessibility issues at build time — missing alt, click-on-non-interactive, and so on — which catches a surprising amount before the code ships. SvelteKit-specific risks live in route transitions and the use:action pattern when authors disable accessibility warnings. Popular among small teams shipping fast, accessible-by-default apps.
- Category
- Web framework
- 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 SvelteKit site
Svelte's compiler emits accessibility warnings at build time (missing alt, click-on-non-interactive, missing labels, bad ARIA), so under the EAA the obligation partly depends on not silencing those warnings with svelte-ignore. EN 301 549 conformance additionally forces you to announce goto()-driven route changes through a live region, since SvelteKit navigations are silent to assistive tech, and to verify that interactive components are functional through the hydration window. Because SvelteKit server-renders semantic HTML, an auditor sees an accessible base, so the requirement centres on route announcements and post-hydration behaviour.
SvelteKit is favoured by small, fast-moving teams that value shipping accessible-by-default apps, so in-scope SvelteKit sites are typically startup or small-business consumer services facing fixed national fines rather than large-operator turnover penalties. The compiler's build-time warnings mean these teams often ship a cleaner accessibility baseline than equivalent React SPAs, lowering their practical risk. The main exposure is a team that has globally disabled the compiler warnings or leaned on svelte-ignore, which quietly removes the platform's built-in safety net.
Remediation is handled by the developer in the codebase: add a polite live region in the root layout that announces navigation via the afterNavigate hook, and resolve rather than suppress each compiler a11y warning. Keep the Svelte compiler warnings on globally and add eslint-plugin-svelte, then test the SSR output against client hydration to catch flashes for screen readers. Because the compiler surfaces many issues at build time, remediation is usually incremental and low-cost for a SvelteKit-comfortable team.
Top WCAG failures we see on SvelteKit sites
Across hundreds of SvelteKit 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.
Route changes silent to assistive tech
goto() does not announce; add a live region.
4.1.3 — Level AA<!-- svelte-ignore --> abuse
Compiler warnings ignored without addressing the underlying issue.
all
Concrete code fixes for SvelteKit
Below are copy-paste fixes for the most common SvelteKit 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.
Announce route changes from a layout
<script lang="ts">
import { afterNavigate } from '$app/navigation';
import { tick } from 'svelte';
let routeMessage = '';
afterNavigate(async ({ to }) => {
await tick();
const title = document.title;
routeMessage = `Navigated to ${title}`;
});
</script>
<div role="status" aria-live="polite" class="sr-only">{routeMessage}</div>
<slot />A polite live region announces every navigation without stealing focus.
Tools and plugins worth installing first
Svelte compiler a11y warnings (do not disable globally)
eslint-plugin-svelte
How to scan a SvelteKit 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.
Test SSR output against client-side hydration; differences create flashes for screen readers.
Run a free public scan against any SvelteKit URL right now — no signup, results in 60 seconds.
Frequently asked questions
Does the Svelte compiler catch all accessibility issues?
No — the Svelte compiler's built-in accessibility warnings catch a useful subset of issues: missing alt text, click events on non-interactive elements, missing form labels, and incorrect ARIA usage. It does not catch contrast ratios, focus management issues, or keyboard interaction patterns in complex components. Use it as a first line of defence alongside a site-level automated scan.
Is SvelteKit's SSR output accessible before JavaScript loads?
Yes — SvelteKit's SSR output delivers fully-rendered HTML with semantic markup. The risk is that interactive components may show in a non-functional state during the hydration window, and live-region announcements only work after the Svelte runtime has initialised. Test with JavaScript disabled to verify the base experience is readable and navigable.
Other web framework platforms
EAA compliance for Next.js
The dominant React meta-framework for production sites; chosen by Stripe, Notion, TikTok,
EAA compliance for React
The most-used UI library; the foundation of Next.js, Remix, and most modern SPAs.
EAA compliance for Vue.js
Top 3 frontend framework; common in SMB and education sites across Europe.
EAA compliance for Angular
Enterprise default in many EU public-sector portals; subject to EAA and EN 301 549.
All EAA platform guides
Shopify, WordPress, Next.js, Webflow and more
Complete WCAG 2.1 guide
POUR principles, conformance levels, legal requirements
How-to fix recipes
Copy-paste fixes for the most common WCAG failures
Find every accessibility issue on your site in 60 seconds.
Free public scan. No card. AI-generated fixes for every issue we find.