Tilgængelighed på Shopify: typiske WCAG-fejl og hvem der retter dem
Opdateret 10. september 2026
Shopify-shops deler samme tema-arkitektur og samme hostede checkout, så fejlene ligner hinanden fra shop til shop. Her er, hvad vi typisk finder, hvor sitemappet ligger, og hvad I selv kan rette i admin uden at røre Liquid-koden.
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. At shoppen kører på Shopify flytter ikke ansvaret: Shopify leverer platformen, men det er jer, der udbyder tjenesten over for kunden, og det er jeres tema, jeres apps og jeres indhold, der afgør, om kravene er opfyldt.
Det finder vi typisk på Shopify
Shopifys egen kerne er sjældent problemet. Fejlene sidder i temaet (Dawn-baseret eller købt i Theme Store og siden tilpasset i temaeditoren), i apps (anmeldelser, chat, størrelsesguide, mersalg), som indsætter deres egen markup og iframes på alle sider, og i indholdet: produktbilleder uden alt-tekst og farver valgt i temaeditoren uden hensyn til kontrast. Produktkort med variant-swatches, favoritknap og quick-add er de hyppigste kilder til knapper og links uden navn. Checkout hoster Shopify; på Basic, Shopify og Advanced kan I kun ændre logo, farver og skrifter, så strukturfejl dér er Shopifys, mens kontrastfejl er jeres.
På Shopify sidder de fleste fund i temaet, i apps og i produktdata, ikke i Shopifys egen kerne.
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 */link-name2.4.4 Formål med links (i kontekst) · A4.1.2 Navn, rolle, værdi · ALinket har ingen tilgængelig tekst. Skærmlæsere oplæser 'link' uden mål — brugeren ved ikke, hvor det fører hen. Typisk et link, der kun indeholder et ikon eller et billede uden alt, fx logo, kurv-ikon eller sociale medier-ikoner.
Giv linket en tekst: enten synlig tekst, alt på billedet inde i linket, eller aria-label på <a>. Teksten skal beskrive målet ('Gå til kurv', 'Nordally — forside'), ikke 'klik her'. Har linket ingen href, er det ikke et link — brug en <button>.
Før
<a href="/kurv"><svg>…</svg></a>Efter
<a href="/kurv" aria-label="Indkøbskurv, 2 varer"><svg aria-hidden="true">…</svg></a>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>select-name4.1.2 Navn, rolle, værdi · ADropdown-menuen (<select>) har ingen etiket. Skærmlæsere siger blot 'kombinationsboks' — brugeren ved ikke, om det er størrelse, farve, land eller sortering.
Kobl en <label> til <select> med for/id, eller brug aria-label, hvis etiketten ikke kan være synlig. Et første <option> med 'Vælg størrelse' erstatter ikke en label.
Før
<select name="size"><option>Vælg størrelse</option>…</select>Efter
<label for="size">Størrelse</label> <select id="size" name="size">…</select>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: shoppens primære domæne, fx
https://www.dinbutik.dk. Brug ikkedinbutik.myshopify.com, medmindre det er den adresse, kunderne bruger. - Sitemap: Shopify genererer automatisk
/sitemap.xmlsom et sitemap-index, der peger påsitemap_products_1.xml,sitemap_collections_1.xml,sitemap_pages_1.xmlogsitemap_blogs_1.xml(flere produktfiler ved mere end 5.000 produkter). Nordally følger indekset og henter siderne fra underfilerne. Udelader I feltet, bruger vi/sitemap.xmlpå base-URL'en, hvilket passer for Shopify. - Flere sprog og markeder: Shopify Markets i undermapper (
/en/,/de/) ligger i samme sitemap og scannes med. Markeder på egne domæner tilføjes som separate sites, fordi vi kun følger URL'er på sitets eget domæne. - Adgangskodebeskyttet shop: før lancering svarer sitemappet ikke, og Nordally scanner så kun forsiden, som viser adgangskodesiden. Tilføj sitet, når shoppen er åben, eller brug en kollektion på et åbent testdomæne.
- Kurv og checkout står ikke i Shopifys sitemap. Dem dækker I med den manuelle gennemgang, som er en del af erklæringen.
Hvem retter hvad
| Fejl | Kan shopejeren rette selv? | Kræver udvikler/leverandør? |
|---|---|---|
| Alt-tekster på produkt- og kollektionsbilleder | Ja, i produktets medier under Produkter i admin | Nej |
| Kontrast i temaets farver | Delvist: farveskemaer i temaeditoren | Ja, hvis kontrasten sidder i temaets CSS eller i en app |
| Ikonknapper og links uden navn (menu, søgning, kurv, sociale ikoner) | Nej | Temaudvikler (Liquid-sektioner og snippets) |
| Variantvælger uden etiket | Nej | Temaudvikler |
| Fejl fra apps (chat, anmeldelser, popups, iframes) | Delvist: fjern eller udskift appen | App-leverandøren |
| Checkout-felter og struktur | Nej | Shopify (hostet checkout); kun Shopify Plus kan tilpasse. Farver og kontrast styrer I selv i checkout-indstillingerne |
Hvad automatisk test ikke finder
Scanneren tester det, browseren viser, men kan ikke afgøre, om variantvælgeren, kurv-skuffen og checkout kan gennemføres med tastatur alene, om alt-teksten faktisk beskriver produktet (og ikke bare gentager titlen), om fejlbeskeder ved forkert postnummer eller udløbet kort kan opfattes af en skærmlæser, eller om slideshowet på forsiden kan sættes på pause. Det er der en tjekliste til i manuel gennemgang; resultatet indgår i erklæringen.
Tjek én side af jeres Shopify-shop nu
Indsæt en produktside eller forsiden, 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 fra Shopify App Store i stedet for at rette Shopify-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.
Er Shopifys checkout tilgængelig, og hvad skal vi skrive om den i erklæringen?
Shopify hoster og vedligeholder checkout og er ansvarlig for dens struktur; på alle planer bortset fra Plus kan I kun ændre logo, farver og skrifter. Nordally scanner ikke bag et købsflow, så checkout dækkes i den manuelle gennemgang. Det er stadig jeres tjeneste over for kunden, så beskriv i erklæringen, at checkout leveres af Shopify, hvad I har testet, og hvad I har fundet.
Vi bruger et tema fra Shopify Theme Store. Er vi så dækket?
Nej, men I starter bedre. Temaer i Theme Store skal opfylde Shopifys krav til tilgængelighed, før de godkendes. Det gælder temaet, som det leveres, ikke jeres farvevalg, jeres tilpasninger, jeres apps eller jeres billeder uden alt-tekst. Scan efter hver temaopdatering og efter hver ny app.
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.