Resource · Guide

The accessible store locator guide.

A practical reference for designers, agencies, and engineering leads who need a locator that works for keyboard users, screen-reader users, and anyone who needs readable contrast, without bolting accessibility on at the end of the project.

12 min readLast reviewed Apr 2026Aligned to WCAG 2.2 AA
Section 01

Why store locators fail accessibility, and why nobody notices until someone has to use one.

Most locator widgets ship as a search box, a map, and a list. That sounds simple, until you try to use it without a mouse. Locators concentrate four of the hardest accessibility patterns into one screen: a form, a dynamic list, a custom map control, and content that updates without a page reload. Each one is a place teams quietly cut corners.

The result is widgets that look fine in a screenshot but lock out anyone navigating with a keyboard, a screen reader, voice control, or a low-contrast display. The failures rarely surface in QA because most test plans use a mouse on a high-contrast monitor.

Forms without real labels
Placeholder text disappears when the field is filled. A screen reader needs a persistent label.
Custom map controls
Embedded maps swallow keyboard focus and never give it back, trapping users mid-page.
State changes that go silent
Filtering or searching swaps the result list, but the page never tells assistive tech anything changed.
Brand-first colour choices
A brand palette gets locked in before anyone checks contrast against text or against UI strokes.
Section 03

Keyboard navigation: the eight checks every locator should pass.

If you can't complete a search and choose a location using only the Tab, Shift+Tab, Enter, Space, Escape, and arrow keys, the locator is not accessible. Full stop. This is the cheapest test you can run, and it surfaces most locator defects.

  • Tab order is logical Search input, then filters, then results, then map controls. Avoid skipping around the visual layout.
  • Every interactive element is reachable Pins, expand toggles, “Get directions” links. If you can click it, you can tab to it.
  • Focus is always visible Never outline: none without an obvious replacement (2 px outline + offset is standard).
  • Filters use the right keys Single-select chips behave like radios; multi-select chips behave like checkboxes; segmented groups respond to .
  • The map can be skipped Provide a “skip to results” link, or never let the map become a tab stop unless the user opts in.
  • Modals close on Escape “Get directions,” “Hours of operation,” and any flyout returns focus to the trigger when dismissed.
  • Hit targets are at least 24×24 CSS pixels (WCAG 2.2 SC 2.5.8). Pin clusters and chip rows are common offenders.
  • No keyboard-only dead ends Every focused element has a way back. If autocomplete opens, Escape must close it without losing the input.
Try it: keyboard-only locatorTab · on chips · Esc to reset

Search

Filters

Results

Focus:none
Section 04

Screen-reader and semantic checklist.

A keyboard-navigable locator is not automatically a screen-reader-friendly locator. The next layer is what the page tells assistive tech: roles, names, structure, and announcements when state changes.

  • Wrap the widget in a landmark Use <section aria-label="Find a location"> or <search> when supported.
  • Use real heading hierarchy The locator’s heading is an <h2> on most pages; result group labels are <h3>.
  • Results are a list Use semantic <ul><li>. A screen reader will say “list with 3 items.”
  • Status messages are announced Announce “3 locations found” via aria-live="polite" when results change.
  • Maps have an accessible name Use aria-label="Map showing 3 locations", with a textual list nearby that does the actual work.
  • Inputs have associated labels Use <label for="zip"> matched to id="zip". Placeholders are not labels.
  • Errors are tied to fields Connect the input to the error text via aria-describedby. “Invalid zip” by itself, somewhere on the page, is not enough.

Sample markup

Avoid
<div class="locator">
  <input type="text"
         placeholder="Enter zip"/>
  <div class="results">
    <div>Mission Branch</div>
    <div>Bernal Heights</div>
  </div>
</div>
Use
<section aria-labelledby="loc-h">
  <h2 id="loc-h">Find a location</h2>
  <label for="zip">Zip or city</label>
  <input id="zip" type="text"/>
  <p role="status">3 locations near 94110</p>
  <ul>
    <li>…</li>
  </ul>
</section>
Section 05

Colour contrast and focus states.

Contrast is the failure most often caught by automated scanners. It's also the one most often re-introduced when a brand colour gets re-tinted late in the project. Pin down the contrast targets early so brand decisions don't corner the engineering team.

WCAG 2.2 AA contrast targets

What you’re measuringMinimum ratioWhere it shows up in a locator
Body text under 18 px (or under 14 px bold)4.5 : 1Result list addresses, filter labels, helper text
Large text: 18 px regular or 14 px bold3 : 1Section headings, location names
UI components & non-text graphics3 : 1Input borders, focus rings, icon strokes, map pins
Focus indicators3 : 1Against the focused element and against adjacent surfaces

Pass / fail in the brand palette

