Page URL
https://www.telekom.de/shop/geraete/smartphones

Issues List

Page Notes and General Remarks
Non-text Content 1.1.1 (A)
Device images do not have purpose equivalent text alternative
Non-text Content 1.1.1 (A)
Icons do not have purpose equivalent text alternative
Non-text Content 1.1.1 (A)
Info Icon does not have purpose equivalent text alternative
Non-text Content 1.1.1 (A)
Manufacturer logo images do not have purpose equivalent text alternative
Non-text Content 1.1.1 (A)
Decorative icons have non-null alt attribute or no text alternative at all
Info and Relationships 1.3.1 (A)
Sidebar Content not matching visual presentation and code markup
Info and Relationships 1.3.1 (A)
Device list presentation does not match markup
Info and Relationships 1.3.1 (A)
Device category navigation not using navigation landmark
Info and Relationships 1.3.1 (A)
Empty paragraph element found
Info and Relationships 1.3.1 (A)
List of services "rund um Ihre Bestellung" is not using correct semantic HTML
Use of Color 1.4.1 (A)
Links in body copy are indicated by color only
Contrast (Minimum) 1.4.3 (AA)
Link text (blue) on grey background does not meet minimum contrast
Contrast (Minimum) 1.4.3 (AA)
"Bonus" info (magenta) in "Tarif ändern" dialog window is not meeting minimum contrast
Contrast (Minimum) 1.4.3 (AA)
Color contrast in sidebar is weak
Resize text 1.4.4 (AA)
Resizing text leaves very limited space in "Tarif ändern" dialog window
Reflow 1.4.10 (AA)
Text content truncated
Reflow 1.4.10 (AA)
Vertical space in dialog window on small viewport extremely limited (67px)
Reflow 1.4.10 (AA)
Manufacturer filter needs horizontal scrolling
Non-text Contrast 1.4.11 (AA)
Product color options do not always have enough contrast
Text Spacing 1.4.12 (AA)
Changing text spacing lets parts of text spill out of their containers
Keyboard 2.1.1 (A)
Device category links not accessible via keyboard
Keyboard 2.1.1 (A)
Filter dialog window cannot be opened or operated
Keyboard 2.1.1 (A)
Footnote dialog window does not receive keyboard focus on open
Bypass Blocks 2.4.1 (A)
Repeated blocks cannot be bypassed
Focus Order 2.4.3 (A)
Clicking button "Weitere Geräte anzeigen" is not setting the right focus
Focus Order 2.4.3 (A)
Filter Dialog Window not in order
Link Purpose (In Context) 2.4.4 (A)
Product card link purpose not determinable
Focus Visible 2.4.7 (AA)
Product card focusable, but focus is not visible
Focus Visible 2.4.7 (AA)
Elements in filter dialog focusable, but focus is not visible
Focus Not Obscured (Minimum) 2.4.11 (AA)
Activated filter dialog window obscures element focus
Focus Not Obscured (Minimum) 2.4.11 (AA)
Activated footnote dialog windows obscure element focus
Pointer Gestures 2.5.1 (A)
Device Category links navigation can only be operated by dragging motion on mobile
Pointer Gestures 2.5.1 (A)
Manufacturer filter can only be operated by dragging motion on mobile
Label in Name 2.5.3 (A)
Filter button labels not part of accessible name
Target Size (Minimum) 2.5.8 (AA)
Footnote Asterisk not meeting minimum target size
Target Size (Minimum) 2.5.8 (AA)
Info icon "i" not meeting minimum target size
On Input 3.2.2 (A)
Manufacturer filters are applied on click without previous announcement
Name, Role, Value 4.1.2 (A)
FAQ not using semantic HTML and correct ARIA roles
Name, Role, Value 4.1.2 (A)
Interactive element uses non-semantic HTML
Name, Role, Value 4.1.2 (A)
Improper use of semantic HTML
Name, Role, Value 4.1.2 (A)
Interactive elements do not use semantic HTML
Priority: Critical Significant Page: Smartphones Observation Permalink
Observation Details

Page is

  • child page of "Alle Geräte"

All (or most) of issues in parent pages and sibling pages are also found on this page. Ensure, following global issues and page specific issues of parent pages and sibling pages closely. Remediation of this page is only done, when all parent pages, all sibling pages, and all global issues are remediated.


Please refer to global observation 1.3.1 Info and Relationships – "Semantic HTML" for general remarks about the use of semantic HTML.

Priority: Moderate Low Page: Smartphones Observation Permalink
Accompanying Files
Observation Details

Decorative icons are announced by screen reader. This happens when images have a non-null alt attribute or in the case of SVGs a non-null <title> element or none at all without being hidden manually.

On the /shop pages, this concerns the

  • device category navigation at the page's top,

  • icons used in the services list in section "Verlässlicher Service rund um Ihre Bestellung"

  • icons used in the FAQ section at the page's bottom,

  • the "Vertragsverlängerung" icon in the sidebar section "Ich möchte"

Remediation Notes

Ensure, purely decorative images have a null alt attribute set. SVGs must have an empty <title> element instead and ideally be hidden manually via aria-hidden="true".

For more information about accessible icon buttons, refer to Sara Soueidan's "Accessible Icon Buttons" article.

If an image is declared to be informative rather than decorative, a purpose equivalent text alternative must be programmatically determinable. Duplicating already existing text content never is purpose equivalent of an image. See the W3C Alt-decision tree for more information about types of non-text content.

Accompanying Files
Observation Details

The sidebar section "Ich möchte" uses visual presentation of a heading structure that is not reflected in the HTML markup. Visual presentation MUST match code markup.

Remediation Notes

Use proper semantic HTML headings to indicate the structure of the sidebar content. How the heading is worded, potentially the most fitting element structure would be a a heading level 2 and an unordered list.

<h2>Ich möchte...</h2>
<ul><li>...
Priority: Minor Unknown Page: Smartphones Observation Permalink
Observation Details

The section "Verlässlicher Service rund um Ihre Bestellung" arguably houses a list of services but is not using semantic HTML list elements. While this is not a strict failure of this success criterion, remediation is recommended.

Accompanying Files
Observation Details

The FAQ section houses at least one empty <p> element (class names for reachability: sc-feUZmu ibaGoG).

