Vägskylt med en pil som pekar åt vänster och symboliserar riktning eller val.

Bildbeskrivning: Vägskylt med en pil som pekar åt vänster och symboliserar riktning eller val.

Tillgängliga felmeddelanden

Tillgänglighetsteknik

Tillgängliga felmeddelanden: Den fullständiga guiden

Varje formulärfält du skapar, varje validering du aktiverar, varje felmeddelande du visar – det är i dessa ögonblick som digitala produkter antingen inkluderar eller exkluderar miljontals människor. Så här gör du för att få allt rätt.

Läsningstid: 18 minuter WCAG 2.2 AA Redaktionen på AIOPSGROUP

De dolda kostnaderna för meningslösa fel

Du har säkert stött på det: ett formulär som visar meddelandet ”Ogiltig inmatning” efter att du noggrant har skrivit in ditt telefonnummer. En kassa där ett fält markeras med rött utan någon förklaring. Ett felmeddelande med kryptiska koder som bara förstås av den utvecklare som skrev det klockan 23 på en fredagskväll.

Det här är inte bara små irritationsmoment i användarupplevelsen. För de 1,3 miljarder människor världen över som lever med någon form av funktionsnedsättning kan dåligt utformade felmeddelanden göra en digital produkt helt oanvändbar. För användare av skärmläsare är ett felmeddelande som bara byter färg osynligt. För användare med kognitiva funktionsnedsättningar kan en vag enradare som ”Något gick fel” vara förlamande. För någon som är beroende av röststyrning kan ett formulärfel som plötsligt tar fokus bryta hela arbetsflödet.

95,9 % av testerna av hemsidor uppfyller inte minst ett WCAG-kriterium (WebAIM 2024)
1 av 4 av vuxna i USA lever med en funktionsnedsättning som påverkar den digitala tillgängligheten
Över 13 miljarder dollar förloras årligen världen över på grund av otillgängliga webbplatser (Web Standards Commission)

Tillgängliga felmeddelanden handlar inte om att lägga till ARIA-attribut i efterhand. De kräver ett genomtänkt språk, en lämplig DOM-struktur, visuella och icke-visuella signaler samt en djup respekt för mångfalden bland dina användare. Den här guiden går igenom alla aspekter av hur man får till det rätt – från WCAG-kriterier och principer för textförfattande till praktiska kodmönster.

Denna artikels omfattning

Vi fokuserar på valideringsfel på klientsidan och serversidan i webbgränssnitt, även om de flesta principerna gäller i lika hög grad för mobilappar, kioskterminaler och röstgränssnitt. Om inget annat anges hänvisar vi till WCAG 2.2 AA.


Vad standarden faktiskt kräver

WCAG 2.2, som publicerades i oktober 2023, är den nuvarande standarden för webbtillgänglighet och utgångspunkten för de flesta rättsliga ramverk – däribland EU:s direktiv om webbtillgänglighet, den brittiska lagen om jämlikhet (Equality Act) och den amerikanska lagen ADA. Flera av framgångskriterierna gäller direkt för felmeddelanden. Det är viktigt att förstå bokstaven i varje kriterium innan man kan gå vidare och tillämpa dem i praktiken.

