Design

HTML That Actually Helps Users: A Practical Guide for 2026

By Ken Key Dec 28, 2024 7 min read Updated Oct 16, 2026

HTML That Actually Helps Users: A Practical Guide for 2026
The short answer

Good HTML helps users when you pick the right element for each job. Use header, nav, main, article, and footer instead of divs, keep one h1 per page, and label links clearly. That structure feeds screen readers, keyboard users, and Google, and it costs nothing to get right.

Part of the complete web design guide.

On this page

Most sites treat HTML as a box to dump content into. But the markup itself decides whether a screen reader can read your page, whether Google understands it, and whether it loads fast on a phone in a parking lot. I’ve spent years fixing this on client sites, and the wins are usually cheap: better tags, less junk, and a few lines of code.

This is the working list I go through on almost every rebuild.

Start with semantic structure, not divs

A page built from nothing but <div> tags works fine for sighted mouse users and falls apart for everyone else. Screen readers, keyboard navigation, and search crawlers all lean on the element you pick. If it’s a navigation block, say so.

<header>
 <nav aria-label="Main">
 <ul>
 <li><a href="/services/">Services</a></li>
 <li><a href="/work/">Work</a></li>
 <li><a href="/contact/">Contact</a></li>
 </ul>
 </nav>
</header>

<main>
 <h1>Custom Web Development</h1>
 <article>
 <h2>What I build</h2>
 <p>...</p>
 </article>
</main>

<footer>
 <p>&copy; 2026</p>
</footer>

That’s it. No extra CSS, no framework. You just told every tool on the planet what each chunk of the page is. When I take on a Long Island web design project, this is usually the first thing I check, because fixing it costs nothing and pays off for years.

One h1 per page, and make it count

I still see pages with three h1 tags and a logo image fighting for the top. Pick one h1 that states what the page is about. Use h2 and h3 to build an outline. That outline is what Google reads to figure out your content, and it’s what a screen reader user jumps through with the H key.

Use the right input types and stop fighting mobile keyboards

If you ask for an email on a phone and the keyboard shows letters instead of the @ symbol, that’s a markup bug. HTML input types have handled this for years and most forms still ignore it.

<form action="/contact" method="post">
 <label for="email">Email</label>
 <input id="email" name="email" type="email"
 autocomplete="email" required>

 <label for="phone">Phone</label>
 <input id="phone" name="phone" type="tel"
 autocomplete="tel" inputmode="tel">

 <label for="zip">ZIP code</label>
 <input id="zip" name="zip" type="text"
 autocomplete="postal-code" inputmode="numeric"
 pattern="[0-9]{5}">

 <button type="submit">Send</button>
</form>

Three things are happening here. type="email" gives you a mobile keyboard with an @ key and free validation. inputmode controls the keyboard without changing validation rules. And autocomplete lets the browser fill the field in one tap, which is the single biggest conversion win on any form I’ve touched. People abandon forms because typing on a phone is annoying.

Labels are not optional

Use a real <label for="..."> tied to the input’s id. Placeholder text is not a label. It disappears the second someone starts typing, and screen readers may never announce it. If you truly can’t show a visible label, use aria-label, but a visible label is better for everyone.

Write alt text like a human

Alt text is not a keyword slot. It’s what gets read aloud when the image can’t be seen. Describe the image’s job on the page.

  • Decorative image (a divider, a background flourish): alt="" and move on. Empty alt tells screen readers to skip it.
  • Informative image (a product photo): describe what matters. alt="Walnut dining table with a black steel base".
  • Image that’s also a link: describe where the link goes, not the picture. alt="View the full project gallery".
  • Chart or graph: the alt should state the takeaway, not just “chart.” Then put the full data in a table below it.

I’ve never seen keyword-stuffed alt text help rankings. I have seen it make a blind user’s experience worse, which is a real cost.

Lazy-load images, but not the one at the top

Native lazy loading has been in browsers for years and still isn’t used enough. One attribute, real savings on mobile data and load time.

<!-- below the fold: defer it -->
<img src="/img/gallery-1.avif" width="800" height="600"
 loading="lazy" decoding="async"
 alt="Finished basement office with built-in shelving">

<!-- hero image: load it now, it's what people see first -->
<img src="/img/hero.avif" width="1600" height="900"
 fetchpriority="high" decoding="async"
 alt="Custom kitchen renovation in Commack, NY">

Note the width and height on both. Setting them reserves space so the page doesn’t jump around while images load. That layout shift is a real ranking factor and a real source of user frustration. If you lazy-load your hero image, you’ve made your most important visual arrive last. Don’t.

Serve modern formats

AVIF and WebP are both broadly supported now. Use <picture> to offer AVIF first and fall back, or just convert everything at build time and skip the complexity. A 200KB JPEG that becomes a 40KB AVIF is a straight win with no downside.

Details and dialog: the elements people forget exist

You don’t need a JavaScript library for an accordion or a modal anymore. The browser ships both.

<details>
 <summary>What's included in a site audit?</summary>
 <p>Speed, accessibility, SEO, and a written list of fixes
 ranked by impact.</p>
</details>

<dialog id="contact-modal">
 <form method="dialog">
 <p>Thanks, I'll get back to you within a day.</p>
 <button>Close</button>
 </form>
</dialog>

<details> gives you a working disclosure widget with keyboard support built in. <dialog> gives you a real modal that traps focus and handles the Escape key. Both replace a lot of fragile custom code. Every library you don’t add is JavaScript your visitors don’t have to download.

Keep the head lean

View source on a random small business site and you’ll find tracking scripts, unused font weights, and meta tags from three CMS versions ago. The head is where page speed goes to die.

  • One <title>, under about 60 characters, unique per page.
  • One meta description. It doesn’t affect ranking directly, but it’s your ad copy in search results, so write it like one.
  • A canonical link so you’re not competing with your own duplicate URLs.
  • Fonts: load two weights, not eight. Use font-display: swap so text shows immediately.
  • Defer or async every script that isn’t critical. Most aren’t.
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet"
 href="/css/site.css">
<script src="/js/app.js" defer></script>

Validate, then test with a keyboard

Run your pages through the W3C validator. It catches unclosed tags and nesting mistakes that quietly break rendering. Then do the thing almost nobody does: unplug your mouse and tab through the whole page. Can you reach every link? Can you see where focus is? If you get stuck, so does a chunk of your audience.

None of this is exotic. It’s the difference between HTML used as a dumping ground and HTML used as the structural layer it was designed to be. The fixes are small, they’re free, and they compound.

FAQ

Do semantic HTML tags actually help SEO?

Yes, indirectly and reliably. Google uses headings, links, and structure to understand your page. Semantic tags also tend to produce cleaner, faster pages, and speed is a confirmed ranking factor. You won’t rank from a <nav> tag alone, but the foundation matters.

How much does lazy loading images really save?

It depends on how many images are below the fold. On a gallery-heavy page it can cut initial page weight by more than half, which shows up directly in mobile load time. On a text-only page it saves nothing. Measure your own site rather than guessing.

Can I fix accessibility issues without redesigning the site?

Often, yes. Labels, alt text, heading order, focus styles, and input types are all markup-level fixes that don’t touch your visual design. Start there, then deal with anything structural.

Have a project like this?

I do Long Island web design for Long Island businesses. If you need this done right, let’s talk.