Paragraphs have an ARIA role paragraph always making them be announced by screen readers. Empty paragraph elements lead to the announcement of "empty group".

Paragraph elements must never be empty.

Remediation Notes

Ideally, creation of empty paragraph elements will technically be prohibited.

Content management however must ensure, not creating empty paragraph elements, not in rich text nor source code editor.

Side note: while this issue is about the found empty paragraph element, there are rare occasions, any element should be empty.

Priority: Moderate Low Page: Smartphones Observation Permalink
Accompanying Files
Observation Details

The navigational items in the device category list above the page's main heading are not using semantic HTML navigation element <nav>.

Remediation Notes

Use proper semantic HTML structure to create navigation landmark. Ensure, labelling the <nav> element to differentiate from main, breadcrumb and other menu(s).

Priority: Critical Low Page: Smartphones Observation Permalink
Observation Details

An accordion component consists of collapsible elements with a header and content, which can be hidden. To hide / show the content, an interactive element must be present to operate the accordion. The FAQ on the shop pages are not using any semantic interactive elements.

No interaction possibility is announced via screen reader, navigating the accordion. Instead, the only announcements made are headings and images with no alt attribute, which are announced as "image". Without "guessing", a screen reader user will not be able to know that the element is interactive.

Side note: Hovering over the accordion at any point, changes the mouse cursor to pointer. As this is set on the collapsible elements and not reversed on the content panel, the cursor looks like it is hovering an interactive element inside the whole accordion, mistakenly giving the user the impression of hovering interactive elements. While this is not part of the criterion's failure, it is highly recommended to remediate.

Remediation Notes

The use of semantic HTML is adamant to a good user experience and web accessibility. Ideally, native HTML is used. In case of an accordion, this could be realized by using the <detail> and <summary> elements.

If there is a valid reason to not use those, ensure the use of interactive elements (<button>) for the interactive parts of the accordion.

The technical requirements for building an accessible accordion component can be found in the BFIT-Bund Handreichung "Accessible design of user interface elements – Accordion".

The accordion, while not strictly defined as such, can be defined as an opposite to a tab group. They both have the purpose of hiding content from the user to be revealed on user interaction. Defining accordion and tab group as opposites allows for an easy rule of usage. Tab groups are used, if and only if there must always be exactly one content panel visible. The accordion is then used, whenever the possibility of showing more than one content panel at the same time is needed or wanted. This distinction can e.g. be found in the documentation of the GOV.UK Design System at Accordion – "Decide between using accordions, tabs and details".

Priority: Critical Low Page: Smartphones Observation Permalink
Accompanying Files
Observation Details

Device category links do not use interactive semantic HTML elements. Thus is not accessible via keyboard and is not announced as interactive for screen reader users as well.

Remediation Notes

Use anchor elements for links instead of trying to build custom interactive components. All <a> elements MUST have an href attribute. To demonstrate, this is one of the links:

<div class="style__StyledNavigationChips-sc-h2fd9x-0 IhoCS dt_navigationChips clickable selected"
     data-qa="LST_DeviceCategory_smartphones">
  <article class="style__StyledIconWrapper-sc-h2fd9x-1 jAhAws">
    <div class="iconWrapper" role="image" aria-label="Handys">
      <div class="sc-imWYAI iYZqNY es_preloadImage">
        <img class="sc-kpDqfm bxTqZb dt_mainImage customStyle imgLoaded"
          alt="Handys"
          src="..."
          data-img="isSafari_false isSsr_undefined">
        <div class="sc-jXbUNg jYexhV dt_placeholderImage">
          <svg width="100%" height="100%" viewBox="0 0 121 242"
            fill="none" xmlns="http://www.w3.org/2000/svg">
            <path d="..."
              fill="#F3F3F3"></path>
          </svg>
        </div>
      </div>
    </div>
  </article>
  <div class="sc-YysOf esSDcz dt_typography variant_smallBold">
    Handys
  </div>
</div>

When it easily could be:

<nav aria-labelledby="heading-device-categories" id="menu-device-categories">
  <h2 id="heading-device-categories">Geräte-Kategorien</h2>
  <ul>
    <li><img alt="" src="..."><a href="">Handys</a>
    <li><img alt="" src="..."><a href="">Smartwatches</a>
    <li><img alt="" src="..."><a href="">Tablets</a>
    <li><img alt="" src="..."><a href="">Mobile Router</a>
    <li><img alt="" src="..."><a href="">Tastenhandys</a>
  </ul>
</nav>

for the whole navigation to be perfectly accessible. The clean semantic structure with the id on the navigation element allows for all necessary CSS selectors to be created from the id alone without the need of countless CSS classes.

Simple structured HTML outperforms in many ways.


Please also refer to observation 1.3.1 Info and Relationships – "Semantic HTML" for general remarks about the use of semantic HTML.

Observation Details

The device category links navigation can only be operated by horizontal scroll on desktop and by dragging movement on a mobile device. As the dragging needs a base precision to stop the movement at the right time to reach the wanted category link, a single pointer alternative for operation / navigation must be offered.

The viewport tested is 375×635px, simulating an Apple iPhone 11 Pro. While this is an old device and more current phones do tend to have increased viewport widths, this test would look even more drastic on the 320px viewport width, the WCAG sets for e.g. 1.4.10 Reflow.

Remediation Notes

Possible methods to remediate and to ensure access to the links:

  • Adding pagination (single pointer arrow buttons)

  • Reflow to multiple lines (also see 1.4.10 Reflow)

Note, that the WCAG, and success criterion 2.5.7 Dragging Movements specifically, do not require presentation / layout parity of different devices, viewports, etc. This means, while functionality and information parity is a must, the layout and presentation can be different.

Accompanying Files
Observation Details
  • Image

    • In the badge, the purpose of the content is to show, the user getting 200 € "Ankaufsbonus" on top of the "Ankaufsangebot für das Altgerät". The icon's purpose is to communicate "Ankaufsangebot für das Altgerät".

  • Inline SVG icons have no text alternative. As the icon is embedded as inline SVG, the SVG's <title> element must be present if no other text alternative is provided, in which case the SVG must be hidden from screen readers

    • Sidebar – Info

