Why Web Accessibility Should Be Built Into Every Website From Day One

Building websites that work for everyone, not just a fraction of visitors

← Back to Blog

Introduction: Why Accessibility Matters

Building a website isn't just about what looks good on your monitor. It's about who can actually use it. Accessibility isn't an optional add-on for a "later" sprint. It's foundational. Whether you're coding a personal portfolio like rguidry.dev or scaling an enterprise platform, the Web Content Accessibility Guidelines (WCAG) lay out the roadmap for sites that everyone—not just a fraction of visitors—can navigate and use.

I learned this lesson the hard way when I launched my site's first version. The design looked sleek on my 27-inch monitor, but when I ran an audit with Lighthouse, the accessibility score was embarrassingly low. Missing <main> tags, unlabeled navigation, poor contrast ratios. It wasn't just that a screen reader user would struggle—it also meant search engines weren't parsing my content effectively. Accessibility and SEO are more tightly bound than most developers realize.

The Accessibility-SEO Connection

Before diving into the checklist of accessibility issues, it's worth making the SEO link explicit. Search engines crawl sites in ways that parallel how assistive technologies parse content. Clean, semantic HTML, labeled navigation, alt text—all these are signals for both accessibility and discoverability.

When I patched up my first build of rguidry.dev, I saw two improvements: accessibility audits went green, and pages indexed faster. Accessibility wasn't charity—it was strategy.

1. Semantic HTML Structure

At the core of WCAG compliance is semantic HTML. Think of it as the skeleton of your site. Without it, both humans and machines lose context.

When I first audited rguidry.dev, everything was just <div>. Functionally fine, but invisible to anyone using assistive tech. It also made my analytics confusing: users were bouncing faster because they couldn't find what they needed.

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>My Portfolio</title>
  </head>
  <body>
    <header>
      <h1>RGuidry.dev</h1>
    </header>

    <nav aria-label="Main navigation">
      <ul>
        <li><a href="/" aria-current="page">Home</a></li>
        <li><a href="/projects">Projects</a></li>
        <li><a href="/contact">Contact</a></li>
      </ul>
    </nav>

    <main>
      <section>
        <h2>About Me</h2>
        <p>Developer, builder, problem-solver...</p>
      </section>
    </main>

    <footer>
      <p>© 2025 rguidry.dev</p>
    </footer>
  </body>
</html>
Side-by-side comparison of website code, one using only divs and another using semantic tags like main, nav, and section.
How semantic HTML clarifies both accessibility trees and SEO parsing.
Split view showing HTML code snippet on the left and corresponding DOM tree structure on the right, demonstrating how HTML elements translate to a hierarchical object model.
HTML code and its corresponding DOM tree structure, showing how nested HTML elements create a hierarchical object model in the browser.

2. ARIA Labels & Roles

Semantic HTML solves a lot, but ARIA fills the gaps. Accessible Rich Internet Applications (ARIA) attributes describe roles, states, and properties where HTML falls short.

When I added ARIA to my mobile menu toggle on rguidry.dev, the difference was instant. VoiceOver could finally announce "Menu button, collapsed" instead of "button." That precision is the line between usable and confusing.

<nav aria-label="Primary navigation">
  <ul>
    <li><a href="/" aria-current="page">Home</a></li>
    <li><a href="/projects">Projects</a></li>
    <li><a href="/contact">Contact</a></ul>
</nav>

<button 
  aria-label="Open mobile menu"
  aria-controls="mobile-menu"
  aria-expanded="false"
  role="button">
  ☰
</button>
Detailed diagram showing the flow from HTML to DOM tree, then to visual UI and accessibility tree, with JavaScript interaction and assistive technology consumption, ultimately reaching the user.
How web content flows from HTML through DOM to both visual UI and accessibility tree, enabling assistive technologies to provide access to users.

3. Forms & Interactive Elements

Forms are often the biggest accessibility pitfall. Without descriptive labels, users are left guessing.

On my contact form, I initially relied on placeholders as labels. A common mistake. Once a user started typing, the placeholder disappeared, leaving no accessible label. Switching to <label> tags with for attributes fixed it immediately.

<form>
  <label for="email">Email address</label>
  <input 
    type="email" 
    id="email" 
    name="email" 
    aria-describedby="emailHelp">
  <small id="emailHelp">We'll never share your email.</small>

  <button type="submit">Submit</button>
</form>
Diagram comparing accessible vs non-accessible text input fields: left shows persistent labels above inputs, right shows placeholder text that disappears when typing.
Accessible forms use persistent labels above inputs, while non-accessible forms rely on placeholders that disappear when users start typing.

4. Images & Media

