Why Accessibility Isn’t Just a Checkbox
Let’s be honest — accessibility often feels like the afterthought in web design. You get the brief, you build the site, and then someone pipes up, “Hey, what about accessibility?” And suddenly, you’re scrambling to retrofit alt tags or throw in some ARIA labels because, well, it’s the right thing to do (and the law, sometimes).
But here’s the thing — accessibility isn’t a one-and-done task or some dusty legal hoop to jump through. It’s baked into the very DNA of good HTML. It’s about making your website usable for everyone, including folks who navigate differently, who see differently, or who interact through assistive tech. And if you’re anything like me, you want your work to actually help people, not just check a box.
So, grab your coffee — or whatever fuels your brain — and let’s dive into some practical HTML best practices that make your website genuinely accessible without turning it into a slog.
Start With Semantic HTML — Your Accessibility Backbone
Imagine this: You’re hiking through a dense forest (bear with me), and you stumble upon a map that just shows random dots without labels or trails. Frustrating, right? That’s what non-semantic HTML feels like to assistive technologies. They get the dots but no context.
Using semantic elements — like <header>, <nav>, <main>, <article>, <section>, and <footer> — is like giving your webpage a clear, logical map. Screen readers can then announce landmarks and help users navigate intuitively.
Quick story: Early in my career, I worked on a project with a div-heavy layout and no semantic tags. Screen reader users were basically lost, clicking through a jumble of <div>s with no landmarks. After switching to semantic HTML, the feedback was immediate and positive. It truly made a difference.
Use Proper Heading Structure — Don’t Skip Levels
Headings aren’t just for looks — they’re the signposts of your content. A well-structured heading hierarchy (H1 through H6) lets screen readers jump through sections efficiently. Skipping heading levels is like skipping chapters in a book — confusing and frustrating.
Pro tip: Your page should have exactly one H1 (usually the page title). Then nest subsections with H2, H3, and so forth. Avoid jumping from H2 to H4 without an H3 in between. Trust me, it’s easier said than done, but it pays off.
Alt Text Isn’t Optional — It’s Essential
This one’s a classic, but you’d be surprised how often it’s skimmed. Alt text describes images to users who can’t see them — whether that’s because they use screen readers, have images disabled, or have slow connections.
Here’s the catch: alt text should be meaningful and concise. Don’t just write “image” or “photo.” Instead, describe the content or function. For example, alt="Smiling woman holding a laptop with code on screen" tells a story. If an image is purely decorative, go ahead and use an empty alt attribute (alt="") to let screen readers skip it.
Forms That Don’t Frustrate
Forms are notoriously tricky for accessibility. Ever tried filling out a form with a screen reader? Without proper labels, instructions, and error handling, it’s a nightmare.
Here’s what I always do:
- Label Every Input: Use the
<label>element and link it to the input with theforattribute. Don’t rely on placeholders as labels — they disappear when you type. - Group Related Fields: Use
<fieldset>and<legend>for radio buttons and checkboxes. - Provide Clear Instructions: Use
aria-describedbyif you need to add extra info. - Error Handling: Make sure errors are announced by screen readers and visually obvious.
Honestly, once you nail these basics, forms become way less painful for everyone.
Keyboard Navigation — Don’t Forget the Tab Order
Keyboard users rely on a logical tab order to move through your site. Messy tabbing is like trying to walk through a room full of invisible hurdles. It’s frustrating and often leads to abandonment.
Use natural HTML flow as much as possible — it’s usually the best tab order. If you must customize, use tabindex sparingly. Also, make sure all interactive elements like links and buttons are reachable via keyboard.
One time, I inherited a site where the tab order was all over the place. Fixing that alone improved user satisfaction dramatically. No fancy scripts needed — just thoughtful markup.
ARIA — A Powerful Tool, But Use With Care
ARIA (Accessible Rich Internet Applications) roles and attributes can fill gaps when native HTML falls short. But it’s a double-edged sword. Overusing or misusing ARIA can actually harm accessibility.
Rule of thumb: Use native HTML first. Only add ARIA when there’s no semantic equivalent. For example, a button should be a <button>, not a <div role="button">. But if you’re building a custom widget, ARIA can help communicate roles, states, and properties.
And yes, I’ve been bitten by ARIA misuse too — it’s a learning curve. Tools like the MDN ARIA guide and the WebAIM ARIA overview are lifesavers.
Testing Accessibility — Because Theory Isn’t Enough
Writing accessible HTML is just the start. You’ve got to test it. And not just with automated tools — though those are helpful.
Here’s my go-to approach:
- Screen Readers: Try NVDA (Windows), VoiceOver (Mac/iOS) or TalkBack (Android). Navigate your site and listen.
- Keyboard Only: Turn off your mouse and see if you can get through the site logically.
- Color Contrast Checkers: Tools like Contrast Ratio help ensure text is readable.
- Automated Tools: Axe, Lighthouse, WAVE — they catch common issues fast.
Testing revealed a missing label on a login modal once. That tiny fix saved users a ton of guesswork. Trust me, it’s worth the time.
Wrap Up: Accessibility Is a Journey, Not a Destination
So, what’s the takeaway? Accessibility isn’t some arcane checklist or a chore you cram in at the end. It’s a mindset. It’s about empathy and craftsmanship, and it starts with writing HTML that respects every user’s way of browsing.
If you’re just starting out, don’t get overwhelmed. Start small — add semantic tags, fix your alt text, label your forms. Each step counts.
And if you’re a seasoned dev, maybe take a fresh look at your markup with these practices. You might find opportunities to sharpen your approach and make your sites friendlier to everyone.
Anyway, that’s enough from me. What’s your next move? Give these HTML accessibility best practices a shot and see how they transform your projects. And hey, if you hit a snag or find a killer tip, I’d love to hear about it.