Remediation Notes
  • Ankaufsbonus

    • Change the text alternative to communicate the icon's purpose, e.g. by setting alt="Ankaufspreis Ihres Altgerätes".

  • Vorbestellung

    • Add <title> element to SVG or embed SVG from file and treat like <img>

    • If declaring icon as decorative, ensure <title> element is empty and SVG is hidden from screen readers by setting aria-hidden="true"

Priority: Critical Low Page: Smartphones Observation Permalink
Accompanying Files
Observation Details

Device images use device name as text alternative, not serving the equivalent purpose of the image and simply duplicating text content that is already presented down below.

Please read remediation notes carefully.

Remediation Notes

There are multiple ways to remediate this issue.

Image description

The ideal way would be to use the actual image description. Possible text alternatives for the example devices in the screenshot could be in the following style:

  • "Apple iPad Air 13" (2025) M3 in Space Grau. Vorderseite mit generischem Wallpaper, Hinterseite mit Kamera"

  • "Samsung Galaxy S25 Edge in Titanium Icyblue (hellblau). Vorderseite mit Gerätenamen als Schriftzug, Seitenansicht, Promotion für 2× Speicher-Upgrade inklusive"

  • "Samsung Galaxy S25 Ultra in Schwarz. Vorderseite mit Gerätenamen als Schriftzug, Rückseite mit 5 Kameras"

Declare decorative

A less ideal way would be to declare the device image as decorative by using a null alt attribute, removing it from the accessibility tree. There are a few caveats to this "tactic", though and if using it, there are multiple other steps to be done, to ensure conformance with this success criterion.

  • While this would improve the current use of the images' text alternatives, removing the content duplication, it does not really solve the issue of the images' purpose not being communicated.

  • A decorative image only is purely decorative, if not adding any information that is not communicated otherwise. While device name and device color might be information which is available elsewhere, the actual description of the device is not.

  • Declaring the images decorative, you additionally MUST ensure, all other information (color, promotions, add-ons, extra devices like styluses, etc.) is available as text in the product card.

Priority: Serious Medium Page: Smartphones Observation Permalink
Accompanying Files
Observation Details

In the filter section, the purpose of the manufacturer's logos is to filter device list by manufacturer. The image's purpose is to communicate, depending on filter status, "Zeige Geräte von MANUFACTURER".

The logos use the name of the manufacturer as its text alternative which does not serve the equivalent purpose of what the image is communicating.

Remediation Notes

Change the text alternative to communicate the icon's purpose, e.g. by setting alt="Geräte von Apple anzeigen". Ensure to deliver accessible, purpose equivalent text alternatives for all filter states.

  • No manufacturer filter selected: "Nur Geräte von MANUFACTURER anzeigen"

  • One manufacturer filter selected

    • selected filter: "Alle Geräte anzeigen"

    • non-selected filter: "Geräte von MANUFACTURER anzeigen"

  • Multiple manufacturer filters selected

    • selected filter: "Geräte von MANUFACTURER nicht mehr anzeigen" (or ideally even announcing the still selected filters, see notes below)

    • non-selected filter: "Geräte von MANUFACTURER anzeigen"


One possible solution would be to use native checkbox inputs for the manufacturer filters. But the structural idea down below can be used with other methods as well.

<fieldset>
  <legend>Filter nach Endgeräte-Hersteller</legend>

  <input type="checkbox" 
         id="manufacturer-apple" 
         name="manufacturer" 
         value="Apple" 
         checked />
  <label for="manufacturer-apple">
    <svg><title>Apple</title>...</svg>
  </label>

  <input type="checkbox" 
         id="manufacturer-google" 
         name="manufacturer" 
         value="Google" />
  <label for="manufacturer-google">
    <svg><title>Google</title>...</svg>
  </label>

  <input type="checkbox" 
         id="manufacturer-samsung" 
         name="manufacturer" 
         value="Samsung" 
         checked />
  <label for="manufacturer-samsung">
    <svg><title>Samsung</title>...</svg>
  </label>

  <input type="checkbox" 
         id="manufacturer-telekom" 
         name="manufacturer" 
         value="Telekom" />
  <label for="manufacturer-telekom">
    <svg><title>Telekom</title>...</svg>
  </label>

  <input type="checkbox" 
         id="manufacturer-xiaomi" 
         name="manufacturer" 
         value="Xiaomi" />
  <label for="manufacturer-xiaomi">
    <svg><title>Xiaomi</title>...</svg>
  </label>
</fieldset>

From there work with the ids of checked/unchecked to create the accessible names by dynamically adding IDs of checked inputs. This way, you could create something like "Geräte von MANUFACTURER nicht mehr anzeigen. Es werden Geräte gezeigt von: CHECKED_MANUFACTURERS"

Accompanying Files
Observation Details

Info icon in sticky sidebar has no text alternative, thus no accessible name. The icons are used as interactive elements and MUST have an accessible name.

Remediation Notes

Change the text alternative to communicate the icon's purpose, e.g. by setting alt="Tarifdetails anzeigen/ausblenden".

Priority: Serious High Page: Smartphones Observation Permalink
Accompanying Files
Observation Details

The device list presentation suggests the code to be marked up like this:

<!-- Device list -->
<div>
  <!-- Device card -->
  <article>
    <span><!-- Badge --></span>
    <img /><!-- Device image -->
    <h2><!-- Device name --></h2>
    <p><!-- Storage --></p>
    <p><!-- Price info --></p>
    <p><!-- Price --></p>
  </article>

  <!-- More device cards -->
</div>

Instead, there are no headings, sections, articles, divs and spans are nested many hierarchy levels and an empty link is present.

Remediation Notes

Ensure, code markup matches the visual presentation. One possible solution could be a structure as follows:

<h2></h2> <!-- Heading to introduce device list -->
<!-- Device list -->
<ul>
  <li>
    <!-- Device card -->
    <article>
      <h3></h3> <!-- Device name -->
      <span></span> <!-- Badge with promotion/info -->

      <dl>
        <div>
          <dt class="visually-hidden">Verfügbar in den Farben</dt>
          <dd>
            <ul></ul> <!-- Available colors -->
          </dd>
        </div>

        <div>
          <dt class="visually-hidden">Speicherplatz</dt>
          <dd>
            Verfügbar in
            <ul></ul> <!-- Storage options -->
          </dd>
        </div>

        <div>
          <dt>Preis, einmalig</dt>
          <dd></dd> <!-- Price -->
        </div>
      </dl>

      <img /><!-- Device image -->
    </article>
  </li>

  <!-- More device cards -->