Alt text is the most obvious accessibility issue, but it's often mishandled.

I once posted a project screenshot without alt text. When testing with a screen reader, all I heard was "image." Not helpful. Adding descriptive alt text like "Portfolio homepage with hero banner and navigation menu" fixed that.

<!-- Decorative image -->
<img src="decorative-line.png" alt="" aria-hidden="true">

<!-- Informative image -->
<img src="portfolio-home.png" alt="Screenshot of portfolio homepage with hero banner and navigation menu">

<!-- Data visualization -->
<figure>
  <img 
    src="traffic-growth.png" 
    alt="Bar chart showing traffic growth per month" 
    aria-describedby="trafficData">
  <figcaption id="trafficData">
    Site traffic increased steadily from January to June, doubling in total sessions.
  </figcaption>
</figure>
Comparison chart showing data visualization with proper text labels versus charts that rely only on color for information.
Data visualizations need text labels and alternatives, not just color coding, to remain accessible.

5. Color & Contrast Guidelines

Color choices often make or break accessibility. WCAG requires a contrast ratio of at least 4.5:1 for normal text.

I had a hero section on rguidry.dev with white text over a bright orange background. Looked fine to me. But when I ran it through a contrast checker, it failed WCAG standards. Switching to a darker overlay fixed it without killing the design.

/* BAD contrast */
.low-contrast {
  color: #fff;
  background-color: #ffcc66; /* Fails WCAG AA */
}

/* GOOD contrast */
.high-contrast {
  color: #fff;
  background-color: #cc6600; /* Passes WCAG AA */
}
Comparison showing high contrast versus low contrast text and backgrounds in grayscale, demonstrating the importance of proper contrast ratios for accessibility.
High contrast ratios ensure text remains readable for all users, including those with color vision deficiencies.

6. Keyboard Navigation

Accessibility isn't just about screen readers. Users who navigate by keyboard need focusable, visible states.

Testing rguidry.dev with only a keyboard was revealing. I couldn't tell which button was selected. After adding clear focus outlines, the navigation flow finally made sense.

<a href="#main-content" class="skip-link">Skip to main content</a>
<nav>
  <!-- ... navigation ... -->
</nav>
<main id="main-content">
  <h1>Welcome</h1>
</main>
Demonstration of button focus states with visible focus indicators and adjacent color variations, showing how focus rings improve keyboard navigation accessibility.
Visible focus indicators and proper button states make keyboard navigation accessible and intuitive.

7. Screen Reader Support

Dynamic content is common, but it often breaks screen reader usability.

On my site, I had a "copy email" button that showed "Copied!" after clicking. Without an aria-live region, screen readers didn't announce the change. Adding it made the feature usable.

<button onclick="copyEmail()">Copy Email</button>
<div id="notification" aria-live="polite"></div>

<script>
  function copyEmail() {
    // Note: In a real app, use a more robust clipboard method.
    document.getElementById("notification").textContent = "Copied!";
  }
</script>
Visual representation of accessible elements and their properties, showing how screen readers and assistive technologies interact with web content.
Accessible elements provide the necessary information for screen readers and assistive technologies to properly announce content to users.

Accessibility as Ongoing Practice

Accessibility isn't a checklist you tick once. Standards evolve, content changes, and new features add risk. Every deployment should include automated and manual accessibility checks.

For rguidry.dev, I set up continuous auditing with Lighthouse and axe-core. Each commit now runs automated scans. If contrast ratios dip or ARIA attributes are missing, the build fails. That feedback loop keeps accessibility a living standard, not a forgotten task.

The Business Case: SEO, Reach, and Reputation

Some developers see accessibility as overhead. In reality, it's leverage.

When I rebuilt rguidry.dev with accessibility in mind, recruiters actually commented on it. Not the design polish, but the care taken to make it usable.

Visual representation of the three accessibility standards: ADA, WCAG, and other compliance frameworks, showing how they work together to ensure web accessibility.
The three accessibility standards (ADA, WCAG, and compliance frameworks) provide comprehensive guidelines for building accessible websites.

Closing Thoughts

Accessibility is critical infrastructure for the web. It's not charity. It's not optional. It's how the web should work. WCAG provides the framework. Implementing it means better usability, stronger SEO, and a wider reach.

When you're building your site—whether it's a personal project like rguidry.dev or a large-scale app—start with semantic HTML, add ARIA roles, fix forms, write alt text, check contrast, ensure keyboard navigation, and optimize for screen readers. The payoff isn't just compliance. It's a website that works for everyone and ranks where it should.

For more insights on building better systems, check out my reflections on higher education reform—another area where accessibility and user experience principles can drive meaningful change.