Sample combinations from the dropafinder palette, with the same brand swatches in different roles. The cyan accent passes against navy as a UI accent, but not against white as text.

Body text on surface
#1A1D38 on #FFF15.4 : 1 · Pass
Large heading on navy
#FFF on #2B359611.6 : 1 · Pass
Helper text on surface
#8B90AD on #FFF3.6 : 1 · Body fails
Cyan as small text
#FFF on #29B6F62.0 : 1 · Body fails

Focus indicators: do and don’t

outline: none
No visible focus ring at all. A keyboard user has no idea where they are on the page.
2 px outline + offset + halo
A 2 px navy outline with a 3 px offset and a soft halo passes the 3:1 contrast target on most surfaces.
Section 06

Map and list interaction concerns.

The single biggest design decision in an accessible locator is which surface is primary. Maps are a visual aid; the list is the source of truth. Build the list first, then enhance with a map.

List is primary, map is supporting

If the map disappears, the locator should still work. Build the result list first; layer the map on top for visual users.

Map is decorative for screen readers

Mark the map container with aria-hidden="true" and rely on the textual list, or expose only a short summary like “Map of 3 locations.”

Avoid focus traps

Don’t let third-party map embeds capture Tab forever. Either keep the map out of the tab sequence or provide a "skip the map" bypass.

Selection should sync both ways

Clicking a pin should focus the matching list card, and selecting a card should highlight (not zoom hard into) the pin. Don’t make the user track two states.

Status messages, not page reloads

When the list changes, announce it with aria-live="polite". Don’t re-render the whole region. Keep the heading stable so the screen-reader user’s position doesn’t reset.

Respect motion preferences

Map pan, zoom-to-fit, and result-card transitions all need a prefers-reduced-motion branch. “Snap, don’t glide” is the rule.

Section 07

WCAG 2.2 AA criteria, mapped to locator patterns.

These are the success criteria a locator audit comes back to most often. Use this as a punch list. Every row is something you can verify with a 5-minute manual check.

CriterionNameHow it shows up in a locator
1.3.1Info & relationshipsResult lists are real <ul> elements; field labels are real <label> elements; section headings nest correctly.
1.4.3Contrast (minimum)4.5:1 for body text, 3:1 for large text. Brand-tinted helper text often fails this. Re-check after re-skinning.
1.4.11Non-text contrastInput borders, chip outlines, focus rings, and pin strokes all need 3:1 against their adjacent surfaces.
2.1.1KeyboardSearch, filters, results, and any modals are operable with Tab + Enter + Esc + arrow keys.
2.4.3Focus orderTab moves through the locator in the order a sighted user would scan: search → filters → list → map.
2.4.7Focus visibleEvery focusable target has a visible ring. Never outline: none without an alternative.
2.4.11Focus not obscured (2.2 / AA)Sticky headers, cookie banners, and overlay map controls must not cover the focused element.
2.5.5Target sizeFilter chips, list cards, pins, all at least 24×24 CSS px (44 px is more comfortable on touch).
3.3.1Error identification“Enter a valid US zip” is shown in text and tied to the input via aria-describedby.
3.3.2Labels or instructionsPersistent <label> on every input. Format hints (“e.g. 94110”) live in helper text, not the placeholder.
4.1.2Name, role, valueFilters expose aria-pressed or aria-selected; the active filter is programmatically discoverable.
4.1.3Status messagesResult-count changes announce via aria-live="polite" or role="status".
How dropafinder approaches it

Built so the accessibility work is already done before the brand work starts.

dropafinder is a hosted locator platform. The keyboard, focus, and semantic patterns above are part of the product foundation, not something the agency or client has to remember to check. Brand colours, fields, and copy layer on top of an a11y-conformant base.

WCAG-compliant themes by default

Brand colour pickers run a contrast check before they'll save. You can't configure a finder that fails text contrast.

Keyboard-first navigation

Search → filters → results → details all reachable with Tab, with visible focus rings, escape-to-close modals, and arrow-key chip groups.

Semantic results, announced changes

Real list semantics, real headings, and a polite live region that announces "3 locations near 94110" as the user searches and filters.

Map as the supporting view

The list is the source of truth. The map is decorative for assistive tech, with sync between pin and card so nothing is map-only.

Important: Not legal advice

This guide is informational. It is not legal advice and does not substitute for an audit by a qualified accessibility consultant or counsel. ADA, Section 508, EAA (European Accessibility Act, in force June 2025), and other regional obligations vary by industry, jurisdiction, and the specific use of your locator. Validate any production locator against your own legal and procurement requirements.

Ship a locator that everyone can use.

Book a 30-minute demo focused on accessibility patterns. We’ll walk you through keyboard nav, screen-reader output, and contrast tooling on a real locator: yours or one of ours.

No contract required to start. Built accessibility-first since day one.