</ul>

Improvements made and notes to implement:

  • Clear structure without unnecessary nesting, without sections/articles nested, etc.

  • Use actual semantic list (<ul>) for the list

  • Each product is an <article> so it can be navigated to easily via screen reader

  • Product is defined by semantic heading <h3> as first child of product card

  • <span> with badge positioned right after heading, so it will be announced after the device name; badge can be positioned absolute or visually be moved up by using CSS order: -1

  • Product description is moved into description list to make each description detail easily navigable

  • Lists within the description (color list, storage option list) are using semantic list elements

  • Some <dt> can use a class="visually-hidden" to be accessible to screen readers while not being visible; check example class below

.visually-hidden:not(:focus):not(:active) {
  clip: rect(0 0 0 0); 
  clip-path: inset(50%);
  height: 1px;
  overflow: hidden;
  position: absolute;
  white-space: nowrap; 
  width: 1px;
}

Added side-effect of a semantic structure like this is the improved simplicity to build a responsive layout for the list, using CSS grid and Flexbox.

Priority: Critical Medium Page: Smartphones Observation Permalink
Accompanying Files
Observation Details

Text content within product cards gets truncated on small viewport with no possibility to reach the content. This also affects product card badges and interactive elements (footnotes) inside them.

Remediation Notes

Ensure the site is responsive. A viewport of 320px width must keep all content visible and all functionality intact. For the product cards, use a responsive layout method like the following to ensure correct reflow:

.product-list {
  --min-card-width: 200px;
  --product-list-gap: 1rem;

  display: grid;
  grid-gap: var(--product-list-gap);
}

@supports (width: min(var(--min-card-width), 100%)) {
  .product-list {
    grid-template-columns: repeat(auto-fit, minmax(min(var(--min-card-width), 100%), 1fr));
  }
}
Priority: Critical High Page: Smartphones Observation Permalink
Accompanying Files
Observation Details

Some text, when text spacing is changed, spills out of its parent containers, making some text hard, other text impossible to read. This includes:

  • Product card (storage options)

  • Badges

  • Selection input (Sortieren)

Remediation Notes

Containers of any type (e.g. badges, teasers, stages) must not use fixed dimensions, if they contain text content.

Priority: Serious Medium Page: Smartphones Observation Permalink
Observation Details

Shop Pages are repeating certain content blocks.

  • Breadcrumb navigation

  • Optional product highlights

  • Product group navigation

  • Main heading and description

  • Filtering and sorting mechanisms

  • Product list

  • Side bar with payment information and offer details

  • SEO content/landing page content, including FAQ section

Those parts are not correctly identifiable by common mechanisms like landmarks (only main landmark used) or heading structure (only main heading and headings in optional landing page/SEO content). Reaching certain parts of the page is made very difficult for users of keyboard or other assistive technology like screen readers.

Remediation Notes

Ensure use of proper structure of of the page and easy identification of repeated content blocks by using a combination of landmarks, and HTML headings. An example structure for the shop pages containing product lists, could be as followed:

  1. HTML header

    1. The current header element is not part of this audit, thus its current contents are not listed in here.

    2. Breadcrumb navigation as HTML <nav> element, labeled to differentiate from main menu, and including an ordered list <ol>

    3. Option product highlights identified by <h2> heading

    4. Device group navigation, using <nav> navigation element, labeled to differentiate from other menus

  2. <main> landmark

    1. <h1> main heading and description text content

    2. <section> for filtering and sorting

      1. evaluate use of ARIA role search

      2. add <h2> heading with id attribute and

      3. label the section by using aria-labelledby="" with the heading ID

    3. <section> for product list as your main content

      1. add <h2> heading with id attribute and

      2. label the section by using aria-labelledby="" with the heading ID

      3. The actual device list should use <ul>

      4. Each product card should be <article> including <h3> with product name

      5. No further nesting of landmarks should be needed inside this section as the structure is well defined by the article elements and their nested heading

    4. <section> for sidebar content; ideally labeled by a visible heading <h2> that describes all sidebar content; sections inside sidebar should not use <section> but only <h3> for structure

    5. <section> for landing page, SEO content and FAQ; sections inside should not use <section> but only <h2> and <h3> for structure

  3. HTML footer

Additionally, the use of skip links should be evaluated. Skip links are not only meant to be the first links on a page, but can also be used before certain repeated content blocks. For example, at the start of the main landmark, there could be a skip link that skips the product list and brings the user to the sidebar content or the FAQ section. Skip links can also be used at the end of a section or landmark to go back to its beginning. For example, at the end of the product list, which can be quite long, there could be a skip link to reach the start of the product list again.


Using proper structure of HTML headings usually makes "custom landmarks" (by sections) a redundant mechanism to navigate on a page, so they should not be used on everything. Only use landmarks for broad page structure.

The same goes for skip links. If a proper heading structure and optional landmarks already exist, there usually is no need for additional skip links.


Please (also) refer to observation 1.3.1 Info and Relationships – "Semantic HTML" for general remarks about the use of semantic HTML.

Priority: Moderate Unknown Page: Smartphones Observation Permalink
Accompanying Files
Observation Details

From filter button, a dialog window with filtering options opens. There is one focusable element in that dialog window which is ordered after all main content.

Remediation Notes

Ensure, contents of the filtering dialog window are in correct focus order (after filter button)

Priority: Critical Medium Page: Smartphones Observation Permalink
Accompanying Files
Observation Details

The product card link is empty, resulting in a null accessible name. As such it is announced only as "link" to assistive technology.

As the product cards are not semantically structured e.g. by using <article> for the whole card and a heading <h3> with the product name, there is no programmatically determinable context that makes the link purpose clear to the user.

Interactive, focusable elements like links must have an accessible name. The name should state the link's purpose. If not directly, it must be determinable by context.

Remediation Notes

Ensure, link purpose is determinable. This can be done by adding "GERÄT XYZ in den Warenkorb legen" as text alternative. Ideally, a proper semantic structure on product card is used.

