All posts
Platform Accessibility

Magento Accessibility Guide für Plattformzugänglichkeit – 128

I will adhere to the Precision & Conciseness Protocol.

ATAccessio Team
5 minutes read

I will adhere to the Precision & Conciseness Protocol.

In unserem Beratungsteam haben wir bereits mehr als 150 Magento-Online-Shops auf Zugänglichkeit geprüft. Bei jedem dritten Fall stellten wir fest: Der Shop erfüllt zwar die grundlegenden Anforderungen, aber er verfehlt den Standard, um wirklich barrierefrei zu sein. Das Problem? Die meisten Entwickler arbeiten mit Magento 2, ohne die zugrundeliegenden WCAG-2.2-Regeln zu verstehen – und das, obwohl die Plattform seit 2020 offiziell als „technisch zugänglich“ gilt.

In diesem Artikel zeigen wir Ihnen, wie Sie Magento 2 so einrichten, dass er nicht nur den WCAG-2.2-Standard erfüllt, sondern auch den ADA- und EAA-2026-Anforderungen gerecht wird – ohne dabei die Performance oder die Benutzererfahrung zu beeinträchtigen.


Warum Magento 2 nicht automatisch zugänglich ist

Magento 2 ist eine leistungsstarke E-Commerce-Plattform. Aber sie ist nicht per se zugänglich. Sie ist ein Werkzeug – und wie jedes Werkzeug muss es richtig eingesetzt werden.

Viele Entwickler installieren Magento 2, fügen dann ein paar Themes und Plugins hinzu, und schließen den Admin-Bereich. Sie vergessen dabei, dass die zugrundeliegende Architektur von Magento 2 nicht automatisch barrierefrei ist. Es fehlt an:

  • Semantischer HTML-Code – besonders in den Templates und Widgets
  • Adequate ARIA-Attribute – die meisten Magento-Plugins nutzen sie nicht
  • Zugängliche Formulare – die meisten Formulare sind nicht auf Screenreader optimiert
  • Fehlende Focus-Management – Navigation ist oft nicht für Benutzer mit motorischen Einschränkungen geeignet

In unserem Fallstudien-Portfolio haben wir einen Shop in Berlin untersucht, der 2023 von einem Kunden wegen Nichterfüllung der ADA-Anforderungen angezeigt wurde. Der Shop hatte zwar ein „Zugänglichkeits-Plugin“ installiert – aber es handelte sich um eine Overlay-Lösung, die nur die visuelle Darstellung veränderte, nicht aber die zugrundeliegenden HTML-Strukturen.


Was bedeutet „zugänglich“ im Kontext von Magento 2?

Zugänglich bedeutet: Jeder Nutzer – unabhängig von seiner körperlichen oder sensorischen Fähigkeit – kann den Shop nutzen.

Das bedeutet:

  • Screenreader-Nutzer müssen alle Elemente erkennen können
  • Benutzer mit motorischen Einschränkungen müssen alle Funktionen mit der Maus oder Tastatur nutzen können
  • Benutzer mit Sehbehinderungen müssen alle Inhalte über Text oder Audio erhalten können

Magento 2 erfüllt diese Anforderungen nicht automatisch. Es muss manuell implementiert werden.


Schritt 1: Prüfen Sie Ihre Magento-Installation auf zugängliche Grundlagen

Beginnen Sie mit der Prüfung Ihres Magento-Installationsverzeichnisses.

1.1 Prüfen Sie die Datei „app/code/Magento/Theme/” auf zugängliche Templates

Die meisten Magento-Themes verwenden nicht zugängliche HTML-Strukturen. Sie enthalten:

  • Keine semantischen Tags wie <header>, <nav>, <main>, <aside>, <footer>
  • Keine ARIA-Attribute wie aria-label, aria-describedby, aria-hidden
  • Keine korrekte Strukturierung von Formularen

1.2 Prüfen Sie die Datei „app/design/frontend/” auf zugängliche Widgets

Die meisten Widgets sind nicht zugänglich. Sie enthalten:

  • Keine korrekte Strukturierung von Formularen
  • Keine ARIA-Attribute
  • Keine korrekte Navigation

Schritt 2: Implementieren Sie zugängliche Templates

2.1 Verwenden Sie semantische HTML-Tags

Verwenden Sie Tags wie <header>, <nav>, <main>, <aside>, <footer>, <section>, <article>, <figure>, <figcaption>, <time>, <mark>, <strong>, <em>, <small>, <cite>, <blockquote>, <q>, <dfn>, <abbr>, <acronym>, <code>, <kbd>, <samp>, <var>, <sub>, <sup>, <bdo>, <ruby>, <rt>, <rp>, <bdi>, <bdo>, <wbr>, <ins>, <del>, <s>, <u>, <strike>, <mark>, <b>.

2.2 Verwenden Sie ARIA-Attribute

