Logistics and shipping companies operate some of the most heavily trafficked self-service web interfaces on the internet: package tracking pages, rate quote calculators, address-book management, label printing, customs documentation, and pickup scheduling. Every delayed or frustrated interaction translates directly into support-call volume, abandoned shipments, and customer churn—and inaccessible interfaces systematically exclude disabled users from completing these core business-critical tasks. The accessibility exposure is unusually broad: shipping companies often serve both B2B and B2C customers, include government contracts that trigger Section 508 requirements, and operate internationally, triggering the European Accessibility Act for consumer-facing services as of June 28, 2025. U.S. plaintiffs' firms have increasingly filed ADA Title III demand letters against shipping and freight brokerages, particularly where the public-facing quote calculator or tracking interface fails WCAG. A 2025 audit by a major disability-rights legal clinic of the 50 largest U.S. logistics websites found that 82 percent had keyboard-trap bugs in their tracking or quote flows, 71 percent had unlabeled form fields in pickup scheduling, and 94 percent had package-status timelines that were visually clear but semantically opaque to screen readers. This guide covers the legal framework, the specific accessibility failures common on logistics and shipping websites, and a compliance checklist that operations and IT teams can use to remediate.

Legal Requirements

Key Accessibility Issues in Logistics & Shipping

Package Tracking Timelines Visible but Semantically Opaque

Tracking pages display a package's journey as a visual timeline—a horizontal or vertical set of dots connected by lines showing status milestones ('Label Created', 'Picked Up', 'In Transit', 'Out for Delivery', 'Delivered'). These are almost universally built as purely visual components with icon-based state indicators, no programmatic status for the current step, and no semantic order for assistive technologies. A screen reader user hears disjointed timestamps with no context about where in the journey the package is.

How to fix:

Provide an ordered list (<ol>) of status events that conveys the sequence semantically. Mark the current step with aria-current='step' so assistive tech can announce 'current step'. Include descriptive text labels alongside any icons ('Delivered at 2:17 PM to front door'). Offer a plain-text summary at the top of the tracking page: 'Your package is currently In Transit. Estimated delivery Tuesday, April 22.' Ensure visual milestone indicators have meaningful alt text and sufficient color contrast (3:1 minimum for the current-step indicator).

Rate Quote Calculators with Inaccessible Dimension and Weight Inputs

Shipping quote tools require origin/destination postal codes, package dimensions (length, width, height), weight, declared value, and service level. The resulting forms commonly use unlabeled numeric inputs with unit selectors as separate custom dropdowns, dimension groups that aren't programmatically associated, and live-updated rate results that aren't announced to screen readers.

How to fix:

Label every numeric input explicitly, including the unit ('Length in inches', 'Weight in kilograms'). Group dimension inputs within a <fieldset> with a <legend> ('Package dimensions'). Mark the rate-output region with aria-live='polite' so updates to estimated cost are announced. Use semantic <select> for service-level choice and ensure decimal inputs use appropriate inputmode and type='number' with step attributes. Validation errors should move focus to the first error and be announced.

Pickup Scheduling with Custom Date/Time Pickers

Scheduling a courier pickup involves selecting a date within available windows, choosing a time range, and entering package details. Shipping sites frequently use custom calendar widgets that omit ARIA role='grid', time-window buttons without accessible names (e.g., a button displaying '9-11' with no programmatic label), and cutoff-time validation that silently prevents submission.

How to fix:

Use native <input type='date'> and <input type='time'> controls where possible; their browser-provided interfaces are significantly more accessible than most custom widgets. If custom pickers are required for business reasons, follow the ARIA Authoring Practices pattern for date pickers, including proper roving tabindex and grid semantics. Label time-window buttons with full text ('9 AM to 11 AM pickup window'). Announce cutoff-related restrictions via aria-live and ensure form-level error messages are associated with the relevant field.

Address Book and Multi-Shipment Management Tables

Business users of shipping platforms manage large address books and batch-create dozens of shipments at a time. The underlying tables often use <div>-based grid layouts or <table> elements without proper headers, scope attributes, or row/column associations. Bulk-selection checkboxes frequently lack accessible names, and row-level action menus (edit, delete, duplicate) use icon-only buttons.

How to fix:

Use semantic <table> with <thead>, <th scope="col">, <th scope="row"> where appropriate, and clear <caption> elements. Label every bulk-selection checkbox with the row it corresponds to (e.g., "Select shipment to 123 Main St" via aria-label). Provide text labels or aria-label for all icon-only action buttons. Announce batch-action outcomes via aria-live status regions. For very large tables, ensure column sorting and pagination controls expose their state via aria-sort and aria-label.

Customs Documentation and International Shipping Forms

International shipments require detailed customs forms: commodity description, HS tariff codes, country of origin, value per line item, tax IDs. These forms are inherently complex and, when inaccessible, effectively lock disabled international shippers out of the platform. Common failures include multi-row commodity tables without row headers, HS-code autocomplete widgets that don't announce suggestions to screen readers, and tax-ID fields with conditional requirements that appear without notice.

How to fix:

Structure commodity line-item entry as labeled form fields within repeated <fieldset> groupings (one fieldset per line item with a <legend> like 'Item 1'). Implement HS-code autocomplete following the ARIA combobox pattern with proper aria-autocomplete, aria-expanded, and aria-activedescendant attributes; ensure suggestions are announced via role='option'. Announce conditional field appearance (e.g., 'Tax ID required for shipments to Brazil') via aria-live regions and move keyboard focus to the new field when appropriate.

Compliance Checklist

  • Tracking pages expose package status as an ordered list with aria-current on the active step and a plain-text summary
  • Rate quote calculators label every input (including units), group dimensions in <fieldset>, and announce rate updates
  • Pickup scheduling uses native or ARIA-pattern-compliant date/time controls with accessible cutoff-time messaging
  • Address books and shipment tables use semantic <table> markup with proper headers, scope, and caption elements
  • Customs and international forms group line items in labeled <fieldset>; autocomplete follows ARIA combobox pattern
  • All icon-only buttons (edit, delete, duplicate, void) have accessible names via aria-label or visible text
  • Color contrast on tracking status indicators meets 3:1 for UI components; body text meets 4.5:1
  • Downloadable shipping labels and invoices are tagged PDFs with correct reading order and language attributes
  • Mobile tracking apps are accessible with VoiceOver and TalkBack, including barcode-scan fallback for users unable to use camera UI
  • An accessibility statement documents WCAG 2.1 AA conformance target, known limitations, and a support channel for accommodation requests

Further Reading

Other Industry Guides