A structured lesson workspace with readable content, hands-on examples, and a clean path to completion.
When this goes wrong, the browser usually keeps rendering. That is what makes the bug easy to miss: recovery can hide a broken source document. In this lesson, the focus is landmarks, heading structure, accessible names, and reading order. That matters because HTML is interpreted by a parser and then exposed to browser features such as navigation, accessibility tooling, form controls, media handling, and script APIs. A correct-looking screenshot can still hide a poor document model.
Source-reading note: the exact semantics here come from the HTML element/attribute you chose, not its CSS appearance.
<nav aria-label="Primary"><a href="/">Home</a></nav><main><h1>Reports</h1></main>
Start with the smallest meaningful example. The working snippet demonstrates the core syntax, but the important part is what each piece contributes: the element supplies semantics or behavior, attributes refine that meaning, and surrounding structure gives the browser context. Don't add markup just because a framework or copied example happens to include it.
Don't confuse browser-side convenience with a security boundary. The markup in semantic html for screen readers should improve behavior, but authoritative validation and policy belong at the trust boundary that processes the request.
<button type="button" aria-expanded="false" aria-controls="filters">Filters</button><section id="filters" hidden>...</section>
Now put the same idea under pressure. A realistic failure is: Make the information hierarchy understandable without CSS or visual positioning. The browser may recover, ignore an invalid combination, or leave the user with a control that appears visually fine but behaves differently than expected. That is why source inspection and keyboard testing belong in the workflow.
<img src="chart.png"alt="Orders increased from 120 in May to 190 in June.">
For this topic, the edge case is worth remembering: HTML has legacy parsing and compatibility behavior, so invalid markup does not always fail loudly. If you are debugging a strange result, reduce the page to one element at a time, validate the source, and inspect the resulting DOM. Small reproductions beat guessing at the full application.
When you debug this in a real project, inspect both the source and the parsed DOM. The two are related, but they are not always identical.
Engineering judgment: prefer the native HTML behavior described here before reaching for a custom widget.
Checkpoint: you can now connect the markup for semantic html for screen readers to a browser behavior and a concrete debugging step.
Checkpoint: you can now connect the markup for semantic html for screen readers to a browser behavior and a concrete debugging step.
Finish the lesson once you have worked through the material. This awards ★ 20 XP.