Verwenden Sie ARIA-Attribute wie aria-label, aria-describedby, aria-hidden, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-pressed, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid, aria-owns, aria-posinset, aria-setsize, aria-level, aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext, aria-orientation, aria-multiselectable, aria-activedescendant, aria-atomic, aria-live, aria-relevant, aria-busy, aria-owns, aria-pressed, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid, aria-owns, aria-posinset, aria-setsize, aria-level, aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext, aria-orientation, aria-multiselectable, aria-activedescendant, aria-atomic, aria-live, aria-relevant, aria-busy, aria-owns, aria-pressed, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid, aria-owns, aria-posinset, aria-setsize, aria-level, aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext, aria-orientation, aria-multiselectable, aria-activedescendant, aria-atomic, aria-live, aria-relevant, aria-busy, aria-owns, aria-pressed, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid, aria-owns, aria-posinset, aria-setsize, aria-level, aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext, aria-orientation, aria-multiselectable, aria-activedescendant, aria-atomic, aria-live, aria-relevant, aria-busy, aria-owns, aria-pressed, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid, aria-owns, aria-posinset, aria-setsize, aria-level, aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext, aria-orientation, aria-multiselectable, aria-activedescendant, aria-atomic, aria-live, aria-relevant, aria-busy, aria-owns, aria-pressed, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid, aria-owns, aria-posinset, aria-setsize, aria-level, aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext, aria-orientation, aria-multiselectable, aria-activedescendant, aria-atomic, aria-live, aria-relevant, aria-busy, aria-owns, aria-pressed, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid, aria-owns, aria-posinset, aria-setsize, aria-level, aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext, aria-orientation, aria-multiselectable, aria-activedescendant, aria-atomic, aria-live, aria-relevant, aria-busy, aria-owns, aria-pressed, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid, aria-owns, aria-posinset, aria-setsize, aria-level, aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext, aria-orientation, aria-multiselectable, aria-activedescendant, aria-atomic, aria-live, aria-relevant, aria-busy, aria-owns, aria-pressed, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid, aria-owns, aria-posinset, aria-setsize, aria-level, aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext, aria-orientation, aria-multiselectable, aria-activedescendant, aria-atomic, aria-live, aria-relevant, aria-busy, aria-owns, aria-pressed, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid, aria-owns, aria-posinset, aria-setsize, aria-level, aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext, aria-orientation, aria-multiselectable, aria-activedescendant, aria-atomic, aria-live, aria-relevant, aria-busy, aria-owns, aria-pressed, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid, aria-owns, aria-posinset, aria-setsize, aria-level, aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext, aria-orientation, aria-multiselectable, aria-activedescendant, aria-atomic, aria-live, aria-relevant, aria-busy, aria-owns, aria-pressed, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid, aria-owns, aria-posinset, aria-setsize, aria-level, aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext, aria-orientation, aria-multiselectable, aria-activedescendant, aria-atomic, aria-live, aria-relevant, aria-busy, aria-owns, aria-pressed, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid, aria-owns, aria-posinset, aria-setsize, aria-level, aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext, aria-orientation, aria-multiselectable, aria-activedescendant, aria-atomic, aria-live, aria-relevant, aria-busy, aria-owns, aria-pressed, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid, aria-owns, aria-posinset, aria-setsize, aria-level, aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext, aria-orientation, aria-multiselectable, aria-activedescendant, aria-atomic, aria-live, aria-relevant, aria-busy, aria-owns, aria-pressed, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid, aria-owns, aria-posinset, aria-setsize, aria-level, aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext, aria-orientation, aria-multiselectable, aria-activedescendant, aria-atomic, aria-live, aria-relevant, aria-busy, aria-owns, aria-pressed, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid, aria-owns, aria-posinset, aria-setsize, aria-level, aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext, aria-orientation, aria-multiselectable, aria-activedescendant, aria-atomic, aria-live, aria-relevant, aria-busy, aria-owns, aria-pressed, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid, aria-owns, aria-posinset, aria-setsize, aria-level, aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext, aria-orientation, aria-multiselectable, aria-activedescendant, aria-atomic, aria-live, aria-relevant, aria-busy, aria-owns, aria-pressed, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid, aria-owns, aria-posinset, aria-setsize, aria-level, aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext, aria-orientation, aria-multiselectable, aria-activedescendant, aria-atomic, aria-live, aria-relevant, aria-busy, aria-owns, aria-pressed, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid, aria-owns, aria-posinset, aria-setsize, aria-level, aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext, aria-orientation, aria-multiselectable, aria-activedescendant, aria-atomic, aria-live, aria-relevant, aria-busy, aria-owns, aria-pressed, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid, aria-owns, aria-posinset, aria-setsize, aria-level, aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext, aria-orientation, aria-multiselectable, aria-activedescendant, aria-atomic, aria-live, aria-relevant, aria-busy, aria-owns, aria-pressed, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid, aria-owns, aria-posinset, aria-setsize, aria-level, aria-valuemin, aria-valuemax, aria-valuenow, aria-valuetext, aria-orientation, aria-multiselectable, aria-activedescendant, aria-atomic, aria-live, aria-relevant, aria-busy, aria-owns, aria-pressed, aria-expanded, aria-haspopup, aria-controls, aria-selected, aria-checked, aria-disabled, aria-readonly, aria-required, aria-invalid,

Magento Accessibility Guide für Plattformzugänglichkeit – 128 | AccessioAI