Automated accessibility audit of Luxembourg municipality websites against WCAG 2.1 AA (EU Directive 2016/2102). Scores reflect homepage-only scanning using axe-core.
Download CSV · Press Dossier (PDF) · Methodology
89% of municipalities do not pass the automated accessibility check.
| Municipality | Website | Score | Issues |
|---|---|---|---|
| Ettelbruck | ettelbruck.lu | 100.0 | 0 |
| Berdorf | berdorf.lu | 100.0 | 0 |
| Septfontaines | septfontaines.lu | 100.0 | 0 |
| Wellenstein | wellenstein.lu | 100.0 | 0 |
| Differdange | differdange.lu | 100.0 | 0 |
| Habscht | habscht.lu | 100.0 | 0 |
| Bertrange | bertrange.lu | 100.0 | 0 |
| Dudelange | dudelange.lu | 100.0 | 0 |
| Feulen | feulen.lu | 100.0 | 0 |
| Beckerich | beckerich.lu | 100.0 | 0 |
| Ell | ell.lu | 100.0 | 0 |
| Kopstal | kopstal.lu | 85.7 | 1 |
| Roeser | roeser.lu | 68.1 | 41 |
| Remich | remich.lu | 68.1 | 3 |
| Luxembourg | vdl.lu | 68.1 | 15 |
| Esch-sur-Alzette | esch.lu | 68.1 | 12 |
| Weiswampach | weiswampach.lu | 68.1 | 1 |
| Tuntange | web.archive.org | 68.1 | 1 |
| Grosbous | grosbous.lu | 68.1 | 66 |
| Lac de la Haute-Sûre | lac-haute-sure.lu | 58.4 | 11 |
| Junglinster | junglinster.lu | 46.3 | 18 |
| Dippach | dippach.lu | 46.3 | 14 |
| Mondercange | mondercange.lu | 46.3 | 39 |
| Erpeldange-sur-Sûre | erpeldange.lu | 46.3 | 47 |
| Lorentzweiler | lorentzweiler.lu | 46.3 | 36 |
| Kayl | kayl.lu | 46.3 | 70 |
| Grevenmacher | grevenmacher.lu | 46.3 | 22 |
| Garnich | garnich.lu | 46.3 | 2 |
| Vianden | vianden.lu | 46.3 | 2 |
| Préizerdaul | preizerdaul.lu | 39.7 | 11 |
| Kiischpelt | kiischpelt.lu | 39.7 | 20 |
| Rambrouch | rambrouch.lu | 39.7 | 9 |
| Consdorf | consdorf.lu | 39.7 | 4 |
| Mondorf-les-Bains | mondorf-les-bains.lu | 31.5 | 17 |
| Kehlen | kehlen.lu | 31.5 | 58 |
| Schuttrange | schuttrange.lu | 31.5 | 16 |
| Troisvierges | troisvierges.lu | 31.5 | 20 |
| Schifflange | schifflange.lu | 31.5 | 27 |
| Steinsel | steinsel.lu | 31.5 | 15 |
| Waldbillig | waldbillig.lu | 31.5 | 16 |
| Schieren | schieren.lu | 21.5 | 17 |
| Koerich | koerich.lu | 21.5 | 25 |
| Vallée de l'Ernz | aerenzdall.lu | 21.5 | 27 |
| Mersch | mersch.lu | 21.5 | 7 |
| Käerjeng | kaerjeng.lu | 21.5 | 7 |
| Leudelange | leudelange.lu | 21.5 | 45 |
| Useldange | useldeng.lu | 18.4 | 25 |
| Strassen | strassen.lu | 14.6 | 79 |
| Stadtbredimus | stadtbredimus.lu | 14.6 | 76 |
| Bettembourg | bettembourg.lu | 14.6 | 38 |
| Flaxweiler | flaxweiler.lu | 12.5 | 31 |
| Sanem | sanem.lu | 9.9 | 49 |
| Wiltz | wiltz.lu | 9.9 | 37 |
| Schengen | schengen.lu | 9.9 | 84 |
| Bissen | bissen.lu | 9.9 | 27 |
| Hesperange | hesperange.lu | 8.5 | 16 |
| Niederanven | niederanven.lu | 6.8 | 48 |
| Diekirch | diekirch.lu | 5.8 | 92 |
| Munshausen | munshausen.lu | 5.8 | 51 |
| Clervaux | clervaux.lu | 5.8 | 51 |
| Steinfort | steinfort.lu | 5.8 | 81 |
| Sandweiler | sandweiler.lu | 4.6 | 95 |
| Mertzig | mertzig.lu | 4.6 | 24 |
| Rosport-Mompach | rosportmompach.lu | 4.6 | 32 |
| Betzdorf | betzdorf.lu | 3.1 | 92 |
| Dalheim | dalheim.lu | 2.7 | 90 |
| Redange sur Attert | redange.lu | 2.1 | 69 |
| Manternach | manternach.lu | 1.8 | 27 |
| Weiler-la-Tour | weiler-la-tour.lu | 1.8 | 60 |
| Wahl | wahl.lu | 1.8 | 34 |
| Nommern | nommern.lu | 1.8 | 60 |
| Winseler | winseler.lu | 1.8 | 15 |
| Groussbus-Wal | g-w.lu | 1.8 | 34 |
| Tandel | tandel.lu | 1.8 | 23 |
| Parc Hosingen | hosingen.lu | 1.8 | 31 |
| Contern | contern.lu | 1.8 | 58 |
| Colmar-Berg | colmar-berg.lu | 1.2 | 32 |
| Lenningen | lenningen.lu | 1.2 | 35 |
| Reckange-sur-Mess | reckange.lu | 1.2 | 29 |
| Wormeldange | wormeldange.lu | 1.2 | 30 |
| Bech | bech.lu | 1.2 | 35 |
| Pétange | petange.lu | 1.2 | 55 |
| Rumelange | rumelange.lu | 1.2 | 31 |
| Esch-sur-Sûre | esch-sur-sure.lu | 1.2 | 68 |
| Waldbredimus | waldbredimus.lu | 1.2 | 24 |
| Larochette | larochette.lu | 1.2 | 35 |
| Vichten | vichten.lu | 1.2 | 21 |
| Heffingen | heffingen.lu | 1.2 | 32 |
| Helperknapp | helperknapp.lu | 1.2 | 27 |
| Wincrange | wincrange.lu | 0.8 | 30 |
| Lintgen | lintgen.lu | 0.8 | 83 |
| Putscheid | putscheid.lu | 0.8 | 28 |
| Saeul | saeul.lu | 0.8 | 42 |
| Boulaide | boulaide.lu | 0.8 | 26 |
| Mamer | mamer.lu | 0.8 | 58 |
| Goesdorf | goesdorf.lu | 0.8 | 51 |
| Mertert | mertert.lu | 0.8 | 18 |
| Frisange | frisange.lu | 0.8 | 54 |
| Reisdorf | reisdorf.lu | 0.8 | 32 |
| Bourscheid | bourscheid.lu | 0.8 | 43 |
| Bous | bous.lu | 0.8 | 18 |
| Beaufort | beaufort.lu | 0.6 | 62 |
| Biwer | biwer.lu | 0.6 | 49 |
| Fischbach | acfischbach.lu | 0.6 | 62 |
| Bous-Waldbredimus | bouswaldbredimus.lu | 0.6 | 44 |
| Boevange-sur-Attert | boevange-attert.lu | 0.6 | 27 |
| Echternach | echternach.lu | 0.6 | 41 |
| Bettendorf | bettendorf.lu | 0.3 | 112 |
Scores reflect automated testing only (axe-core against WCAG 2.1 AA). Automated tools detect approximately 30–50% of WCAG criteria. A site that does not pass the automated check is certainly non-compliant. A site that passes may still have barriers detectable only through manual review.
| # | Rule | Description | Impact | Occurrences | Sites affected |
|---|---|---|---|---|---|
| 1 | color-contrast | Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds | serious | 1,792 | 89 |
| 2 | link-name | Ensure links have discernible text | serious | 979 | 78 |
| 3 | nested-interactive | Ensure interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies | serious | 118 | 44 |
| 4 | aria-required-children | Ensure elements with an ARIA role that require child roles contain them | critical | 84 | 46 |
| 5 | image-alt | Ensure <img> elements have alternative text or a role of none or presentation | critical | 83 | 13 |
| 6 | button-name | Ensure buttons have discernible text | critical | 71 | 21 |
| 7 | aria-toggle-field-name | Ensure every ARIA toggle field has an accessible name | serious | 64 | 24 |
| 8 | link-in-text-block | Ensure links are distinguished from surrounding text in a way that does not rely on color | serious | 61 | 17 |
| 9 | meta-viewport | Ensure <meta name="viewport"> does not disable text scaling and zooming | moderate | 55 | 55 |
| 10 | aria-input-field-name | Ensure every ARIA input field has an accessible name | serious | 46 | 44 |