<article>
  <h3 id="heading-PRODUCT">PRODUCT NAME</h3>
  ...
  <a href="..." id="link-PRODUCT" aria-labelledby="heading-PRODUCT link-PRODUCT">
    Produktdetails
  </a>
</article>
Priority: Critical Medium Page: Smartphones Observation Permalink
Observation Details

Focusing product card by keyboard navigation does not add visible focus state.

Remediation Notes

A focus state must be defined for all interactive, focusable elements. Ideally, a visual distinct focus state uses an outline or other larger area changes to the product card.

If using color change for focus state, ensure to meet minimum color contrast between different states (1.4.3 Contrast (Minimum)) and to not only rely on color change (1.4.1 Use of Color).

Priority: Critical Medium Page: Smartphones Observation Permalink
Accompanying Files
Observation Details

Focusing the focusable elements inside the filter dialog window ("Weiter anzeigen", "Zurücksetzen", "Filter anwenden") by keyboard navigation does not add visible focus state.

Remediation Notes

A focus state must be defined for all interactive, focusable elements. Ideally, a visual distinct focus state uses an outline or other larger area changes to the focused element.

If using color change for focus state, ensure to meet minimum color contrast between different states (1.4.3 Contrast (Minimum)) and to not only rely on color change (1.4.1 Use of Color).

Priority: Moderate High Page: Smartphones Observation Permalink
Observation Details

Opening a footnote dialog window can obscure underlying focused elements (partially AND completely). Since the footnote dialog window cannot be closed via ESC in that situation, the underlying element cannot be made visible without removing the keyboard focus from it.

Remediation Notes

Footnotes must be made accessible. They must trap the keyboard focus when opened and must not allow scrolling of the page and focusing of underlying interactive elements. This will remediate the obscuring of focused elements.

Priority: Best Practice Low Page: Smartphones Observation Permalink
Accompanying Files
Observation Details

Horizontal scrolling is necessary for manufacturer filter on smaller viewports. There is no indication by visible scrollbar nor a secondary mechanism to navigate by single pointer events (buttons).

Remediation Notes

Treat scrollable area as carousel or make scrollbar visible.

Ideally, the filter buttons should reflow correctly into multiple rows.

Priority: Moderate Unknown Page: Smartphones Observation Permalink
Observation Details

When opening a footnote dialog window, the keyboard focus is not set to said dialog window. This leads to multiple issues:

  • The contents of the dialog window are not accessible via keyboard.

  • The dialog window can not be closed with the keyboard (easily or at all).

  • While the dialog window is open, keyboard navigation of the underlying page is still possible; the dialog window however blocks the view.

  • Since keyboard navigation stays possible, opening multiple dialog windows above each other also is possible.

Remediation Notes

Opening a dialog window with the keyboard must set the focus into the dialog window. Preferably onto the close button as the first interactive element in the dialog window. The focus must also be trapped inside the dialog window so the underlying page cannot be reached by keyboard while the dialog window is opened.

A better approach would be to use a <dialog> element for dialog windows.

Priority: Critical High Page: Smartphones Observation Permalink
Accompanying Files
Observation Details

Filter button is not accessible. All filtering is impossible to be operated by keyboard.

Inside filter dialog window, only collapsible and "main buttons" at dialog window bottom are accessible via keyboard navigation. All other elements are not.

All interactive elements MUST be accessible via keyboard. As a Level A success criterion, it is crucial for operating a website.

Remediation Notes

Ensure complete navigation and operation by keyboard is possible. All interactive elements MUST be reachable by keyboard.

Only use semantic HTML elements to create interactive elements to ensure the base accessibility. If building custom interactive elements instead, you MUST refer to something like BFIT-Bund Handreichung "Accessible design of user interface elements" to ensure all necessary functionality is available. This MUST be done for all interactive elements that are custom built. Every button, every input, every link, ... Thus, using proper semantic HTML will decrease time and necessary effort to complete dramatically.

Please refer to observation 1.3.1 Info and Relationships – "Semantic HTML" for general remarks about the use of semantic HTML.

For example, filtering dialog window should use buttons, radio button groups, checkmark groups, etc. instead of relying on dozens/hundreds of nested <div> to "rebuild" functionality, native HTML elements already deliver.

The "Filter" button to open the filter dialog window looks as follows:

<div class="... clickable" data-qa="LST_FilterButton">
  <i class="..." id="svg_wrapper_undefined">
    <svg width="1em" height="1em" viewBox="0 0 20 20" color="currentColor">
      <path>...</path>
    </svg>
  </i>
  <p class="...">Filter</p>
</div>

When it could just be:

<button><svg aria-hidden="true">...</svg>Filter</button>
Priority: Serious High Page: Smartphones Observation Permalink
Observation Details

Opening the filter dialog window can obscure underlying focused elements (partially AND completely). Since the dialog window cannot be closed via ESC in that situation, the underlying element cannot be made visible without removing the keyboard focus from it.

Remediation Notes

Dialog windows must be made accessible. They must trap the keyboard focus when opened and must not allow scrolling of the page and focusing of underlying interactive elements. They must be closable via ESC and the close button must be operable by keyboard as well. This will remediate the obscuring of focused elements.

Priority: Moderate Low Page: Smartphones Observation Permalink
Observation Details

The asterisk icon to activate a footnote dialog window does not meet minimum target size (24×24px). The icon's target size is 15×15px, making it hard for certain people to reliably click it. This includes people with motor disabilities, people using devices like styluses, people in moving vehicles, and mobile users altogether. Especially considering its use inside other interactive elements (e.g. footnote in badge inside product tile).

Remediation Notes

Ensure, making all interactive elements at least 24×24px in size. This does not necessarily mean to make the icon itself 24×24px, if you can ensure a surrounding area of said size to be the clickable area of the icon.

A better approach would however be to not use interactive elements below this minimum size. Also consider mobile users when designing these elements. An increased target size of 44×44px (see success criterion 2.5.5 Target Size (Enhanced) [AAA]) will immensely help mobile users as well.

Priority: Moderate Low Page: Smartphones Observation Permalink
Observation Details

