Vacation rental direct booking pages: accessible calendars, dates, guests and prices
How to make a vacation rental, cabin or inn direct booking page accessible: availability in words not colours, typed date fields, clear date errors, named guest buttons, a text price breakdown with announced totals, a plain payment line, detailed access info, platform notes and a 5-minute check.
More guests are booking cabins, cottages, inns and vacation rentals straight from the owner's own website, to skip platform fees or because a search tool sent them there. That makes your direct booking page your front desk. It's also where small sites lose people: an availability calendar that shows booked nights only in grey, a date picker that only works with a mouse, a "+" button with no name for guests, and fees that appear only at the last step. A guest who uses a screen reader, a magnifier, a keyboard or voice control can't book if they can't tell which nights are free. Here's how to make each part work for everyone.
1. Show availability in words, not just colours
A month grid where booked nights are grey and free nights are white tells a screen reader user nothing, and it's hard for many people with low vision or colour blindness. Add the status as text for each night (a word, or hidden text a screen reader reads), give the month a caption, and use real table markup so each date is announced with its weekday. (WCAG 1.4.1, WCAG 1.3.1)
<table class="avail">
<caption>December 2026 availability</caption>
<thead>
<tr><th scope="col" abbr="Sunday">Sun</th><th scope="col" abbr="Monday">Mon</th> ...</tr>
</thead>
<tbody>
<tr>
<td>13 <span class="st booked">Booked</span></td>
<td>14 <span class="st free">Available</span></td>
...
</tr>
</tbody>
</table>
<p>Minimum stay: 2 nights. Check-in 4 PM, check-out 11 AM (Central time).</p>
<!-- example month, rules and times, use your own -->.avail .st { display: block; font-size: .8rem; }
.avail .booked { text-decoration: line-through; } /* a second cue, not only grey */
A plain list of open dates ("Available: Dec 14 to 17, Dec 20 to 22") under the calendar is just as good and often easier for everyone. For more on table markup, see accessible tables and colour-only meaning.
2. Let people type their dates
Custom date pickers are one of the hardest widgets to get right with a keyboard and screen reader. The simplest fix is to offer labelled date fields people can type into, with the calendar as an extra, not the only way. Native date fields work with the keyboard on all modern browsers. If you keep a pop-up calendar, it must work with arrow keys, Escape and Enter, and return focus to the field when it closes; the W3C date picker example shows the expected keys. (WCAG 2.1.1, WCAG 3.3.2, WCAG 2.5.7)
<fieldset> <legend>Your dates</legend> <label for="ci">Check-in</label> <input id="ci" name="checkin" type="date" min="2026-11-03" aria-describedby="stay-hint" required> <label for="co">Check-out</label> <input id="co" name="checkout" type="date" min="2026-11-04" aria-describedby="stay-hint" required> <p id="stay-hint">Minimum stay 2 nights. Fridays and Saturdays book together.</p> </fieldset> <!-- example dates and stay rules, use your own -->
Don't make "drag across the calendar to pick your nights" the only way to choose a range.
3. Explain date problems in words
When the dates don't work, say why and what would: "Dec 19 is booked. The nearest open 2-night stay is Dec 20 to 22." Don't just turn the field red or clear it. (WCAG 3.3.1, WCAG 3.3.3) See accessible form error messages.
4. Guests, pets and requests
Use labelled number fields or select menus for adults, children and pets. If you use "-" and "+" buttons, give each a name ("Remove one adult", "Add one adult"), make them at least 24 by 24 pixels, and announce the new count. Add an optional text box for access needs, such as step-free entry or a ground-floor bedroom. (WCAG 4.1.2, WCAG 2.5.8, WCAG 4.1.3)
<div class="stepper"> <span id="adults-l">Adults</span> <button type="button" aria-label="Remove one adult" aria-describedby="adults-l">-</button> <output id="adults" aria-live="polite">2</output> <button type="button" aria-label="Add one adult" aria-describedby="adults-l">+</button> </div> <label for="needs">Anything we should know about access? (optional)</label> <textarea id="needs" name="needs" rows="3"></textarea>
5. Show the full price as text before payment
Guests want the total, not a nightly rate that grows at checkout. List the nights, cleaning fee, taxes and any deposit as text (a small table or list), and when the dates or guests change, announce the new total in a status message so screen reader users hear it. Then show a review step with the dates, guests, total and cancellation terms before you take payment. (WCAG 1.3.1, WCAG 4.1.3, WCAG 3.3.4)
<dl class="price">
<dt>3 nights at $180</dt><dd>$540</dd>
<dt>Cleaning fee</dt><dd>$85</dd>
<dt>Lodging tax</dt><dd>$56.25</dd>
<dt>Total</dt><dd>$681.25</dd>
</dl>
<p role="status" id="total-msg"></p>
<script>
// after recalculating: one short message, not every keystroke
document.getElementById('total-msg').textContent = 'Total for 3 nights: $681.25';
</script>
<!-- example prices and fees, use your own -->
6. Say how you take payment, in plain text
Booking scams that send fake payment links by text or WhatsApp are in the news, and careful guests now look for reassurance. Put a short line near the booking button and on the confirmation page saying how you take payment, for example "We only take payment on this website. We'll never ask you to pay by text message, WhatsApp or gift card," and put your phone number and email in the same place on every page. This helps everyone, and it's especially clear for people who use screen readers and can't check a padlock icon or logo at a glance. (WCAG 3.2.6)
7. Describe the place in detail
Guests with disabilities need facts to decide whether a rental works for them: steps to the entrance, door widths, bed heights, the shower type, grab bars, parking distance and lighting. Write these as text, with alt text on the photos that show them, and be specific rather than saying "accessible". Our hotel and B&B guide has a fuller list. (WCAG 1.1.1)
8. Platform notes
- Booking-site builders for rentals (Lodgify, OwnerRez, Hostaway, Guesty and similar): the calendar and checkout come from the vendor. Run the keyboard test below on your own booking page, and if it fails, send the vendor the list of problems and ask for their accessibility conformance report. Keep offering booking by phone and email in the meantime. See booking widgets.
- WordPress and WooCommerce: booking plugins vary a lot. Test the date picker with a keyboard before you choose one, and check that each field has a visible label.
- Squarespace, Wix, Webflow and GoDaddy: if you embed a booking widget, check that it has a title, works inside the page with a keyboard, and doesn't trap focus.
- AI-built and custom sites: ask for native date fields, a text list of open dates and a text price breakdown. See checking an AI-built website.
Common mistakes
- Booked nights shown only by grey or a strike in an image.
- A calendar that only opens on mouse click and can't be closed with Escape.
- Unnamed "-" and "+" guest buttons.
- Errors that only turn a date red.
- Cleaning fees and taxes that appear only at the payment step.
- Accessibility described as "accessible" with no details.
- No phone or email option when the booking widget fails.
A 5-minute check you can do today
- Open your booking page and put the mouse away.
- Press Tab. Can you reach the date fields, open and close any calendar, and see where the focus is?
- Type or choose dates that include a booked night. Does the page say, in words, what's wrong?
- Change the number of guests with the keyboard. Does the total update in text?
- Zoom to 200% on a phone-width window. Can you still read the calendar and the price without sideways scrolling? (WCAG 1.4.10)
- Find the line that says how you take payment. If there isn't one, add it.
What a scan can and can't check here
An automated scan finds only part of the barriers on the pages it visits. It can flag unlabelled date and guest fields, unnamed buttons, low contrast and missing table headers. It can't tell whether a calendar works with arrow keys, whether booked nights are clear without colour, or whether the total is announced, which is why the 5-minute check matters. Booking widgets in iframes on another domain may not be scanned at all.
Related: online booking widgets, hotels and B&Bs, tour and activity booking, checkout accessibility.
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
- Interactive portfolio sites: accessible 3D scenes, games, custom cursors and scroll effects
- Website redesign or platform move: an accessibility checklist (WordPress to Astro, Webflow and more)
- GivingTuesday and year-end donation pages everyone can use: amounts, monthly gifts, progress bars and receipts
- Accessibility feature tags and filters for online stores: how to list them clearly and honestly
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, then decide
- Free homepage snapshot. Your top 3 issues in about a minute. No signup, no card.
- $149 Fix-Pack, if you want the full list. Up to 10 pages scanned, issues ranked by impact, copy-paste fixes for your platform, delivered within 48 hours, plus one re-scan after you apply them.
Get my free snapshot Order the Fix-Pack – $149
14-day refund promise. See a sample report first. A technical report, not legal advice; automated checks find only part of accessibility barriers.