Tilgængelighed på Magento: typiske WCAG-fejl og hvem der retter dem
Opdateret 10. september 2026
Magento Open Source og Adobe Commerce bruges af større shops med egne udviklere eller et bureau. Fejlene sidder i temaet, i tredjepartsmoduler og i det JavaScript-tunge checkout, og de gentages på tværs af tusindvis af produktsider.
Hvad loven kræver
Sælger shoppen til private forbrugere i Danmark, er den en e-handelstjeneste efter tilgængelighedsloven (LOV nr. 801/2022), som har været i kraft siden 28. juni 2025. Kravet er WCAG 2.1 AA via EN 301 549, en offentliggjort tilgængelighedserklæring og dokumentation, som Sikkerhedsstyrelsen kan bede om at se. Mikrovirksomheder (under 10 årsværk og under 2 mio. EUR i omsætning eller balance) er undtaget. Shops på Magento ligger typisk langt over mikrovirksomhedsgrænsen og er omfattet. Da alt kan tilpasses, er der ingen platformleverandør at pege på: tema, moduler og checkout er jeres udviklers eller bureauets ansvar.
Det finder vi typisk på Magento
Temaer baseret på Luma arver en række kendte fejl: ikonknapper uden navn i header og minikurv, ARIA-attributter, der ikke passer til elementets rolle, og widgets, der gentager samme id på tværs af produktlister. Tredjepartsmoduler til lagfiltrering, mega-menu, anmeldelser og hurtig-kurv tilføjer egen markup, ofte med felter uden etiket. Checkout er bygget i Knockout.js, og moduler, der tilføjer trin eller felter, mister tit label-koblingen. Produktbilleder uden alt-tekst kommer fra PIM eller import, hvor alt-feltet er tomt eller sat til filnavnet. Kontrastfejl sidder i temaets Less/CSS, ikke i indstillinger, og kan kun rettes af en udvikler.
På Magento kommer fundene typisk fra Luma-baserede temaer, tredjepartsmoduler og checkout, og de gentages på tusindvis af sider.
image-alt1.1.1 Ikke-tekstbaseret indhold · ABilleder uden alt-attribut har intet tekstalternativ. Skærmlæserbrugere hører enten filnavnet (fx 'IMG_2043.jpg') eller ingenting og går glip af indholdet — fx et produktbillede, et kampagnebanner eller et betalingskort-ikon.
Giv alle <img> en alt-attribut. Beskriv billedets indhold eller funktion i én kort sætning (uden 'billede af'). Er billedet rent dekorativt (rammer, skygger, spacer-gifs), så brug tom alt="" — så springer skærmlæseren det over. Et billede i et link skal beskrive linkets mål, ikke billedet. I webshops: produktbilleder bør nævne produktnavn og variant ('Sort uldfrakke, model Nora, set forfra'), og logoer bør have firmanavnet som alt.
Før
<img src="/img/frakke-nora-sort.jpg">Efter
<img src="/img/frakke-nora-sort.jpg" alt="Sort uldfrakke, model Nora, set forfra"> <img src="/img/border.gif" alt="">color-contrast1.4.3 Kontrast (minimum) · AATekstens kontrast mod baggrunden er under 4,5:1 (3:1 for stor tekst ≥ 18 pt eller ≥ 14 pt fed). Brugere med nedsat syn eller farvesynsdefekt — og alle på en mobil i sollys — kan ikke læse teksten. Rammer typisk lysegrå hjælpetekst, placeholder-tekst, priser på farvet baggrund og hvid tekst på pastelfarvede knapper.
Mørkn tekstfarven eller lysn baggrunden, til kontrasten er mindst 4,5:1 (3:1 for stor tekst). axe angiver den målte kontrast og de præcise farver i fejlbeskrivelsen. Ret farven i design-tokens/CSS-variabler frem for pr. element, så det slår igennem overalt. Tjek også hover-, fokus- og disabled-tilstande (disabled-tekst er undtaget, men bør stadig kunne læses).
Før
.hint { color: #9ca3af; background: #ffffff; } /* 2,5:1 */Efter
.hint { color: #4b5563; background: #ffffff; } /* 7,6:1 */button-name4.1.2 Navn, rolle, værdi · AKnappen har intet tilgængeligt navn. Skærmlæsere oplæser det tilgængelige navn (accessible name), når brugeren tabber til elementet. Uden navn hører brugeren blot elementtypen. Typisk ikon-knapper: luk (×), menu (burger), søg, +/− på antal og favorit-hjerter.
Tilføj synlig tekst i knappen, eller aria-label, der beskriver handlingen. Skjul rent dekorative ikoner med aria-hidden="true". Brug aldrig title alene som navn.
Før
<button class="close">×</button>Efter
<button class="close" aria-label="Luk"><span aria-hidden="true">×</span></button>label4.1.2 Navn, rolle, værdi · AFormularfeltet har ingen etiket (label). Skærmlæserbrugere hører 'redigér tekst' uden at vide, hvad de skal skrive — typisk søgefelter, nyhedsbrevsfelter, rabatkode og felter i checkout, hvor kun en placeholder er brugt.
Kobl en synlig <label> til feltet med for/id. Placeholder tæller ikke som etiket (den forsvinder ved indtastning og har ofte for lav kontrast). Kan der ikke være synlig tekst (fx søgefelt med ikon), så brug aria-label.
Før
<input type="email" placeholder="Din e-mail">Efter
<label for="nyhedsbrev-email">E-mail</label> <input id="nyhedsbrev-email" type="email" autocomplete="email">aria-allowed-attr4.1.2 Navn, rolle, værdi · AElementet bruger en ARIA-attribut, som ikke er tilladt for dets rolle (fx aria-checked på et almindeligt <div>, eller aria-expanded på et <input>). Skærmlæsere ignorerer den eller opfører sig uforudsigeligt.
Tjek attributten mod rollen i WAI-ARIA-specifikationen. Ofte er løsningen at give elementet den rigtige rolle (fx role="checkbox") eller at bruge det native HTML-element i stedet — <input type="checkbox"> understøtter alt uden ARIA.
Før
<div aria-checked="true">Husk mig</div>Efter
<label><input type="checkbox" checked> Husk mig</label>duplicate-id4.1.1 Parsing · ASamme id bruges på flere elementer. Koblinger via id (label for, aria-describedby, ankerlinks) rammer så det forkerte element.
Gør id'er unikke pr. side. Fejlen opstår typisk, når en komponent (produktkort, modal, formular) gentages med et fast id — generér id'et ud fra produkt-/komponent-id i stedet.
Før
<div id="product"><…></div> <div id="product"><…></div>Efter
<div id="product-1042"><…></div> <div id="product-1043"><…></div>
Sådan tilføjer I sitet i Nordally
- Base-URL: den store view, kunderne bruger, fx
https://www.dinbutik.dk. Har I flere store views på egne domæner, tilføjes de som separate sites. - Sitemap: Magento genererer ikke et sitemap, før det er sat op. I admin: Marketing → SEO & Search → Site Map → Add Sitemap, vælg filnavn (typisk
sitemap.xml) og sti (/), gem og generér. Adressen bliver såhttps://www.dinbutik.dk/sitemap.xml. - Automatisk opdatering: slå Generation Settings til under Stores → Configuration → Catalog → XML Sitemap, så filen genereres af cron, og nye produkter kommer med i næste scan.
- Uden sitemap: svarer adressen ikke, scanner Nordally kun forsiden. Det er sjældent nok på en Magento-shop med mange produkttyper, så generér sitemappet; det er indbygget og tager fem minutter.
- Nordally scanner kun offentlige sider. Kundegruppe-priser, B2B-kataloger og andet bag login dækkes af den manuelle gennemgang eller af CI-integrationen mod et testmiljø uden login.
Hvem retter hvad
| Fejl | Kan shopejeren rette selv? | Kræver udvikler/leverandør? |
|---|---|---|
| Alt-tekster på produktbilleder | Ja, på produktet i admin eller i PIM/importfilen | Nej |
| Kontrast i temaets farver | Nej | Udvikler (temaets Less/CSS) |
| Ikonknapper uden navn (header, minikurv, filtre) | Nej | Udvikler (temaets templates) |
| Felter uden etiket i checkout | Nej | Udvikler eller modul-leverandør |
| Ugyldige ARIA-attributter fra moduler | Nej | Modul-leverandør eller udvikler |
| Gentagne id'er i produktlister og widgets | Nej | Udvikler |
Hvad automatisk test ikke finder
Scanneren finder de strukturelle fejl, men ikke om lagfiltrene og checkout kan betjenes med tastatur alene, om fokus flyttes til fejlen, når et trin afvises, om alt-teksterne fra PIM faktisk beskriver produktet, eller om mega-menuen kan lukkes uden mus. Det går udviklerne igennem med tjeklisten i manuel gennemgang, og resultatet indgår i erklæringen.
Tjek én side af jeres Magento-shop nu
Indsæt en produktside eller en kategoriside med filtre, og se de automatisk målbare fund med selektor og dansk vejledning. Ingen konto, ingen installation. Tjek én side gratis.
Spørgsmål og svar
Kan vi bruge en tilgængeligheds-app i stedet for at rette Magento-shoppen?
Nej. En overlay-widget lægger et script oven på siden i kundens browser; temaet, produktkortene og checkout er uændrede, og det er dem, tilsynet og kunderne møder. Widgeten dokumenterer heller ikke noget over for Sikkerhedsstyrelsen. Ret fejlene i koden og indholdet, og brug eventuelt en widget som tilvalg for brugerindstillinger. Se overlay-widget eller scanner.
Vi er skiftet til Hyvä eller et andet moderne tema. Er fejlene så væk?
Færre, ikke væk. Moderne temaer starter med langt færre strukturelle fejl end Luma, men moduler, indhold og checkout-tilpasninger følger med. Scan efter skiftet, og brug resultatet som baseline i CI, så nye moduler ikke indfører fejlene igen.
Kan Nordally scanne vores B2B-shop bag login?
Nej, Nordally scanner kun offentlige sider fra sitemappet. Sider bag login tester I med den manuelle tjekliste, eller ved at køre scanneren i CI mod et testmiljø, hvor siderne er åbne. Erklæringen skal dække hele tjenesten, så beskriv, hvordan de lukkede dele er testet.
Kilder
Nordally hjælper med compliance og giver ikke juridisk rådgivning. Om jeres virksomhed er omfattet, og om jeres løsning er dækkende, er en vurdering, I selv eller en rådgiver må tage.