The info icon "i" to activate a footnote dialog window does not meet minimum target size (24×24px). The icon's target size is ~18×18px, making it hard for certain people to reliably click it. This includes people with motor disabilities, people using devices like styluses, people in moving vehicles, and mobile users altogether.

Remediation Notes

Ensure, making all interactive elements at least 24×24px in size. This does not necessarily mean to make the icon itself 24×24px, if you can ensure a surrounding area of said size to be the clickable area of the icon.

A better approach would however be to not use interactive elements below this minimum size. Also consider mobile users when designing these elements. An increased target size of 44×44px (see success criterion 2.5.5 Target Size (Enhanced) [AAA]) will immensely help mobile users as well.

Priority: Moderate Medium Page: Smartphones Observation Permalink
Observation Details

Clicking on a manufacturer filter button will filter the product list without confirmation of the action.

Remediation Notes

As used in the filter dialog window already, a "Filter anwenden" button could fix this issue, although for the given structure, this might not be the best option.

The buttons should have appropriate accessible names to describe their purpose. See ___ for an example solution. The success criterion says, the change of content or context can be announced prior to making the change. Having the accessible name set properly, would meet this for screen reader users. For other users it would be best to visually indicate by text. E.g., introducing the filter section by a short text:

<section>
  <h2>Geräteliste filtern und sortieren</h2>
  <h3>Filter</h3>
  <p> <!-- Add description -->
  <button> <!-- Filter dialog window -->
  <fieldset> <!-- Checkbox Group for direct filters -->

That description could be:

"Öffnen Sie die gesamten Filteroptionen über einen Klick auf den 'Filter' Button oder klicken sie auf einen der darauffolgenden Hersteller-Buttons, um die Geräteliste entsprechend zu filtern."

Or you could even set a <legend> inside the checkbox group to properly describe their purpose.

Observation Details

Links are only differentiated from normal body text (black, rgb(38, 38, 38)) by use of color (blue, rgb(0, 115, 159)).

In addition, the contrast ratio of link text color and body text color also is insufficient (2.8:1 < 3:1).

Links can be found, e.g. in

  • footnote dialog windows "Ankaufsbonus", as "Teilnahmebedingungen" links.

  • "Tarif ändern" dialog window as "Preisliste, Leistungsbeschreibung und AGB"

Remediation Notes

Ensure, links do not rely on color alone to be differentiated from (surrounding) body text. Preferably use underline to indicate text links as it is the default –thus user friendly– method.

Priority: Moderate Medium Page: Smartphones Observation Permalink
Accompanying Files
Observation Details

On base viewport size of 320×256px and page zoom of 100%, the available vertical space in the "Tarif ändern" dialog window, due to fixed top and bottom bars, is just 67px.

Remediation Notes

While not a failure for the given success criterion, the limited vertical space in the dialog window makes navigating the dialog's contents extremely difficult. Evaluation of the need for the fixed top bar and the large fixed bottom bar should be done.

Consistency with other dialog windows could remove the (empty) top bar and/or add the close button to a fixed position of the scrollable dialog window.

The fixed bottom bar could e.g. be shrunken by

  • decreasing margins and/or paddings,

  • decreasing the size of the primary button,

  • changing the layout to display price information and primary button side-by-side.

Priority: Critical Low Page: Smartphones Observation Permalink
Accompanying Files
Observation Details

The display of a product's color options is not using high enough contrast.

As the information conveyed is necessary to understand the content, the color contrast ratio must be at least 3:1. Some color options barely reach color contrast ratio of 1.1:1.

Please note: The accompanying screenshot is showing one example product card. This observation spans multiple products. Ensure, all options meet required minimum contrast ratio.

Remediation Notes

Ideally, the colors would be described as text.

If this is not possible, ensure a minimum contrast ratio of 3:1. The easiest way to achieve this is by using a simple outline on the color variant circle:

.variantCircle {
  outline: .1px solid;
}

This way, the contrast ratio is not calculated to the background color but to the outline color.

Priority: Best Practice Low Page: Smartphones Observation Permalink
Accompanying Files
Observation Details

Color contrast ratio of grey text on grey background in sidebar (4.8:1), just meeting contrast minimum requirements (4.5:1). Given the contrast ratio and the smaller font size, while meeting the criterion's requirements, text could be more difficult to be read by certain user groups.

Remediation Notes

No remediation necessary, as the contrast ratio does exceed the required ratio slightly.

Accompanying Files
Observation Details

Link text on grey background has contrast ratio of 4.2:1 which does not meet Color contrast ratio minimum requirements of 4.5:1. See:

  • All links in grey area of sidebar

Remediation Notes

Ensure, all text content meets required contrast minimum.

Accompanying Files
Observation Details

Magenta text on magenta background has contrast ratio of 4.3:1 which does not meet color contrast ratio minimum of 4.5:1 for text content.

Remediation Notes

Ensure all text content meets minimum color contrast requirements.

Priority: Serious Medium Page: Smartphones Observation Permalink
Accompanying Files
Observation Details

On base viewport size of 1024×768px and page zoom of 200%, the available:

  • vertical space in the "Tarif ändern" dialog window, due to fixed top and bottom bars, is less than 400px.

  • horizontal space, due to page zoom, is limited and cuts of hover tooltips

All content must be presented without loss of information or functionality.

Remediation Notes

The contents of the tooltip must stay accessible on smaller viewports. Ensure to display the contents within the boundaries of the viewport.

As the site is already working with dialog windows and collapsible elements, the easiest way to achieve this is to eliminate the tooltip functionality, as they (tooltip, dialog window, collapsible) serve the same purpose of hiding information. For this, the other used method must meet all success criteria, but this would eliminate the need of meeting them with yet another mechanism.

Hiding information from the user never is good user experience but the use of dialog windows or collapsible elements is widespread. While the use is no clear failure of accessibility criteria, concerning WCAG, one could argue it being at least a grey area for 3.2.4 Consistent Identification: "Components that have the same functionality within a set of Web pages are identified consistently." – this audit will not add this as a failure but asks to evaluate the use of multiple components that have the same purpose. Ideally, the functionality "hide from user" has a single way to be done. Splitting into a trigger being "block level" (FAQ) and "inline level" (Footnotes) seems reasonable, but adding another mechanism does not seem necessary.


