La Ventana, Baja California Sur, México. [email protected]
←Journal
·6 min read

HTML Landmarks for Skimmable Service Pages

Visual layout alone does not give assistive technology a map of your service page. W3C ARIA practices and MDN show how HTML landmarks—banner, navigation, main, complementary, contentinfo—make regions skimmable and keyboard-reachable.

Windware Studio· Design & Development Team

A consultancy service page often looks clear on a large monitor: logo and menu at the top, offer copy in the center, related case studies in a sidebar, contact details in the footer. Sighted visitors read that map from spacing, color, and alignment. Screen reader and keyboard users do not inherit that map unless the page exposes the same structure programmatically. The W3C WAI-ARIA Authoring Practices Guide (APG) on landmark regions and MDN’s guidance on HTML landmark roles describe how to do that with ordinary sectioning elements—without sprinkling decorative role attributes everywhere.

Landmarks also support WCAG Success Criteria that service sites already care about: 1.3.1 Info and Relationships and 2.4.1 Bypass Blocks. WCAG technique ARIA11 (Using ARIA landmarks to identify regions of a page) and the newer HTML technique H101 frame landmarks as a way to orient and skip large blocks of repeated chrome.


Why a visual layout is not enough

Assistive technologies expose landmarks as a navigable list of page regions. A visitor can jump to “main,” “navigation,” or “contentinfo” instead of tabbing through every header link. The APG introduction puts the purpose plainly: landmark roles classify and label sections so structural information conveyed visually through layout can be represented programmatically.

On a typical service site the cost of missing landmarks is concrete. Without a main landmark, someone looking for the HVAC repair offer may walk the entire primary navigation, utility links, and promo strip first. Without labeled nav regions, “Services,” “Locations,” and “Footer links” collapse into an undifferentiated set of lists. Without a top-level banner and contentinfo, the site chrome that repeats on every page is harder to skip—the same problem skip links address, but at the level of page architecture rather than a single jump target.

MDN’s May 15, 2023 article by Schalk Neethling restates the first rule of ARIA: if a native HTML element already carries the semantics you need, use it instead of re-purposing a generic element and bolting on a role.


What a landmark is—and how HTML creates one

A landmark is one of eight ARIA roles that mark major page sections: banner, navigation, search, main, region, complementary, form, and contentinfo. Several HTML elements imply those roles automatically when used in the right context. The APG mapping table is the practical reference:

HTML elementImplied landmark (when conditions are met)
header (child of body)banner
navnavigation
mainmain
asidecomplementary
footer (child of body)contentinfo
searchsearch
section with an accessible nameregion
form with an accessible nameform

Context matters. A header or footer nested inside article, aside, main, nav, or section loses its page-level landmark status—MDN documents the same rule for <header>. A bare <section> or <form> without aria-label, aria-labelledby, or title is not exposed as a landmark; naming turns it into a navigable region or form.

A short analogy: landmarks are floor labels in a building directory. Sighted visitors may already know where the lobby and offices sit. The directory exists so someone navigating by name can reach the same places without walking every corridor.


How to structure a service page

APG’s general design steps translate cleanly to a services, about, or contact template.

Step 1 — Identify perceivable areas. Break the wireframe into the zones designers already draw: site header, primary nav, main offer, related sidebar, inquiry form, site footer. Nest only when a child area truly belongs inside a parent (for example, a local nav inside main for in-page section links).

Step 2 — Assign roles via HTML first. Prefer:

  • One page-level <header> for logo and global tools (banner).
  • One or more <nav> elements, each labeled if there is more than one (aria-label="Primary" / aria-label="Footer"—omit the word “navigation” from the label so screen readers do not announce “Primary navigation navigation”).
  • A single <main> wrapping the primary service content.
  • <aside> for complementary material that still makes sense alone (related services, certifications, hours).
  • A page-level <footer> for copyright, privacy, and secondary links (contentinfo).
  • A named <form> or <search> for site search or the inquiry block when those deserve their own stop in the landmark list.

Step 3 — Label duplicates. If a role appears more than once, give each instance a unique accessible name with aria-labelledby (preferred when a visible heading exists) or aria-label. APG warns against including the role name in the label. The Landmarks Pattern page adds a useful constraint: value diminishes as landmark count grows; aim for roughly seven or fewer, and keep all perceivable content inside some landmark so nothing is orphaned outside the map.

Service-page regionPreferLabel when…
Logo / global header<header>Rarely (one banner)
Primary / footer menus<nav>More than one nav
Offer, process, FAQ<main>Only if multiple mains (avoid)
Related services / proof<aside>More than one complementary
Inquiry or newsletterNamed <form>Always name the form landmark
Legal / contact strip<footer>Rarely (one contentinfo)

Redundant role="main" on a <main> element is unnecessary in modern browsers. Reserve explicit role attributes for legacy markup you cannot yet replace.


Limits and common mistakes

Landmarks are not a substitute for headings, lists, or meaningful link text; APG and WCAG techniques treat them as a supplement to native structure. Over-landmarking—wrapping every card in a region—creates noise instead of a skimmable outline. Modal dialogs generally should not gain an extra landmark wrapper; the dialog itself already defines a name and boundary.

Naming gaps are the other frequent failure. Multiple unlabeled nav or aside elements force users to distinguish “navigation” and “navigation” by trial. Untested section stacks that never receive an accessible name look structured in the DOM but invisible in the landmark list.

Browser and screen reader support for HTML landmarks is strong today; MDN still notes that newer elements such as <search> needed time to appear in accessibility trees, which is why older patterns sometimes kept role="search" on a form. Test with at least one screen reader’s landmark or rotor view before calling the page done.


Practical takeaways for your next website

  1. Outline landmarks on the wireframe. Name banner, navigation, main, complementary, and contentinfo before visual polish locks the DOM to anonymous <div>s.
  2. Prefer HTML sectioning elements. Use ARIA roles only when you cannot change the element type.
  3. One main per page. Put the service offer, process, and primary proof inside it; keep chrome outside.
  4. Label every repeated landmark. Distinguish primary vs. footer navigation and any parallel sidebars with short, unique names.
  5. Keep the list short and complete. Target a handful of landmarks that cover all perceivable content—empty zones and orphaned copy both weaken the map.

Ready to Discuss Your Website?

If you are planning a new website, a service redesign, or custom development for your business, we’re here to help shape the work—including page structures that stay clear for every visitor, not only those who see the layout.