House cleaning, maid service and janitorial website accessibility: quote forms, booking, pricing and trust info
Accessibility fixes for house cleaning, maid service, carpet cleaning and janitorial websites: instant-quote and booking forms, pricing and package tables, service areas, recurring scheduling and client portals, checklists, before-and-after photos, and insurance and background-check info.
House cleaning, maid service, carpet cleaning and commercial janitorial companies win most new customers from an "Instant quote" or "Book a cleaning" form. Around it sit package prices, a list of what's included, a service-area page, before-and-after photos, reviews, and for recurring clients, a scheduler and portal for visits, keys, tips and payments. Customers who use a screen reader, magnifier, keyboard or voice control, older homeowners and busy office managers on a phone often get stuck on placeholder-only quote fields, prices posted as images, "what's included" graphics and insurance badges with no text. A customer who can't get a price just books the next company. Here's what to check.
1. Instant-quote and booking forms
Give every field a visible label, mark required fields in text, use autocomplete for name, phone, email and address, and group choices like home size and cleaning type in fieldsets with legends. Error messages should say what to fix in words ("Enter the number of bedrooms, 1 to 10"), and the price or confirmation should be announced, not just shown in a box that appears silently. Don't make people type the same address twice for billing and service. (WCAG 3.3.2, WCAG 1.3.5, WCAG 3.3.1, WCAG 4.1.3, WCAG 3.3.7)
<form>
<label for="c-name">Your name (required)</label>
<input id="c-name" name="name" autocomplete="name" required>
<label for="c-email">Email (required)</label>
<input id="c-email" name="email" type="email" autocomplete="email" required>
<label for="c-zip">ZIP code (required)</label>
<input id="c-zip" name="zip" autocomplete="postal-code" inputmode="numeric" aria-describedby="c-zip-err" required>
<p id="c-zip-err"></p>
<fieldset>
<legend>Type of cleaning (required)</legend>
<label><input type="radio" name="type" value="standard" required> Standard cleaning</label>
<label><input type="radio" name="type" value="deep"> Deep cleaning</label>
<label><input type="radio" name="type" value="move-out"> Move-out cleaning</label>
</fieldset>
<label for="c-beds">Bedrooms (required)</label>
<input id="c-beds" name="bedrooms" type="number" min="1" max="10" required>
<label for="c-baths">Bathrooms (required)</label>
<input id="c-baths" name="bathrooms" type="number" min="1" max="10" required>
<button type="submit">Get my price</button>
<p role="status" id="c-status"></p>
</form>
<!-- example values; fill c-zip-err with a plain-words error and c-status with "Your estimated price is $140. We'll confirm by email." -->
See accessible contact forms and form error messages.
2. Pricing and packages as a real table
Cleaning packages are often shown as a graphic with coloured ticks. Use a real table with header cells, say "Included" or "Not included" in words, and keep "starting at" prices honest about what changes the price (home size, pets, condition). (WCAG 1.3.1, WCAG 1.4.1, WCAG 1.4.5)
<table>
<caption>Home cleaning packages (prices for up to 3 bedrooms and 2 bathrooms)</caption>
<thead><tr><th scope="col">Task</th><th scope="col">Standard, from $140</th><th scope="col">Deep, from $260</th></tr></thead>
<tbody>
<tr><th scope="row">Dust surfaces and vacuum floors</th><td>Included</td><td>Included</td></tr>
<tr><th scope="row">Inside oven and fridge</th><td>Not included</td><td>Included</td></tr>
</tbody>
</table>
<!-- example packages and prices, use your own -->
See accessible pricing tables.
3. "What's included" checklists as real lists
Room-by-room checklists are often a designed image or a PDF. Put them on the page as real lists under room headings so they can be read, zoomed and copied into a message. (WCAG 1.3.1, WCAG 1.4.5)
<h3>Kitchen</h3> <ul> <li>Wipe counters, backsplash and outside of appliances</li> <li>Clean sink and faucet</li> <li>Sweep and mop floor</li> </ul> <!-- example tasks, list what you actually do -->
If you also offer the checklist as a PDF, make it a tagged PDF. See accessible PDFs.
4. Service areas in text
A shaded coverage map tells a screen-reader user nothing, and a keyboard user can get stuck in its controls. List the towns or ZIP codes you serve as text, and give any map embed a title. (WCAG 1.1.1, WCAG 4.1.2)
<h2>Where we clean</h2> <p>Homes and offices in Jenks, Bixby, Glenpool and south Tulsa (ZIP codes 74037, 74008, 74033, 74133).</p> <iframe src="https://www.google.com/maps/embed?..." title="Map of our cleaning service area"></iframe> <!-- example towns and ZIP codes, use your own -->
Our location page and map embed guide has more.
5. Recurring scheduling and client portals
Weekly, biweekly and monthly clients pick visit days, add notes (gate codes, pets, keys), tip and pay in a scheduler or portal. Test it with only the keyboard: choose a frequency, a date and an arrival window, then confirm. Time slots should be buttons with the full date and time in text, and the confirmation should be announced. Logins should let password managers fill and allow paste, avoid puzzle-only CAPTCHAs, and warn before a session times out. Most schedulers and portals are third-party (Jobber, Housecall Pro, ZenMaid, Launch27 and similar), so ask the vendor for its accessibility conformance report (VPAT), and offer a phone, text or email option next to the widget. (WCAG 2.1.1, WCAG 2.4.11, WCAG 3.3.8, WCAG 2.2.1)
<fieldset> <legend>Choose an arrival window for your first biweekly cleaning</legend> <button type="button" aria-pressed="false">Thursday, November 5, 9 to 11 AM</button> <button type="button" aria-pressed="false">Thursday, November 5, 1 to 3 PM</button> </fieldset> <p role="status"></p> <p>Prefer to book by phone or text? Call or text 918-555-0100.</p> <!-- example dates, times and number, use your own -->
See our booking widget test and accessible logins and CAPTCHA.
6. Before-and-after photos
Describe what changed in the alt text, not just "cleaning photo". Drag-to-compare sliders need buttons or two separate photos as an alternative, and auto-rotating galleries need a pause button. (WCAG 1.1.1, WCAG 2.5.7, WCAG 2.2.2)
<figure> <img src="carpet-before.jpg" alt="Before: beige living-room carpet with dark traffic paths and a large coffee stain"> <img src="carpet-after.jpg" alt="After: the same carpet an even beige with the stain gone"> <figcaption>Living-room carpet deep clean (example project)</figcaption> </figure> <!-- example values -->
See alt text examples and accessible sliders and carousels.
7. Insurance, bonding and background checks as text
Trust details are often a row of badge images or a photo of a certificate. Say them in real text, and give any badge image alt text that names it. Only state what's true and current, and say what each check covers. (WCAG 1.1.1, WCAG 1.4.5)
<h2>Who comes into your home</h2> <ul> <li>Liability insurance: yes, certificate available on request.</li> <li>Every cleaner passes a background check before their first visit.</li> <li>Supplies: we bring our own; tell us if you need fragrance-free products.</li> </ul> <!-- example wording, state only what is true for your business -->
8. Reviews and ratings
Star ratings shown only as images need text ("Rated 4.9 out of 5 from 85 reviews"), and review sliders need pause and keyboard controls. Only show real reviews. (WCAG 1.1.1, WCAG 2.2.2) See the reviews and star ratings guide.
9. Click-to-call, text and consistent help
Phone and text icons need a name, the number should also appear as text, and the way to reach you should be in the same place on every page. Tap targets need room on a phone. (WCAG 2.4.4, WCAG 2.5.8, WCAG 3.2.6)
<a href="tel:+19185550100">Call 918-555-0100</a> <a href="sms:+19185550100">Text us at 918-555-0100</a> <p>Need help booking or want your quote in another format? Write to [email protected].</p> <!-- example number and email, use your real contact details -->
Keep this factual and don't claim the site is "fully accessible". See the accessibility statement template.
10. Contrast, zoom and pop-ups
Pale aqua, mint and light-grey text on white, and white text over photos of shiny kitchens, are common in cleaning branding and often fail the 4.5:1 contrast ratio. Check the site at 200% zoom on a phone-width window, and make sure "$20 off your first clean" pop-ups close with Escape and don't trap the keyboard. (WCAG 1.4.3, WCAG 1.4.10) See the colour contrast guide and pop-ups and chat widgets.
Common mistakes
- Instant-quote forms with placeholder-only fields and a price that appears silently.
- Package prices and "what's included" posted as one image with coloured ticks.
- Room-by-room checklists only in a flat PDF.
- Service areas shown only as a shaded map.
- Schedulers and client portals that can't be used with a keyboard and no phone or text alternative.
- Insurance and background-check badges with no text.
- Before-and-after photos with no alt text, or drag-only comparison sliders.
- Light aqua or grey text on white.
- An overlay widget instead of real fixes. See overlays vs real fixes.
A 15-minute check you can do today
- Using only Tab, Shift+Tab, Enter and Space, fill in your quote or booking form and submit it. Can you always see where you are?
- Submit it with a wrong ZIP code. Does the error say what to fix, in words?
- Check the price or confirmation appears as text a screen reader would announce.
- Open your pricing page and check the prices and "what's included" are real text you can select.
- Find your service area without looking at the map. Is it listed as text?
- Check three before-and-after photos and your insurance badges for alt text.
- Zoom to 200% on a phone-width window. Can you still reach the call and book buttons?
What a scan can and can't check here
Our scan is automated, so it finds only part of the barriers on the public pages it visits, such as your home, services, pricing and quote pages: missing alt text, unlabelled fields and buttons, low contrast, missing page language and similar code problems. It doesn't submit your quote form, book a visit, sign in to your client portal or judge whether alt text describes the work well, which is why the 15-minute check matters. Our Fix-Pack scans up to 10 public pages and gives copy-paste fixes for your platform, and notes what to ask your scheduling or portal vendor for. Platform steps: WordPress, Squarespace, Wix, GoDaddy.
Related: contractor and home-service websites, landscaping, lawn care and pest control websites, online booking widgets.
This is general technical guidance, not legal advice, and it doesn't certify compliance with the ADA or any law, or protect against claims.
Want the fixes written for you?
Start with a free homepage snapshot. The $149 Fix-Pack scans up to 10 pages and gives copy-paste fixes for your platform within 48 hours, with a 14-day refund promise. See a sample report first.
This is general technical guidance, not legal advice, and it does not certify compliance with the ADA or any law.
Related guides
- Catering, food truck and meal prep website accessibility: menus, event quotes, locations and orders
- WCAG 2.2 explained for small-business websites
- Squarespace accessibility fixes: alt text, contrast, forms and more
- Wix accessibility fixes: a practical checklist
This guide is general technical information, not legal advice. Following it does not certify ADA or any legal compliance. Automated checks find only part of accessibility barriers.
Check your own site
Run a free homepage snapshot to see your top 3 issues in about a minute, or order the $149 Fix-Pack for up to 10 pages with copy-paste fixes for your platform.