While not a failure for the given success criterion, I also attached a screenshot showing the limited vertical space in the dialog window, which makes navigating the dialog's contents extremely difficult. Evaluation of the need for the top bar and the large bottom bar should be done.

Priority: Serious Medium Page: Smartphones Observation Permalink
Accompanying Files
Observation Details

Loading more products into product list by clicking "Weitere Geräte anzeigen" should move the focus, so that the first dynamically added element becomes the next focusable element. This is not the case.

Using keyboard navigation, after clicking the button, the content is correctly loaded, but the focus is set in a way, so that the next focusable element (pressing TAB) is the button again; this means, navigating the product list by keyboard becomes nearly impossible

Using a screen reader to navigate (see attached GIF screencast),

  • after clicking the button, the content is loaded correctly

  • screen reader announces the change in URL (adding "?currentPage=2&tariffld=MF_17496&itemPerPage=12&e

    xcludedCurrentPage=1&bp=acquisition")

  • focus is set, so that to the next focusable element is the last element that was focused before the button. In this case, the price of the previous product card, which, while not being exactly what is needed, at least is not wrong

This however only works, when arriving at the button from the "right direction". Selecting the button from the next element in the DOM results in the focus being set to this exact element after dynamically loading of the new products. This way, the focus is set to after the product list and navigating to newly added devices is again nearly impossible

Remediation Notes

Important note:

While technically, this behavior does not completely remove access which would be needed to justify priority 1 "Critical", the combination of this issue with other issues, limiting the user experience with keyboard and screen reader navigation immensely already, still does make this issue a critical one.

Treating it as such in the current state, keyboard and screen reader users might not at all be able to navigate more than one page of products in the product list within the shop, is highly recommended.


Ensure, clicking the button "Weitere Geräte anzeigen" will result in:

  • Loading more products into the product list

  • Not announcing change of query parameters in the URL, as long as the change is not useful information to be announced

  • But ideally do announce the change of content (e.g. by using an ARIA live region and announce "X weitere Geräte werden angezeigt")

  • Setting the focus to the first focusable element before the first newly added element

    • This must be indicated by DOM structure, not by the element that was focused before the button was focused

    • This must work with keyboard and screen reader navigation alike

Accompanying Files
Observation Details

The manufacturer filter (direct filter buttons) can only be operated by horizontal scroll on desktop and by dragging movement on a mobile device. As the dragging needs a base precision to stop the movement at the right time to reach the wanted filter button, a single pointer alternative for operation / navigation must be offered.

The viewport of the example screenshot is 375×635px, simulating an Apple iPhone 11 Pro. While this is an old device and more current phones do tend to have increased viewport widths, this test would look even more drastic on the 320px viewport width, the WCAG sets for e.g. 1.4.10 Reflow.

As the manufacturer filter buttons are accessible within the filter options dialog window as well, the issue is rated priority "Minor" and the impact on accessibility conformance is low. However, usability / user experience is affected by this issue, as the user is not aware of those buttons being duplicated from the filter option dialog window.

Remediation Notes

Possible methods to remediate and to ensure access to the buttons:

  • Adding pagination (single pointer arrow buttons)

  • Reflow to multiple lines of buttons (also see 1.4.10 Reflow)

Note, that the WCAG, and success criterion 2.5.7 Dragging Movements specifically, do not require presentation / layout parity of different devices, viewports, etc. This means, while functionality and information parity is a must, the layout and presentation can be different.

This allows for another method to remediate, by only displaying the amount of buttons, fitting the available space. So while "all" buttons are shown on larger viewports, the number can decrease on smaller viewports, as long as the functionality parity is met, which is the case, with the filter buttons being accessible via the filter dialog window.

Positive side-effect of the latter option is one less mechanism (horizontally scrolling items) to be maintained.

Priority: Critical Medium Page: Smartphones Observation Permalink
Observation Details

The filter buttons have no accessible name but are "labeled" by their text and/or image content.

Remediation Notes

The buttons MUST be user accessible interface components. Ideally, use a native semantic HTML <button> element for the filter button, <fieldset> including <input type="checkbox"> for the "direct manufacturer filter" buttons, and explicit labels to go with them. As is, there is neither a programmatically determinable connection between the "labels" and the buttons, nor does the buttons have any accessible name, let alone one including the label.

Please (also) refer to observation 1.3.1 Info and Relationships – "Semantic HTML" for general remarks about the use of semantic HTML.

Priority: Moderate Unknown Page: Smartphones Observation Permalink
Observation Details

Multiple elements are not using proper semantic HTML but instead are custom built, leading to numerous issues e.g. with keyboard accessibility (see 2.1.1 Keyboard). Including but not limited to, are the following elements:

  • Links (Product cards)

  • Buttons (Filter, Info icons, Footnote Asterisks)

Remediation Notes

Using native semantic HTML is always the preferred method.

If this is absolutely impossible in a situation, re-building can be viable but comes with dramatically increased time and effort to meet technical requirements. The BFIT-Bund Handreichung "Accessible design of user interface elements" shows technical requirements (e.g. keyboard navigation, mouse operation, etc.) for interactive elements. Looking into Accessible design of user interface elements – Links, quickly shows the complexity of what is required to meet the functionality, a properly used <a href="..."> element already includes.

Please (also) refer to observation 1.3.1 Info and Relationships – "Semantic HTML" for general remarks about the use of semantic HTML.

Priority: Critical Significant Page: Smartphones Observation Permalink
Observation Details

Product color "variant circles" use <div value="..." aria-describedby="..." role="button" tabindex="0">. The buttons are accessible by keyboard but have no functionality at all, which results in multiple (color count) non-interactive but focusable elements. For each card, a user of keyboard navigation has to click up to six times to get to the next card.

aria-describedby="tooltip-content-id" refers to a <span> element in the sidebar, with the following content. This whole content is the accessible name of each of the color circle "buttons":

Jubiläumsaktion: Als Neukunde 240 € Wechselbonus sichern


Internet

  • 50 GB Highspeed-Volumen (mit LTE Max/5G)

  • Mit einer Pluskarte zu 19,95 € monatlich: deutschlandweit unbegrenztes Datenvolumen für den Hauptvertrag und alle Pluskarten

  • Geschwindigkeit im Download: bis zu 300 MBit/s

  • Geschwindigkeit im Upload: bis zu 50 MBit/s

  • Nach Verbrauch des Highspeed-Volumens wird die Geschwindigkeit im jeweiligen Monat auf max. 64 KBit/s (Download) und 16 KBit/s (Upload) reduziert.


Inklusivleistungen

  • Telefonie- und SMS-Flat in alle deutschen Netze:
    Telefonieren Sie unbegrenzt ins deutsche Mobilfunk- und Festnetz und versenden Sie unbegrenzt SMS.

  • Hotspot Flat:
    Mit einem Telekom HotSpot in Ihrer Nähe können Sie auch unterwegs surfen, ohne dabei das eigene Datenvolumen zu verbrauchen. Mehr Infos unter www.hotspot.de

  • Roaming:
    In der EU inkl. Schweiz & Großbritannien surfen und telefonieren Sie auf vorübergehenden Reisen ohne zusätzliche Kosten wie im Inland.


Tarife ohne Mindestlaufzeit

  • Infos zu Tarifen ohne Mindestlaufzeit, die lediglich ohne Gerät erhältlich sind, finden Sie unter www.telekom.de/flex-mobil oder in der Preisliste.


Produktinformationsblatt (PDF)


Preisliste, Leistungsbeschreibung und AGB

As the accessible name, this whole text content is announced by assistive technology for every color variant circle.


All interactive elements that do not use native, interactive HTML elements must be built in a way, that semantic information is provided and updates to semantic information are accessible via assistive technology. Building interactive components with non-semantic HTML elements results in inaccessible content. These accessibility issues might occur:

  • Interactivity of element is not announced → user will not know, that element is interactive

  • Changes to states (e.g. collapsed/expanded) is not announced → user will not know of the change

  • Target resource is not announced → e.g. user will not know, where a link leads to

  • Interactive action is not announced → e.g. user will not know, that a dialog window will be opened

Issues in 4.1.2 Name, Role, Value often occur together with other issues e.g. in 2.1.1 Keyboard and 2.4.7 Focus Visible.

Remediation Notes

Ensure, only using button functionality for actual buttons. When button functionality is needed, ensure using a semantic HTML button element, instead trying rebuilding button functionality with generic non-semantic HTML elements.

Using non-native, non-semantic HTML elements to build functionality, native, semantic HTML elements already provide should be a rare occasion. As the first rule of ARIA use describes, if there is a semantic HTML with needed or wanted functionality this should always be used instead of ARIA.

Ensure, semantic HTML elements are used for all interactive elements and components. Refer to BFIT-Bund Handreichung "Accessible design of user interface elements" for technical requirements for building interactive user interface components.

Priority: Critical Significant Page: Smartphones Observation Permalink
Accompanying Files
Observation Details

Assistive technology relies on use of proper semantic HTML. The screenshots show lists of elements, a user of assistive technology gets, using e.g. macOS VoiceOver screen reader rotor:

  • Landmarks list

  • Links list

  • Buttons list

All of these give an idea of improper use of semantic HTML. Observations:

Landmarks

  • Main and navigation landmarks are used

  • Each product price uses three(!) semantic article elements, two of which are empty

Each product price (e.g. "889,95 €") is marked up as follows:

<div class="...">
  <div class="...">
    <div class="...">
      <section class="...">
        Einmalig
      </section>
      <article class="...">
        <div class="...">
          889,95 €
        </div>
        <div class="...">
          <svg class="...">
            <line y1="80%" x2="100%" y2="20%"></line>
            <line y1="80%" x2="100%" y2="20%"></line>
          </svg>
          <div class="...">
            <div class="..." data-qa="...">
            </div>
          </div>
        </div>
      </article>
    </div>
  </div>
  <section class="...">
    <div class="...">
      <article class="...">
        <div class="...">
          <svg class="...">
            <line y1="80%" x2="100%" y2="20%"></line>
            <line y1="80%" x2="100%" y2="20%"></line>
          </svg>
          <div class="...">
            <div class="..." data-qa="...">
            </div>
          </div>
        </div>
      </article>
      <div class="...">
        <article class="...">
        </article>
      </div>
    </div>
  </section>
</div>

Links

  • Product card link elements are empty

  • assistive technology will always try to find a fallback for missing information; in this case, the last part of the link's URL path (stripping query parameters) is used; href="/shop/geraet/apple/apple-ipad-air-13-2025-m3/space-grau-256-gb?tariffId=MF17498&tariffSubTenId=MF17496&categoryId=alle-geraete"space-grau-256-gb

  • As the product color and storage is part of the URL path, multiple products with same color and storage will have the same fallback name (see e.g. "space-schwarz-256-gb")

  • "Weitere Geräte anzeigen" has button functionality but is using a semantic link element

  • "Tarif ändern" has button functionality but is using a semantic link element

  • "Tarif entfernen" has button functionality but is using a semantic link element

  • "Preisübersicht anzeigen"

    • has button functionality but is using a semantic link element

    • uses a <div role="link"> inside the aforementioned link element

    • as two nested links are used, the link is duplicated in the link list

Buttons

  • Color variant circles use buttons as <div value="#262529" class="..." aria-describedby="tooltip-content-id" role="button" tabindex="0">...</div>;

  • Color variants use buttons without any functionality

  • Color variant buttons are labeled by sidebar content tooltip-content-id

  • All color variant buttons are labeled the same, thus cannot be differentiated

  • "* Schaltfläche" announces footnotes. All footnote buttons are announced the same: "*" / "STAR"

Remediation Notes

Using non-native, non-semantic HTML elements to build functionality, native, semantic HTML elements already provide should be a rare occasion. As the first rule of ARIA use describes, if there is a semantic HTML with needed or wanted functionality this should always be used instead of ARIA.

Ensure, semantic HTML elements are used for all interactive elements and components. Refer to BFIT-Bund Handreichung "Accessible design of user interface elements" for technical requirements for building interactive user interface components.


Ensure,

  • only links (that lead to resources) are using HTML link elements

  • only buttons (that perform actions) are using HTML button elements

  • no generic element is used, if a native, semantic HTML element with wanted functionality exists

  • all interactive elements are labeled uniquely, to be identifiable by assistive technology