Checked 9/24/2026 · https://www.heise.de/
5 critical barriern · plus 2 to check.
Since the previous scan: no change.
How is the score formed? (100 starting points)
| 40 of 519 images without an alt attribute | -18 |
| 4 form fields without a recognisable label | -18 |
| 16 link(s) without a recognisable name in the HTML | -18 |
| 6 button(s) without a name in the HTML | -18 |
| 5 CSS rulen with possibly too low text contrast | -18 |
| No <h1> heading in the delivered HTML | -7 |
| 6 duplicate id attributes | -7 |
| Result | 0 / 100 |
Perceivable
40 of 519 images without an alt attribute
Images loaded via JavaScript are not counted here.
<img src="data:image/svg+xml;base64,PD94bWwgdmVyc2" width="3377" height="1898"><img src="data:image/svg+xml;base64,PD94bWwgdmVyc2" width="1920" height="1079"><img src="data:image/svg+xml;base64,PD94bWwgdmVyc2" width="3200" height="1798"><img src="data:image/svg+xml;base64,PD94bWwgdmVyc2" width="300" height="250">
This is what you should do: Give each <img> an alt: a short description for meaningful images, alt="" for purely decorative ones.
4 form fields without a recognisable label
Check whether there is an aria-label set via JavaScript.
<input type="text" name="q" placeholder="Suchen"><input type="text" name="q" placeholder="Suchen"><select name="in"><input type="text" name="fs" placeholder="Im Preisvergleich suchen">
This is what you should do: Link each field to a <label for> element or set aria-label / aria-labelledby. A placeholder alone is not enough.
5 CSS rulen with possibly too low text contrast
Required: 4.5:1 (normal) or 3:1 (large text). With an “assumed page background” the actual background could not be determined reliably — check in the browser if in doubt. Found among others: `.dark a-gift-link dialog`: #e0e0e0 auf #fff (Vorfahren-Hintergrund) = 1.32:1 · `.a-android-native-app-prompt__close-banner`: #323232 auf rgba(0,0,0,0) = 1.64:1 · `a-opt-in[is-active] .opt-in__footnote`: #959595 auf #ffffff (Standard) (Seitenhintergrund, angenommen) = 3.00:1 · `.a-android-native-app-prompt__load-app`: #fff auf #27a209 = 3.36:1 · `a-topic .topic-label`: #fff auf #ed3725 = 4.06:1
.dark a-gift-link dialog, .a-android-native-app-prompt__close-banner, a-opt-in[is-active] .opt-in__footnote, .a-android-native-app-prompt__load-app, a-topic .topic-label
This is what you should do: Darken the text colour or lighten the background until the relevant minimum value is reached. Never use colour as the only distinguishing feature.
Operable
16 link(s) without a recognisable name in the HTML
Empty links or just an icon/image without alt. An aria-label set via JavaScript is not recognised here.
<a-click-performance><a name="topnavi.ho.magazine-nav.ct" class="hover:bg-brand dark:hover:<a name="topnavi.ho.magazine-nav.ix" class="hover:bg-brand-alternative<a name="topnavi.ho.magazine-nav.foto" class="hover:bg-brand dark:hove
This is what you should do: Add visible link text, or use aria-label or an image with alt for icon links.
6 button(s) without a name in the HTML
Buttons without text and without an aria-label are mute to screen readers — unless the name is set via JavaScript.
<button class="scroll-left text-ho-text"><button class="scroll-right text-ho-text"><button class="scroll-left text-ho-text"><button class="scroll-right text-ho-text">
This is what you should do: Add button text or set an aria-label.
No <h1> heading in the delivered HTML
Each page should begin with exactly one h1. On pages built via JavaScript the h1 may only appear in the browser — then check in the rendered DOM.
body
This is what you should do: Insert a meaningful <h1> as the first heading (ideally already server-side).
Robust
6 duplicate id attributes
e.g. heisetopnavi_search, HEI_M_Incontent-2-label, HEI_M_Incontent-2, circle. Breaks label-for and aria links.
[id]
This is what you should do: Assign unique ids.
Next steps
- 40 of 519 images without an alt attribute. Give each <img> an alt: a short description for meaningful images, alt="" for purely decorative ones.
- 4 form fields without a recognisable label. Link each field to a <label for> element or set aria-label / aria-labelledby. A placeholder alone is not enough.
- 16 link(s) without a recognisable name in the HTML. Add visible link text, or use aria-label or an image with alt for icon links.
- 6 button(s) without a name in the HTML. Add button text or set an aria-label.
- 5 CSS rulen with possibly too low text contrast. Darken the text colour or lighten the background until the relevant minimum value is reached. Never use colour as the only distinguishing feature.
Weekly re-scan, JS-rendered, email on new barriers — coming soon.
Create an accessibility statement →
Method & limits
On 9/24/2026 the HTML that www.heise.de delivers on a first visit without login was checked, plus up to four linked CSS files from the same domain. Checked: colour contrast (from CSS), text alternatives, form labelling, names of controls, heading structure, page title and page language, zoom lock, duplicate ids, positive tabindex values, landmarks.
Not checked: anything that arises via JavaScript, keyboard operability, visible focus, focus order, screen-reader announcement, content behind login, subpages. The automated test finds roughly 20–35% of WCAG breaches — the rest needs a manual check. A snapshot, not a legal decision.
Overlay widgets (accessibility buttons that switch contrast or font size) do not make a site conformant — the barriers found have to be fixed in the source code. Why overlays don't help