Accessibility
· 13 checks — Landmarks, headings, alt text, forms, and link quality rolled into one auditable list.FLink & Button QualityAction44 issue(s) across 270 links and 204 buttonsFIX
| Element | Text | Issue | Suggested Fix |
|---|---|---|---|
| https://www.facebook.com/IOLnews | Facebook account | new tab | Add '(opens in new tab)' to text |
| https://x.com/IOL | Twitter account | new tab | Add '(opens in new tab)' to text |
| https://www.instagram.com/iolnews | Instagram account | new tab | Add '(opens in new tab)' to text |
| https://www.tiktok.com/@iolnews | Tiktok account | new tab | Add '(opens in new tab)' to text |
| https://www.youtube.com/channel/UCeQFd7S… | YouTube account | new tab | Add '(opens in new tab)' to text |
| https://google.com/preferences/source?q=… | Add IOL as a preferred source … | new tab | Add '(opens in new tab)' to text |
| https://news.google.com/publications/CAA… | Follow IOL on Google News | new tab | Add '(opens in new tab)' to text |
| (empty) | empty | Add link text or aria-label | |
| (empty) | empty | Add link text or aria-label | |
| (empty) | empty | Add link text or aria-label | |
| (empty) | empty | Add link text or aria-label | |
| (empty) | empty | Add link text or aria-label | |
| (empty) | empty | Add link text or aria-label | |
| (empty) | empty | Add link text or aria-label | |
| (empty) | empty | Add link text or aria-label | |
| (empty) | empty | Add link text or aria-label | |
| (empty) | empty | Add link text or aria-label | |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
Links without text are announced as raw URLs by screen readers.
a.list_disabled__gs2Bi (#819 on page); a (#822 on page); a.list_disabled__gs2Bi (#1073 on page); a (#1076 on page); a.list_disabled__gs2Bi (#1312 on page); a (#1315 on page); a.list_disabled__gs2Bi (#1573 on page); a (#1576 on page); a.list_disabled__gs2Bi (#1814 on page); a (#1817 on page)
Links with no accessible text (empty <a></a>, image-only no alt, icon-only no aria-label) are unidentifiable to screen readers.
Source: WCAG 2.1 SC 2.4.4
Add '(opens in new tab)' to link text or aria-label.
https://www.facebook.com/IOLnews; https://x.com/IOL; https://www.instagram.com/iolnews; https://www.tiktok.com/@iolnews; https://www.youtube.com/channel/UCeQFd7S6urAw6mm0kS4xuhg; https://google.com/preferences/source?q=https%3A%2F%2Fiol.co.za; https://news.google.com/publications/CAAqIggKIhxDQklTRHdnTWFnc0tDV2x2YkM1amJ5…
Links with target="_blank" without rel="noopener" leak the originating page's window context — security and UX issue.
Learn more ▾ ▴
Without rel="noopener", the new tab can navigate the original tab via window.opener (tab-nabbing attack). Modern browsers default to noopener for target=_blank but only since recent versions. Always set rel="noopener noreferrer" explicitly.
Source: MDN target / OWASP
Icon-only buttons need an aria-label so screen readers can announce them.
button.article-share_clip-boadrd-btn__Rwiri (#448 on page); button.article-share_clip-boadrd-btn__Rwiri (#495 on page); button.article-share_clip-boadrd-btn__Rwiri (#538 on page); button.article-share_clip-boadrd-btn__Rwiri (#591 on page); button.article-share_clip-boadrd-btn__Rwiri (#631 on page); button.article-share_clip-boadrd-btn__Rwiri (#680 on page); button.article-share_clip-boadrd-btn__Rwiri (#721 on page); button.article-share_clip-boadrd-btn__Rwiri (#764 on page); button.article-share_clip-boadrd-btn__Rwiri (#805 on page); button.article-share_clip-boadrd-btn__Rwiri (#872 on page) (+24 more)
Buttons with no accessible text (icon-only, no aria-label) can't be activated by voice control or understood by screen readers.
Source: WCAG 2.1 SC 4.1.2
F404 Error PageActionHTTP 404, bare pageFIX
DWeb ManifestActionValid manifestFIX
DDark Mode SupportActionTheme color onlyFIX
Detection limited to meta tags and inline styles.
DPrint StylesheetActionNo print stylesFIX
CLandmark StructureAction1 landmarksREVIEW
Add a skip link as the first focusable element so keyboard users can bypass repeated navigation.
Without a skip-nav link, keyboard users tab through every nav item before reaching content — every page, every visit.
Learn more ▾ ▴
WCAG 2.4.1 (Bypass Blocks) requires a mechanism to skip past repeated content. The standard implementation is a 'Skip to main content' link that's the first focusable element, visually hidden until focused. Three lines of HTML + four of CSS.
Source: WCAG 2.1 SC 2.4.1
BFavicon & Branding6 icon(s) detectedREVIEW
BLighthouse Accessibility AuditsScore 89/100 — 3 failing, 24 passedREVIEW
Accessibility
These checks highlight opportunities to improve the accessibility of your web app. Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so manual testing is also encouraged.
Contrast
Low-contrast text is difficult or impossible for many users to read. Learn how to provide sufficient color contrast.
Performance issues directly impact user engagement and conversion rates.
| Failing Elements |
|---|
Yasmine Jacobs div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span.attribution-and-updated_author-text__tITz2 > a |
Published 6 hours ago div.item_container__ExORZ > div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span |
6 hours ago div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span > time |
Sinenhlanhla Masilela div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span.attribution-and-updated_author-text__tITz2 > a |
Published 10 hours ago div.item_container__ExORZ > div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span |
10 hours ago div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span > time |
IOL Reporter div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span.attribution-and-updated_author-text__tITz2 > a |
Published 10 hours ago div.item_container__ExORZ > div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span |
10 hours ago div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span > time |
Mthobisi Nozulela div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span.attribution-and-updated_author-text__tITz2 > a |
Published 10 hours ago div.item_container__ExORZ > div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span |
10 hours ago div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span > time |
Nomonde Zondi
|
Published 11 hours ago div.item_wrap__XzJ3f > div.item_container__ExORZ > div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ |
Published 11 hours ago div.item_container__ExORZ > div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span |
11 hours ago div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span > time |
Robin-Lee Francke div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span.attribution-and-updated_author-text__tITz2 > a |
Published 12 hours ago div.item_container__ExORZ > div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span |
12 hours ago div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span > time |
Willem Phungula
|
Published 11 hours ago div.item_wrap__XzJ3f > div.item_container__ExORZ > div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ |
Published 11 hours ago div.item_container__ExORZ > div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span |
11 hours ago div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span > time |
Wendy Dondolo div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span.attribution-and-updated_author-text__tITz2 > a |
Published 14 hours ago div.item_container__ExORZ > div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span |
14 hours ago div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span > time |
The Washington Post
|
Published 3 hours ago div.item_wrap__XzJ3f > div.item_container__ExORZ > div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ |
Published 3 hours ago div.item_container__ExORZ > div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span |
3 hours ago div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span > time |
Siphelele Dludla div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span.attribution-and-updated_author-text__tITz2 > a |
Published 12 hours ago div.item_container__ExORZ > div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span |
12 hours ago div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span > time |
AFP div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span.attribution-and-updated_author-text__tITz2 > a |
Published 20 hours ago div.item_container__ExORZ > div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span |
20 hours ago div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span > time |
Gerry Cupido div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span.attribution-and-updated_author-text__tITz2 > a |
Published 10 hours ago div.item_container__ExORZ > div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span |
10 hours ago div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span > time |
Partnered Content div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span.attribution-and-updated_author-text__tITz2 > a |
Updated 1 day ago div.item_container__ExORZ > div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span |
1 day ago div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span > time |
Ashley Lechman div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span.attribution-and-updated_author-text__tITz2 > a |
Updated 2 weeks ago div.item_container__ExORZ > div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span |
2 weeks ago div.item_copy__dMVbw > div.attribution-and-updated_article-attribution-and-update__Iz7z_ > span > time |
These are opportunities to improve the legibility of your content.
Navigation
Properly ordered headings that do not skip levels convey the semantic structure of the page, making it easier to navigate and understand when using assistive technologies. Learn more about heading order.
Performance issues directly impact user engagement and conversion rates.
| Failing Elements |
|---|
How South Africa's new anti-spam laws will protect you from unwanted calls div.item_wrap__XzJ3f > div.item_container__ExORZ > div.item_copy__dMVbw > h4.item_title__EVHHo |
These are opportunities to improve keyboard navigation in your application.
Best practices
Disabling zooming is problematic for users with low vision who rely on screen magnification to properly see the contents of a web page. Learn more about the viewport meta tag.
Informational: a Permissions-Policy directive showing feature -> allowed origins.
Source: MDN Permissions-Policy
| Failing Elements |
|---|
head > meta head > meta |
These items highlight common accessibility best practices.
AHeading Hierarchy42 headings, 1 skip(s)PASS
- H4 Top StoriesWhat you need to know right now
- H1 'Leave it between the President and me': Masemola on Ramaphosa's decision over his future
- H4 How South Africa's new anti-spam laws will protect you from unwanted calls skipped
- H4 Limpopo food poisoning: Six dead, over 70 hospitalised after eating at a funeral
- H4 Emmarentia road rage tragedy highlights deeper driver stress crisis
- H4 Watch VideoWATCH | SIU freezes R76.5 million in assets linked to Eskom corruption investigation
- H4 Former soldier's shocking claim: Wife shot herself during struggle
- H4 Police probe burglary at home of alleged gang leader Jerome ‘Donkie’ Booysen
- H4 IFP officially recognises Hlabisa as its leader for upcoming elections
- H4 Nearly 480 flood incidents reported across Cape Town as heavy rains hit the city
- H4 How Nick Fuentes turns radicalisation into a profitable business model
- H4 Fuel Crisis
- H4 Energy security takes centre stage as African oil refiners push for industrial growth
- H4 Navigating economic turbulence: households face rising costs and interest rate pressures
- H4 Panel beaters' industry applauds insurer relief measures as fuel surge threatens sector
- H4 Fuel price hikes and inflation: The looming financial crisis for South Africans
- H4 Iran warns of fresh Hormuz closure as US blockade tensions escalate again
- H4 War on IranThe latest on the US-Israel war on Iran
- H4 US and Iran 'ready for war' as ceasefire end looms, talks in limbo
- H4 Iran rejects new US talks as ceasefire tensions rise
- H4 These are the things dividing Iran and the US as ceasefire nears expiry
- H4 Strait of Hormuz closure continues as Iran says peace deal still 'far off'
- H4 Iran says its reviewing 'new proposals' from US, but no date set for new round of talks
- H4 Travel
- H4 Watch VideoRomantic winter hideaways in South Africa for couples seeking cosy escapes
- H4 Cape Town beaches crowned world’s best as Boulders Beach takes global No.1 spot
- H4 Orpen Gate closed after bridge washed away
- H4 Lesley-Ann Brandt exposes local travel agency after family falls victim to R35k fraud
- H4 Caitlyn Jenner slams Donald Trump policy after passport returned marked ‘male’
- H4 Partnered Content
- H4 Don’t risk it, fix it: Toyota urges South Africans to act now on airbag recall
- H4 HONOR 600 Lite Launches with Metal-forged Unibody Design and a 108MP Ultra-clear Camera
- H4 Watch VideoAnother BIG record win for a lucky punter on Lottoland South Africa!
- H4 Global Education celebrates 20 years with its highly anticipated ‘May Study Abroad Expo’ across South Africa and Zimbabwe ...
- H4 Venous disease can reach critical stages undetected, warns leading SA Vascular Surgeon
- H4 Hybrid Working
- H4 Rising fuel prices ignite debate on workplace flexibility in South Africa
- H4 April fuel price hike: Government clarifies ‘no official work-from-home’ policy adopted
- H4 Hybrid work supports business sustainability
- H4 Working from home in sectional title units: Know the rules to avoid eviction
- H4 Study reveals hybrid work model significantly lowers burnout symptoms
- H4 Latest on IOL
Skipping heading levels breaks the document outline. Screen readers may interpret missing levels as structural errors.
Skipping heading levels breaks the document outline — screen-reader users lose track of section nesting.
Learn more ▾ ▴
Screen reader users navigate by jumping between headings (H1 → H2 → H3). Skipping (H1 → H3) breaks the sense of hierarchy. Use sequential levels even if you don't like the default styling — restyle with CSS instead. WCAG 1.3.1 (Info and Relationships) treats this as an A failure.
Source: WCAG 2.1 SC 1.3.1 / W3C WAI
A+Alt Text QualityAll 4 images OKPASS
A+Form AccessibilityNo form controlsPASS
A+Color Contrast (Screenshot)20 text elements analyzed, 0 fail WCAG AAPASS
Analyzes text contrast against the actual rendered page, including background images, gradients, and overlays that CSS-based tools cannot detect.
Show all checked elements (20)
| Element | Ratio | Required | FG | BG | Result |
|---|---|---|---|---|---|
| h1 'Leave it between th… | 21.00:1 | 3.0:1 | #000000 | #FFFFFF | Pass |
| title IOL | Breaking News,… | 21.00:1 | 4.5:1 | #000000 | #FFFFFF | Pass |
| div Wednesday, April 22,… | 21.00:1 | 4.5:1 | #000000 | #FFFFFF | Pass |
| a News | 19.81:1 | 4.5:1 | #000000 | #F9F8F8 | Pass |
| a Crime and Courts | 21.00:1 | 4.5:1 | #000000 | #FFFFFF | Pass |
| a South Africa | 21.00:1 | 4.5:1 | #000000 | #FFFFFF | Pass |
| a Africa | 21.00:1 | 4.5:1 | #000000 | #FFFFFF | Pass |
| a World | 21.00:1 | 4.5:1 | #000000 | #FFFFFF | Pass |
| a BRICS | 21.00:1 | 4.5:1 | #000000 | #FFFFFF | Pass |
| a Education | 21.00:1 | 4.5:1 | #000000 | #FFFFFF | Pass |
| a Energy | 21.00:1 | 4.5:1 | #000000 | #FFFFFF | Pass |
| a Environment | 21.00:1 | 4.5:1 | #000000 | #FFFFFF | Pass |
| a Feel Good | 21.00:1 | 4.5:1 | #000000 | #FFFFFF | Pass |
| a Government at Work | 21.00:1 | 4.5:1 | #000000 | #FFFFFF | Pass |
| a Opinion | 21.00:1 | 4.5:1 | #000000 | #FFFFFF | Pass |
| a CT Jazz Fest | 21.00:1 | 4.5:1 | #000000 | #FFFFFF | Pass |
| a Politics | 21.00:1 | 4.5:1 | #000000 | #FFFFFF | Pass |
| a Opinion | 21.00:1 | 4.5:1 | #000000 | #FFFFFF | Pass |
| a Opinion | 21.00:1 | 4.5:1 | #000000 | #FFFFFF | Pass |
| a News | 21.00:1 | 4.5:1 | #000000 | #FFFFFF | Pass |
Methodology: The top 20 text elements by font size were checked. Background color was sampled from the desktop screenshot using a 5-point pattern. WCAG 2.1 AA requires 4.5:1 for normal text and 3:1 for large text.