WCAG 2.2:s framgångskriterier som är relevanta för felmeddelanden
Kriterium Nivå Vad som krävs För felmeddelanden
1.3.1 Information och relationer A Förmedla struktur och samband genom semantik, inte bara genom utformningen. Ett felmeddelande som endast visas med hjälp av färg fungerar inte. Sambandet mellan ett fält och dess fel måste kunna fastställas programmatiskt – använd <label>, aria-invalid="true", och aria-describedby för att koppla feltexten till inmatningen.
1.4.1 Användning av färg A Använd inte färg som det enda visuella sättet att förmedla information. Röda kantlinjer räcker inte. Lägg till en ikon, en textetikett eller ett mönster.
1.4.3 Kontrast (minimivärde) AA Texten måste ha ett kontrastförhållande på minst 4,5:1 (3:1 för stor text). Feltexten i ljusrött (#f87171) på vit bakgrund uppnår endast ~2,93:1 – långt under det erforderliga värdet på 4,5:1. Använd mörkare nyanser: #b91c1c på vit bakgrund ger ~7,1:1 och klarar testet utan problem.
2.4.3 Fokusordning A Ordningen måste bevara betydelsen och funktionaliteten. Om fokus hanteras felaktigt efter ett misslyckat inlämningsförsök kan det bryta den logiska sekvensen (t.ex. om fokus hamnar efter felmeddelandet, vilket gör det oåtkomligt). Att flytta fokus till en felöversikt vid misslyckad inlämning är en rekommenderad teknik – främst för att uppfylla SC 3.3.1 och 3.3.2 – som dessutom säkerställer en sammanhängande fokusordning enligt 2.4.3.
3.3.1 Felidentifiering A Om ett inmatningsfel upptäcks identifieras posten och felet beskrivs i text. Felet måste beskrivas i text – det räcker inte med en visuell markering.
3.3.2 Etiketter eller anvisningar A Ange etiketter eller instruktioner när innehållet kräver att användaren gör en inmatning. Formateringsanvisningar (t.ex. ”DD/MM/ÅÅÅÅ”) måste finnas med redan vid inlämningen, inte bara när ett fel uppstår.
3.3.3 Förslag på fel AA Om ett fel upptäcks och det finns kända lösningsförslag, ange dessa. ”Ogiltigt datum” är otillräckligt. ”Ange ett datum i formatet DD/MM/ÅÅÅÅ, t.ex. 23/03/2026” är korrekt.
3.3.4 Förebyggande av fel AA För juridiska, ekonomiska eller datarelaterade inlämningar: granska, bekräfta eller återkalla. Låt användarna granska och korrigera innan den slutgiltiga inlämningen.
4.1.3 Statusmeddelanden AA Statusmeddelanden kan fastställas programmatiskt utifrån roll eller egenskap utan att fönstret får fokus. Användning role="alert", role="status", eller aria-live så att AT-användarna får meddelandet.

Vad kännetecknar ett bra felmeddelande?

Ett välformulerat felmeddelande består av fyra komponenter som är absolut nödvändiga. Var och en av dem fyller ett specifikt syfte – tar du bort någon av dem försämras upplevelsen för en del av dina användare.

Felmeddelande med förklaring
Felikon (visuell redundans) En ikon bredvid den röda ramen säkerställer att felet uppfattas utan att man förlitar sig enbart på färgen. Uppfyller 1.4.1. Ikonen måste vara aria-hidden om texten redan förmedlar innebörden.
Felmarkering runt fältet En röd kantlinje (≥2px) kopplar visuellt meddelandet till inmatningsfältet. I kombination med aria-invalid=”true” på inmatningsfältet uppfyller detta 1.3.1.
Beskrivande felmeddelande (tillgängligt språk) Meddelandet förklarar vad som är fel och hur man åtgärdar det. ”Ange en fullständig e-postadress” + ”till exempel [email protected]” uppfyller 3.3.1 och 3.3.3.
Programmatisk koppling (aria-describedby) aria-describedby kopplar feltexten till fältet. När en användare av en skärmläsare fokuserar på inmatningsfältet hör de etiketten + felbeskrivningen. Krävs för 1.3.1 och 4.1.3.

Språkramverket: Sex regler för felkopiering

Felmeddelanden är en form av UX-text. De är inte loggutskrifter. De är inte anteckningar för utvecklare. De är mänsklig kommunikation i en stressad situation – skrivna för någon som just har misslyckats med något och behöver lyckas.

🎯

1. Var konkret

Berätta för användaren exakt vad som är fel. ”Ogiltigt” säger ingenting. ”Lösenordet måste bestå av minst 8 tecken” säger allt.

🔧

2. Var konkret

Meddelandet bör antingen antyda eller direkt ange hur felet ska åtgärdas. Ange formatexempel om formatet inte är självklart.

🚫

3. Undvik att skylla på andra

Säg aldrig ”du angav”, ”din inmatning” eller ”du misslyckades”. Använd hellre passiva konstruktioner: ”Den angivna e-postadressen är ofullständig.”

🧩

4. Använd ett enkelt språk

Skriv på en läsnivå som motsvarar en 11-åring. Undvik jargong, tekniska uttryck och passivt-aggressiva formuleringar som ”försök igen”.

5. Välj rätt tidpunkt

Visa felmeddelanden direkt när användaren lämnar fältet, inte vid varje tangenttryckning. Visa sammanfattande felmeddelanden först efter att användaren har försökt skicka in formuläret.

🌐

6. Ta hänsyn till sammanhanget

Ett fel i betalningsformuläret kräver mer tröst än ett sökfilter. Anpassa tonen och detaljnivån efter hur viktig uppgiften är.


Verkliga felmeddelanden: före och efter

Skillnaden mellan ett svårbegripligt och ett begripligt felmeddelande är ofta bara några ord och två attribut. Dessa jämförelser visar exakt vad som förändras – och varför varje förändring är viktig.

Validering av obligatoriska fält

✕ Otillgänglig
Detta fält är obligatoriskt.

Problem: Identifierar inte vilket fält. Utför ingen åtgärd. Visas ofta endast med färgförändring (uppfyller inte 1.4.1). Nej role="alert" vilket innebär att skärmläsare inte läser upp det.

✓ Tillgängligt
Ange ditt födelsedatum. Detta fält måste fyllas i för att vi ska kunna bekräfta att du uppfyller kraven.

Varför det fungerar: Anger fältets namn. Förklarar varför det behövs. Kopplat till inmatningsfältet via aria-describedby. Textkontrast ≥ 4,5:1. Skärmläsare läser upp detta vid inlämning via role="alert".

Formatvalidering (datum)

✕ Otillgänglig
Ogiltigt datumformat.

Problem: Användaren vet inte vilket format som förväntas. Det anges vad som är fel, men inte hur man åtgärdar det. Uppfyller inte 3.3.3 (Felmeddelande). Inget exempel anges.

✓ Tillgängligt
Ange datumet i formatet DD/MM/ÅÅÅÅ. Exempel: 23/03/2026

Varför det fungerar: Anger vilket format som krävs. Ger ett konkret exempel (uppfyller 3.3.3). Kortfattat och tydligt. Läses upp av skärmläsare direkt när fokus flyttas från fältet.

Lösenordsverifiering

✕ Otillgänglig
Lösenordet är för svagt.

Problem: ”Svag” är ett subjektivt begrepp och ger ingen tydlig väg framåt. Visas vanligtvis med en röd styrkebalk – vilket endast är visuell feedback (uppfyller inte 1.4.1). Det finns inget samband mellan balkens status och AT-utmatningen.

✓ Tillgängligt
Lösenordet måste bestå av minst 8 tecken och innehålla minst en versal och en siffra.

Varför det fungerar: Varje krav anges separat. Användarna kan gå igenom och åtgärda varje brist. Styrkeindikatorn kompletterar texten och använder både färg OCH textetiketter (”Svag / Stark”). Ingen information förmedlas enbart genom färg.

Server-/systemfel

✕ Otillgänglig
Fel 500. Något gick fel.

Problem: Den tekniska koden är obegriplig för de flesta användare. Meddelandet ”Något gick fel” ger ingen vägledning om vad man ska göra. Inlagd i DOM utan interaktivt område – ger ingen feedback till skärmläsare. Inget förslag på hur man kan åtgärda problemet.

✓ Tillgängligt
Vi kunde inte spara dina ändringar. Försök igen, eller kontakta supporten om problemet kvarstår.

Varför det fungerar: Mänskligt språk. Bekräftar vad som gick fel. Ger två tydliga lösningar. Införs i en aria-live="assertive" området så att skärmläsare läser upp det direkt. Fokus flyttas till meddelandet.

Det bästa felmeddelandet är det som förhindrar att felet uppstår från första början. Det näst bästa felmeddelandet är det som gör det uppenbart hur man åtgärdar felet.


Felkoder och när man ska använda dem

Olika felsituationer kräver olika interaktionsmönster. Att välja fel behållare eller meddelandemekanism är ett av de vanligaste tillgänglighetsproblemen i formulär.

Jämförelse av felmönster
Mönster Bäst för Implementering av ARIA Fokusbeteende Obligatoriskt
Fel i ett fält i texten Omedelbar validering på fältnivå (vid fokusförskjutning) aria-invalid="true" + aria-describedby Ingen fokusförflyttning. Ett fel hörs vid nästa fokusering av fältet. Obligatoriskt
Banner med felöversikt Fel vid inlämning av formulär med flera fält role="alert" eller aria-live="assertive" Flytta fokus till rubriken ”Sammanfattning” vid inlämning. Krävs för formulär med fler än tre fält
Meddelande från Toast/snackbaren Fel som inte beror på formuläret (sparningen misslyckades, nätverksproblem) role="alert" eller aria-live="assertive" Flytta INTE fokus. Stäng automatiskt efter ≥5 sekunder (eller aldrig). Rekommenderas
Fel i modaldialogrutan Bekräftelse av skadliga åtgärder, kritiska fel role="dialog" + aria-modal="true" + aria-labelledby Flytta fokus till det första interaktiva elementet i dialogrutan. Vid allvarliga/oåterkalleliga fel
Varningsområde på sidnivå Serverfel uppstod efter att sidan laddats om role="alert" at top of <main> Bör vara det första elementet som går att fokusera på efter hoppa-över-länken. Måste laddas om den finns
Vänligt meddelande om status Feedback med låg prioritet (sparas automatiskt, valfritt fält hoppas över) aria-live="polite" + role="status" Ingen fokusförflyttning. Meddelas när det aktuella talet är avslutat. Valfritt / beroende på sammanhanget

Tvåskiktsmetoden för formulär med flera fält

För formulär med tre eller fler fält räcker det inte med ett enda visningssätt. Både Government Digital Service (GDS) och ARIA Authoring Practices Guide rekommenderar ett system med två nivåer: en felöversikt högst upp i formuläret samt felmeddelanden direkt bredvid varje berört fält.

Tvåskiktsmönster: Så här fungerar det

Vid inlämning med fel: (1) Infoga en sammanfattning av felen högst upp i formuläret med en rubrik som ”Det finns 3 fel. Rätta till dessa för att fortsätta.” samt länkar till varje fält som innehåller fel. (2) Flytta tangentbordsfokus till den här rubriken. (3) Varje länk i sammanfattningen hoppar till motsvarande fält. (4) Varje fält visar sitt eget inbyggda felmeddelande med en länk via aria-describedby. Användare av skärmläsare hör båda lagren; seende användare ser båda lagren. Ingen lämnas utanför.


Kodmönster som fungerar

Att förstå teorin är halva jobbet. Nedan följer produktionsklara mallar för de vanligaste scenarierna, med kommentarer om vilka WCAG-kriterier varje attribut uppfyller.

Validering av fält i realtid

HTML
<!-- The label is always present and always linked -->
<div class="field-group">
  <label for="email">
    Email address
    <span class="required-indicator" aria-label="required"> *</span>
  </label>

  <input
    type="email"
    id="email"
    name="email"
    autocomplete="email"
    aria-required="true"
    aria-invalid="true"     <!-- set when invalid -->
    aria-describedby="email-hint email-error"
  />

  <!-- Hint text always shown (WCAG 3.3.2) -->
  <p id="email-hint" class="field-hint">
    We'll send your confirmation here.
  </p>

  <!-- Error message (shown only on error) -->
  <p
    id="email-error"
    class="field-error"
    role="alert"
    aria-live="assertive"
  >
    <!-- inject error text here -->
    Enter a complete email address — for example, [email protected]
  </p>
</div>

Felöversikt (formulär med flera fält)

HTML
<!-- Inject this above the form on submission, then focus #error-summary -->
<div
  id="error-summary"
  role="alert"
  aria-labelledby="error-summary-title"
  tabindex="-1"   <!-- allows programmatic focus -->
  class="error-summary"
>
  <h2 id="error-summary-title">
    There are 2 errors. Fix these to continue.
  </h2>
  <ul>
    <li><a href="#email">Email address: enter a complete email</a></li>
    <li><a href="#dob">Date of birth: use DD/MM/YYYY format</a></li>
  </ul>
</div>

<!-- JavaScript: move focus to summary after injection -->
<script>
  const summary = document.getElementById('error-summary');
  summary.focus(); // fires after DOM update
</script>

Dynamiska fel/AJAX-fel (sidan laddas inte om)

När fel returneras asynkront – till exempel från ett API-anrop – kan man inte förlita sig på att de visas automatiskt när sidan laddas. Här är ARIA-mönstret för live-regioner avgörande.

JS
// Set up the live region once on page load (empty, hidden)
// <div id="live-error" role="alert" aria-live="assertive" aria-atomic="true"></div>

async function submitForm(data) {
  try {
    const res = await fetch('/api/save', { method: 'POST', body: data });
    if (!res.ok) throw new Error(await res.text());
    announceStatus('Your changes have been saved.', 'polite');
  } catch (err) {
    announceStatus(
      'We couldn\'t save your changes. Try again or contact support.',
      'assertive'
    );
  }
}

function announceStatus(message, urgency = 'polite') {
  const region = document.getElementById('live-error');
  region.setAttribute('aria-live', urgency);
  // Clear first to re-trigger announcement if same message
  region.textContent = '';
  requestAnimationFrame(() => {
    region.textContent = message;
  });
}
Tricket med att tömma och sedan fylla

Skärmläsare läser endast upp innehåll som ändringar i en aktiv region. Om du infogar samma felmeddelande två gånger i rad kommer vissa AT-enheter inte att läsa upp det igen. Lösningen: rensa regionen till en tom sträng och fyll sedan i den i en requestAnimationFrame återanrop. Detta tvingar fram den DOM-ändring som AT lyssnar efter.


Checklista för granskning av tillgänglighet

Använd denna checklista vid granskning av design, kodgranskning och kvalitetssäkring. Den täcker alla kriterier på nivå A och nivå AA i WCAG 2.2 som är relevanta för felmeddelanden.

Bild och innehåll

Bild och innehåll
  • Felmeddelanden ska förmedlas genom text, inte enbart genom färg (WCAG 1.4.1)
  • Feltexten har ett kontrastförhållande på minst 4,5:1 mot bakgrunden (WCAG 1.4.3)
  • En ikon eller en visuell markör kompletterar färgförändringen
  • Felmeddelandet nämner fältet eller ligger fysiskt intill det
  • Felmeddelandet förklarar vad som är fel (inte bara ”ogiltigt”)
  • Felmeddelandet innehåller information om hur felet åtgärdas (WCAG 3.3.3)
  • Det finns formatexempel för datum, telefonnummer, postnummer och liknande fält
  • Språket är enkelt, icke-tekniskt och undviker att lägga skulden på någon
  • Felmeddelandet försvinner inte förrän felet har åtgärdats
  • Formateringsanvisningar (t.ex. ”DD/MM/ÅÅÅÅ”) visas innan inlämning, inte bara vid fel

Programmatisk annonsering och hjälpmedel

Programvara och hjälpmedel
  • aria-invalid="true" är inställd på den felaktiga inmatningen
  • Felmeddelandet är länkat via aria-describedby vid ingången
  • Användningsområden för felbehållare role="alert" eller aria-live="assertive"
  • Felområdet är inte tomt i DOM innan några fel finns (förifylld tom behållare)
  • En felöversikt infogas och lyfts fram automatiskt vid misslyckad formulärinlämning
  • Länkarna i felöversikten leder till motsvarande formulärfält
  • Testningen med skärmläsare har godkänts i NVDA/Firefox och VoiceOver/Safari
  • Sidans titel uppdateras för att visa felstatus vid inlämning av helsidesformulär
  • Användning av statusmeddelanden role="status" med aria-live="polite" för icke-kritisk feedback

Fokus och tangentbord

Fokushantering och tangentbord
  • Fokus flyttas till felöversikten (eller fältet för det första felet) efter att inlämningen misslyckats
  • Fokusindikatorn är tydligt synlig på alla interaktiva element som befinner sig i ett felstillstånd (WCAG 2.4.11)
  • Modala felrutor låser fokus inom rutan
  • När man avbryter ett fel (t.ex. genom att stänga ett popup-fönster) återgår fokus till en logisk position
  • Ingen felhantering kräver en pekdon
  • Timeout-fel ger tillräcklig varning och tid för att förlänga sessionen (WCAG 2.2.1)
Mer än bara efterlevnad: AAA-mål

WCAG 3.3.6 (Felförebyggande – Alla) kräver att användarna ska kunna granska, bekräfta och ångra alla inlämningar – inte bara ekonomiska sådana. Även om detta är en AAA-krav och inte lagstadgat i de flesta sammanhang, minskar det avsevärt den stress som fel kan orsaka hos användare med kognitiva funktionsnedsättningar. Betrakta det som en guldstandard som är värd att eftersträva.


Hur vi hamnade här: En kort tidslinje

1999
WCAG 1.0 publiceras Riktlinjerna för tillgänglighet till webbinnehåll (WCAG) lanseras. Tillgängligheten för feedback i formulär behandlas i allmänna termer under kontrollpunkterna för prioritet 2. Det finns inga specifika kriterier för felmeddelanden.
2008
WCAG 2.0 – formaliserade felkriterier Framgångskriterierna 3.3.1–3.3.4 införs. För första gången kräver standarderna uttryckligen textbaserad felidentifiering och förslag på rättelse. Överensstämmelse med nivå AA blir den rättsliga referensnivån.
2018
WCAG 2.1 – fokus på kognitiva och mobilabehov Nya kriterier förbättrar stödet för användare med kognitivafunktionsnedsättningar. SC 1.3.5 (Identifiera syftet med inmatningen) kräver automatisk komplettering i fält för personuppgifter, vilket minskar felprocenten redan vid inmatningen.
2019
ARIA 1.1 — stabiliserade live-regioner ARIA-metoderna för webbutveckling formaliseras role="alert" och aria-live mönster. Nu är det äntligen möjligt att uppnå enhetligt stöd i webbläsare och hjälpmedel för dynamiska felmeddelanden.
2021
Tillämpningen av EU:s direktiv om webbtillgänglighet Webbplatser inom den offentliga sektorn i EU:s medlemsstater måste uppfylla kraven i WCAG 2.1 AA. Felmeddelanden blir ett huvudsakligt granskningsområde för nationella tillsynsmyndigheter.
2023
WCAG 2.2 – förbättringar avseende fokus och kognitivbelastning Kriterium 2.4.11 (Fokusmarkering) skärper kraven på fokusmarkeringar för interaktiva element – inklusive fält i felstatus. Kriterium 3.3.7 (Redundant inmatning) minskar den kognitiva belastningen i formulär med flera steg.
2026
Den europeiska tillgänglighetslagen (EAA) träder i kraft Produkter och tjänster inom den privata sektorn måste uppfylla kraven i EN 301 549 (som hänvisar till WCAG 2.1 AA). E-handel, bankverksamhet, transport och e-böcker omfattas alla av lagen. Tillgängliga felmeddelanden är nu ett lagkrav för de flesta kommersiella webbapplikationer i Europa.

Felmeddelanden som en spegel av produktens värden

Felmeddelandet är ett av de mest avslöjande ögonblicken i varje digital upplevelse. Det dyker upp just när användaren befinner sig i en stressad situation – när hen har gjort ett misstag eller när något utanför hens kontroll har gått fel. Hur du agerar i det ögonblicket säger allt om hur seriöst du tar inkludering.

En röd ram utan text är inte ett felmeddelande. En kodutskrift är inte ett felmeddelande. Ett vagt ”något gick fel” är inte ett felmeddelande. Ett tillgängligt felmeddelande är ett tydligt, vänligt och konkret meddelande som fungerar för alla – inklusive de 26 % av användarna som har någon form av funktionsnedsättning, de 15 % som förlitar sig på tangentbordsnavigering och de 100 % av användarna som någon gång kommer att stöta på ett fel.

Tillgänglighet är inte en funktion. Det är ett kvalitetskännetecken för varje funktion ni lanserar – och det är i felmeddelandena som denna kvalitet sätts på prov under de tuffaste förhållandena.

Den goda nyheten är att det kräver mycket lite extra arbete att skapa tillgängliga felmeddelanden om man tar hänsyn till detta redan från början. ARIA-attributen är få. Riktlinjerna för texterna är tydliga. Mönstren är väl etablerade. Det som krävs är en medveten vilja – ett medvetet beslut att testa med hjälpmedel, att skriva för människor istället för system och att se varje fel som en möjlighet att vinna förtroende.

AIOPSGROUP, ett företag inom valantic-koncernen, utvecklar vi digitala produkter som fungerar för alla. Tillgänglighetsarbete är en integrerad del av vårt designsystem, våra kodgranskningar och vår kvalitetssäkringsprocess – det är inte något som läggs till i efterhand. Om ditt team behöver hjälp med att granska, implementera eller bygga upp ett tillgängligt designsystem från grunden, står vi gärna till tjänst.