Apple Pay, Google Pay, and PayPal Checkout Buttons: The Accessibility Gaps a Vendor-Locked Widget Creates
Quietramp ·
Apple Pay, Google Pay, and PayPal Checkout Buttons: The Accessibility Gaps a Vendor-Locked Widget Creates
A row of payment buttons under “Buy now” — Apple Pay, Google Pay, PayPal, sometimes Shop Pay — is now standard on most e-commerce product and cart pages. Unlike almost everything else on that page, a store’s own developers didn’t design these buttons and can’t restyle them freely. Each one is rendered by the payment provider’s own JavaScript, in a fixed visual style the provider controls, and tapping it hands the rest of the transaction to a payment sheet that opens entirely outside the store’s own page.
Quick answer: three things are worth checking. First, the button’s accessible name — the provider’s official button API builds this in correctly by default, but a custom-built lookalike button or an awkward CSS override can break it, which fails WCAG SC 4.1.2 Name, Role, Value (Level A). Second, contrast: Apple, Google, and PayPal each lock their button to a small preset list of colors and styles rather than open customization, which limits how much a store can do if the chosen preset doesn’t clear SC 1.4.11 Non-text Contrast’s 3:1 ratio against an unusual page background. Third, size: a checkout row squeezed to fit three wallet buttons side by side on mobile can drop below SC 2.5.8 Target Size (Minimum)’s 24×24 CSS pixel floor (Level AA, WCAG 2.2). Underneath all three sits a boundary worth knowing about on its own: once the button is tapped, the payment sheet that opens is native OS or browser UI, not part of the store’s page — no scan or manual review of the store’s own site can test what happens inside it.
This article covers technical accessibility practice, not legal advice — it explains what WCAG 2.1/2.2 AA requires for express-checkout buttons and where vendor lock-in limits what a store can fix directly, not whether a specific implementation carries legal risk.
Why these buttons are a different kind of accessibility problem
Most accessibility work on an e-commerce site is markup the store’s own team wrote and can edit directly — a missing alt, an unlabeled icon button, a <div> doing a button’s job. A wallet button is structurally different. Apple’s own developer documentation describes its button as a fixed unit: “Apple Pay APIs provide several types of buttons you can use in your app or website. Each button displays an Apple-approved caption, font, color, and style… support for localization and accessibility are built in” (Apple Developer, “Planning: Apple Pay”). The one CSS property Apple explicitly allows a merchant to adjust is corner radius — font, caption, and color aren’t open for editing, and Apple’s own guidance says plainly not to build a lookalike instead of using the official button.
Google is even more direct: “Don’t create your own Google Pay buttons or alter the font, color, button radius, or padding within the button in any way” (Google Pay brand guidelines, Web). A merchant picks a dark or light variant for the surrounding background and keeps the button at least as large as the buttons beside it — nothing finer-grained is available. PayPal’s JavaScript SDK follows the same pattern: a short list of preset color classes (paypal-gold, paypal-blue, paypal-white) and one CSS variable for border radius, not an open palette (PayPal JS SDK reference). Three unrelated vendors landing on the same restriction means the usual advice — “just change the CSS” — only applies at the margins here.
The accessible name: mostly solved, until someone “improves” it
Used as shipped, all three providers’ accessible-name handling is already correct — part of what “accessibility built in” means in Apple’s documentation above. The risk shows up when a team wraps the button in extra markup to control layout, rebuilds it as a styled <div> to dodge the vendor’s size constraints, or strips attributes during a bundler/CSS pipeline that doesn’t know what it’s touching. SC 4.1.2 requires that “for all user interface components… the name and role can be programmatically determined” — a rebuilt button has to earn that from zero, where the vendor’s own element already had it. The practical check: tab to the button and confirm a screen reader announces a real name (“Apple Pay,” “Google Pay,” “PayPal” — not “button,” not silence). If it fails, go back to the vendor’s official element rather than patching the custom version further.
Contrast: a genuinely open question, not a settled pass
SC 1.4.11 requires a 3:1 contrast ratio for UI components against their adjacent colors, with one exception: it doesn’t apply “where the appearance of the component is determined by the user agent and not modified by the author.” It’s tempting to read a wallet button’s vendor-locked styling as falling under that exception — the store genuinely isn’t choosing the color. But the exception’s own wording is about the user agent (the browser’s native default styling, like an unstyled checkbox), not a third-party vendor’s SDK that the store chose to embed. WCAG’s own text doesn’t address that distinction directly, and this article isn’t the place to resolve it on the standard’s behalf. The honest, practical position: check the actual rendered contrast of whichever preset (dark or light) you’ve picked against your specific page background, and if neither preset clears 3:1 on a dark or heavily branded checkout section, flag it to whoever runs your audit rather than assuming the vendor-lock exempts it.
Target size on a crowded checkout row
SC 2.5.8, added in WCAG 2.2, sets a 24×24 CSS pixel floor for pointer targets, with exceptions for inline text, essential presentations, and sizing the user agent controls. Google’s own rule — keep the wallet button at least as large as the buttons beside it — is a reasonable default on a single-button row. The failure mode: a mobile layout squeezing three wallet buttons plus “Add to Cart” into one row and scaling all of them down, which can quietly drop the rendered size below 24×24 px even though desktop looked fine. Measure the actual rendered box on a real mobile viewport, not the design mock.
The boundary no audit can cross
Once a shopper taps the button, what happens next — a native payment sheet, biometric confirmation, card selection — renders entirely outside the store’s page, in OS or browser UI the merchant’s markup never touches. Neither an automated scan nor a manual reviewer testing the merchant’s site can evaluate that part of the flow, because it isn’t the merchant’s content. That’s a real scope boundary, not a gap in effort: independent, named-author accessibility evaluations of these platforms do exist at the OS/app level — AFB’s AccessWorld series reviewed PayPal and Venmo and, separately, Apple Pay — but those tested the platforms’ own apps, not a merchant’s embedded web button, and aren’t a substitute for checking your own page.
FAQ
Can I restyle a wallet button to match my site’s brand colors? Only within the choices the vendor allows — a dark/light variant and, for Apple Pay, the corner radius. Font, caption, and base color are locked by the vendor.
Does axe-core or a similar scanner catch problems with these buttons? It can catch a missing accessible name if a custom-built button replaces the vendor’s own element incorrectly. It can’t evaluate what happens after the tap, inside the native payment sheet, because that content never loads into the page a scanner reads.
Is the vendor responsible for accessibility issues inside the payment sheet itself? Yes — that part of the flow is the vendor’s own UI, not the merchant’s. The merchant’s responsibility is the trigger button: using the vendor’s official element correctly, checking its rendered contrast and size on the actual page, and not rebuilding it from scratch.
Get a full audit of your site’s interactive UI
Express-checkout buttons are one more interactive component a purely visual review won’t catch — a full Quietramp audit checks your whole site against WCAG 2.1 AA, verified by a person operating it with a keyboard and screen reader, not just an automated scan. See a sample report or check pricing — $890 one-time, $99/month for ongoing re-checks.
This is educational content about technical accessibility practice, not legal advice. Meeting WCAG 2.1 AA does not constitute a legal compliance determination under the ADA or any other standard, and third-party payment widgets carry their own separate risk considerations outside this article’s scope — consult qualified counsel for legal risk questions.
This article was drafted with AI assistance and reviewed by a person for accuracy before publication.