{"id":2024,"date":"2026-06-08T17:00:00","date_gmt":"2026-06-08T15:00:00","guid":{"rendered":"https:\/\/accessdrum.com\/en\/?p=2024"},"modified":"2026-06-26T18:23:20","modified_gmt":"2026-06-26T16:23:20","slug":"your-website-may-be-broken-in-a-version-youve-never-seen","status":"publish","type":"post","link":"https:\/\/accessdrum.com\/bg\/your-website-may-be-broken-in-a-version-youve-never-seen\/","title":{"rendered":"Your Website May Be Broken in a Version You\u2019ve Never Seen"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Every website renders two structures in parallel. One is the DOM, the version developers build and browsers display visually. The other is the accessibility tree, a separate structure built from the same code that assistive technology reads directly. The two are related, but they are not the same thing. In our experience the gap between them is where most accessibility bugs live.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Screen readers like NVDA, JAWS, VoiceOver, and TalkBack don&#8217;t read your visual page at all. They read the accessibility tree. If that tree is wrong or incomplete, the user is working from a different, broken version of the page, no matter how clean the design looks, and none of it will look broken to you.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is usually where the problem gets hard to pin down. A typical case starts with a ticket nobody can reproduce: a user reports that a button doesn&#8217;t work, but testing it with a mouse, everything looks fine. It takes a week to figure out the button was never a button to the screen reader, just something styled to look like one. Nobody made a visual mistake. The problem just lives at a layer the usual QA pass never touches.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"font-size:22px\">The accessibility tree is a second, invisible version of your page<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The accessibility tree is a structured representation of a webpage that the browser generates specifically for assistive technology. It is derived from the DOM but built as its own object, with role, name, state, and a set of properties for every element on the page.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A proper <code><button><\/code> element maps correctly to something a screen reader can identify, announce, and interact with. A <code><div><\/code> styled to look like a button, with an onClick handler attached, doesn&#8217;t map to anything. The accessibility tree sees it as plain text, not as a control, so the user has no way to discover it does anything at all. The button still looks like a button visually, which is exactly why these problems tend to survive for years, sometimes through multiple redesigns, before anyone catches them. A clean visual QA pass tells you almost nothing about whether the tree underneath is correct.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"font-size:22px\">The same bug looks different on every platform<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The same kind of mismatch shows up differently depending on what operating system and browser combination someone is using, which matters if your team only ever tests on one.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On Windows, modern screen readers read through UI Automation, Microsoft&#8217;s accessibility API and the standard since Windows Vista. On macOS and iOS, Apple built its own version called NSAccessibility. That&#8217;s part of why VoiceOver and Safari have historically worked better together than VoiceOver and Chrome on the same machine. On Android, TalkBack reads from the accessibility framework built directly into the SDK. Each platform has its own API, and the browser sits in the middle, translating your HTML into accessible objects that API can understand. When that translation is wrong or incomplete, the screen reader gets noise instead of meaning, and the result can look like a completely different bug depending on which browser and screen reader combination was running at the time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is also why a fix confirmed working in one combination, say NVDA and Chrome, isn&#8217;t automatically working everywhere else. The browser builds the tree, not the screen reader, so the same markup can come out slightly different depending on which browser built it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"font-size:22px\">You can check your own accessibility tree<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">It&#8217;s worth doing, at least for a single component. Chrome DevTools has an Accessibility pane inside the Elements panel that shows you the computed accessible name, role, and properties for whatever you&#8217;ve selected. Safari&#8217;s Web Inspector has an equivalent Node panel. On native mobile, Xcode&#8217;s Accessibility Inspector and Android&#8217;s Accessibility Scanner do the same thing for app components.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you want to know whether one specific button or form field is exposing what you think it&#8217;s exposing, this is enough to check it yourself. Select the element, open the accessibility pane, and read what&#8217;s there. A developer can run this check before opening a pull request. A QA engineer can run it the moment a bug report mentions a screen reader. Either way, it takes two minutes and tells you whether the problem is even in the tree to begin with.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What this doesn&#8217;t give you is the same thing an automated scanner doesn&#8217;t give you either. It tells you what&#8217;s structurally present, not whether the experience holds up across an entire flow, on a release that changes weekly. Checking one element in DevTools and running a full screen reader audit against WCAG across a whole product answer two different questions. Teams that catch problems early are usually doing both.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Most accessibility tree problems, once identified, are not complicated to fix. A missing label, a wrong role, a <code><div><\/code> that should have been a <code><button><\/code> from the start. All of these come out of a proper audit and get addressed incrementally without rebuilding anything. The first step is knowing they&#8217;re there, which most teams don&#8217;t until a real user runs into one, or until a bug report comes in that nobody can reproduce because it only happens with one specific screen reader and browser combination.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Whether you&#8217;re the one fixing this or the one explaining to leadership why it&#8217;s taking three sprints, a screen reader audit gives both sides the same answer. [[Request your audit.]<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"font-size:22px\"><strong>FAQ<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"font-size:18px\">Is the accessibility tree the same as the DOM?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>No<\/strong>. The browser derives it from the DOM but builds it as a separate structure specifically for assistive technology, with its own roles, states, and properties that don&#8217;t always match what&#8217;s in the DOM.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"font-size:18px\">Can an automated scanner catch accessibility tree problems?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Some of them<\/strong>. Automated tools are good at flagging missing labels or invalid roles in simple cases. Whether a custom component still behaves correctly once a screen reader is interacting with it is a different question that scanners simply can&#8217;t answer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"font-size:18px\">Do different browsers build the accessibility tree differently?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Yes<\/strong>. Each browser translates HTML into accessible objects for the operating system&#8217;s own accessibility API, and that translation isn&#8217;t identical across browsers, which is why a fix verified in one browser and screen reader combination needs to be reverified in others.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"font-size:18px\">Is checking one element in DevTools the same as an accessibility audit?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>No<\/strong>. It&#8217;s a useful way to verify a single component, but a full audit covers entire user flows across multiple screen reader and browser combinations, checked against WCAG, which is a different scope of work.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Written by Kalina Boneva, accessibility QA at Access Drum and a screen reader user with 18 years of hands-on experience with assistive technology.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Every website renders two structures in parallel. One is the DOM, the version developers build and browsers display visually. The [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":2025,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[612,611,609],"tags":[],"class_list":["post-2024","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-digital-accessibility-and-why-it-matters","category-for-businesses","category-for-developers"],"uagb_featured_image_src":{"full":["https:\/\/accessdrum.com\/wp-content\/uploads\/2026\/06\/pexels-rene-37159137-scaled.jpg",1701,2560,false],"thumbnail":["https:\/\/accessdrum.com\/wp-content\/uploads\/2026\/06\/pexels-rene-37159137-150x150.jpg",150,150,true],"medium":["https:\/\/accessdrum.com\/wp-content\/uploads\/2026\/06\/pexels-rene-37159137-199x300.jpg",199,300,true],"medium_large":["https:\/\/accessdrum.com\/wp-content\/uploads\/2026\/06\/pexels-rene-37159137-768x1156.jpg",768,1156,true],"large":["https:\/\/accessdrum.com\/wp-content\/uploads\/2026\/06\/pexels-rene-37159137-680x1024.jpg",680,1024,true],"1536x1536":["https:\/\/accessdrum.com\/wp-content\/uploads\/2026\/06\/pexels-rene-37159137-1021x1536.jpg",1021,1536,true],"2048x2048":["https:\/\/accessdrum.com\/wp-content\/uploads\/2026\/06\/pexels-rene-37159137-1361x2048.jpg",1361,2048,true]},"uagb_author_info":{"display_name":"Kalina Boneva","author_link":"https:\/\/accessdrum.com\/bg\/author\/kalina-boneva\/"},"uagb_comment_info":0,"uagb_excerpt":"Every website renders two structures in parallel. One is the DOM, the version developers build and browsers display visually. The [&hellip;]","_links":{"self":[{"href":"https:\/\/accessdrum.com\/bg\/wp-json\/wp\/v2\/posts\/2024","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/accessdrum.com\/bg\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/accessdrum.com\/bg\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/accessdrum.com\/bg\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/accessdrum.com\/bg\/wp-json\/wp\/v2\/comments?post=2024"}],"version-history":[{"count":1,"href":"https:\/\/accessdrum.com\/bg\/wp-json\/wp\/v2\/posts\/2024\/revisions"}],"predecessor-version":[{"id":2026,"href":"https:\/\/accessdrum.com\/bg\/wp-json\/wp\/v2\/posts\/2024\/revisions\/2026"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/accessdrum.com\/bg\/wp-json\/wp\/v2\/media\/2025"}],"wp:attachment":[{"href":"https:\/\/accessdrum.com\/bg\/wp-json\/wp\/v2\/media?parent=2024"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/accessdrum.com\/bg\/wp-json\/wp\/v2\/categories?post=2024"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/accessdrum.com\/bg\/wp-json\/wp\/v2\/tags?post=2024"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}