Accessibility
· 13 checks — Landmarks, headings, alt text, forms, and link quality rolled into one auditable list.DLandmark StructureAction6 landmarksFIX
Screen reader users cannot quickly navigate to the primary content. Wrap your main content in <main>.
Without a <main> landmark, screen-reader users can't skip past the navigation to the page content — every page starts with re-reading the menu.
Learn more ▾ ▴
The <main> element marks the page's primary content area. Assistive tech offers a 'jump to main' shortcut — but only if <main> exists. Without it, every page navigation forces re-reading the header. Wrap your primary content in a single <main>.
Source: WAI-ARIA / WCAG 2.4.1
Multiple navigations need aria-label to distinguish them for screen readers.
Some <nav> elements lack aria-label — screen-reader users hear 'navigation' multiple times with no way to distinguish them.
Learn more ▾ ▴
When a page has multiple <nav> regions (primary, footer, breadcrumb), each needs aria-label or aria-labelledby. AT users navigate by landmark; identical 'navigation' announcements force them to enter each one to discover purpose.
Source: WAI-ARIA Authoring Practices
Add a skip link as the first focusable element so keyboard users can bypass repeated navigation.
Without a skip-nav link, keyboard users tab through every nav item before reaching content — every page, every visit.
Learn more ▾ ▴
WCAG 2.4.1 (Bypass Blocks) requires a mechanism to skip past repeated content. The standard implementation is a 'Skip to main content' link that's the first focusable element, visually hidden until focused. Three lines of HTML + four of CSS.
Source: WCAG 2.1 SC 2.4.1
DLink & Button QualityAction8 issue(s) across 305 links and 23 buttonsFIX
| Element | Text | Issue | Suggested Fix |
|---|---|---|---|
| /documentation | Documentation | new tab | Add '(opens in new tab)' to text |
| https://my.haproxy.com/portal/cust/login | Customer login | new tab | Add '(opens in new tab)' to text |
| (empty) | empty | Add link text or aria-label | |
| /products/haproxy-one | Learn more | generic text | Replace with descriptive text |
Before: Learn more Suggested: Haproxy One | |||
| /events/kubecon-amsterdam-2026 | Learn more | generic text | Replace with descriptive text |
Before: Learn more Suggested: Kubecon Amsterdam 2026 | |||
| /products/haproxy-one | Learn more | generic text | Replace with descriptive text |
Before: Learn more Suggested: Haproxy One | |||
| /events/kubecon-amsterdam-2026 | Learn more | generic text | Replace with descriptive text |
Before: Learn more Suggested: Kubecon Amsterdam 2026 | |||
| (empty) | empty | Add link text or aria-label | |
| /user-spotlight-series/scaling-the-edge-… | Booking Logotype | new tab | Add '(opens in new tab)' to text |
| /user-spotlight-series/modernizing-linke… | linked_in-horizontal-white-log… | new tab | Add '(opens in new tab)' to text |
| /user-spotlight-series/building-bridges-… | logo_paypal_home.svg | new tab | Add '(opens in new tab)' to text |
| /user-spotlight-series/dynamic-haproxy-a… | roblox-horizontal-white-logo.s… | new tab | Add '(opens in new tab)' to text |
| /user-spotlight-series/moving-yammer-to-… | Microsoft Logotype | new tab | Add '(opens in new tab)' to text |
| /user-spotlight-series/handling-80-petab… | docker-horizontal-white-logo.s… | new tab | Add '(opens in new tab)' to text |
| /user-spotlight-series/inside-the-github… | GitHub Logotype | new tab | Add '(opens in new tab)' to text |
| /user-spotlight-series/load-balancing-an… | cloudflare--horizontal-white-l… | new tab | Add '(opens in new tab)' to text |
| /user-spotlight-series/automation-of-rai… | logo_clover_home.svg | new tab | Add '(opens in new tab)' to text |
| /user-spotlight-series/load-balancers-at… | digital_ocean-logo-white-horiz… | new tab | Add '(opens in new tab)' to text |
| /user-spotlight-series/automating-haprox… | Criteo Logotype | new tab | Add '(opens in new tab)' to text |
| /user-spotlight-series/automated-migrati… | dartmouth-(1).svg | new tab | Add '(opens in new tab)' to text |
| https://www.haproxy.com/company/news/clo… | Read more | generic text | Replace with descriptive text |
Before: Read more Suggested: Cloud Computing Expert Kelsey Hightower To Speak At Haproxyconf 2025 | |||
| https://x.com/i/web/status/1667218572685… | Read more | generic text | Replace with descriptive text |
Before: Read more Suggested: 1667218572685492224 | |||
| mailto:contact@haproxy.com | Email HAProxy Techologies | new tab | Add '(opens in new tab)' to text |
| https://www.facebook.com/haproxy.technol… | HAProxy Techologies on Faceboo… | new tab | Add '(opens in new tab)' to text |
| https://www.github.com/haproxytech | HAProxy Techologies on GitHub | new tab | Add '(opens in new tab)' to text |
| https://www.linkedin.com/company/haproxy… | HAProxy Techologies on LinkedI… | new tab | Add '(opens in new tab)' to text |
| https://www.x.com/haproxy | HAProxy Techologies on X | new tab | Add '(opens in new tab)' to text |
| https://www.youtube.com/c/HAProxyTechnol… | HAProxy Techologies on YouTube | new tab | Add '(opens in new tab)' to text |
| https://slack.haproxy.org | HAProxy Techologies on Slack | new tab | Add '(opens in new tab)' to text |
| https://www.reddit.com/r/haproxy/ | HAProxy Techologies on Reddit | new tab | Add '(opens in new tab)' to text |
Links without text are announced as raw URLs by screen readers.
a.px-4 (#147 on page); a.relative (#750 on page)
Links with no accessible text (empty <a></a>, image-only no alt, icon-only no aria-label) are unidentifiable to screen readers.
Source: WCAG 2.1 SC 2.4.4
Generic link text like 'click here' doesn't describe the destination.
/products/haproxy-one ("Learn more"); /events/kubecon-amsterdam-2026 ("Learn more"); /products/haproxy-one ("Learn more"); /events/kubecon-amsterdam-2026 ("Learn more"); https://www.haproxy.com/company/news/cloud-computing-expert-kelsey-hightower-… ("Read more"); https://x.com/i/web/status/1667218572685492224 ("Read more")
Generic anchor text ('click here', 'read more', 'learn more') tells screen readers and search engines nothing about the destination.
Learn more ▾ ▴
Out-of-context lists of links read by AT (one navigation pattern) become useless when every link says 'click here'. Use the destination's title or topic as anchor text. Doubles as SEO win — Google passes anchor-text relevance to the destination.
Source: WCAG 2.4.4 / Google Search Central
Add '(opens in new tab)' to link text or aria-label.
/documentation; https://my.haproxy.com/portal/cust/login; /user-spotlight-series/scaling-the-edge-how-booking-com-powers-a-global-appli…; /user-spotlight-series/modernizing-linkedins-traffic-stack; /user-spotlight-series/building-bridges-across-clouds-the-paypal-approach-to-…; /user-spotlight-series/dynamic-haproxy-at-scale-robloxs-infrastructure-evolution; /user-spotlight-series/moving-yammer-to-the-cloud-building-a-scalable-and-sec…; /user-spotlight-series/handling-80-petabytes-a-month-autoscaling-with-traffic…; /user-spotlight-series/inside-the-github-load-balancer; /user-spotlight-series/load-balancing-and-high-availability-on-postgres-using… (+12 more)
Links with target="_blank" without rel="noopener" leak the originating page's window context — security and UX issue.
Learn more ▾ ▴
Without rel="noopener", the new tab can navigate the original tab via window.opener (tab-nabbing attack). Modern browsers default to noopener for target=_blank but only since recent versions. Always set rel="noopener noreferrer" explicitly.
Source: MDN target / OWASP
DWeb ManifestActionNot foundFIX
No web manifest found.
DDark Mode SupportActionNo dark mode signalsFIX
Detection limited to meta tags and inline styles.
DPrint StylesheetActionNo print stylesFIX
BAlt Text Quality8 of 35 images have issuesREVIEW
| Issue | Count |
|---|---|
| filename | 8 image(s) |
C404 Error PageActionHTTP 404, custom pageREVIEW
CFavicon & BrandingAction3 icon(s) detectedREVIEW
CColor Contrast (Screenshot)Action20 text elements analyzed, 20 fail WCAG AAREVIEW
Analyzes text contrast against the actual rendered page, including background images, gradients, and overlays that CSS-based tools cannot detect.
Show all checked elements (20)
| Element | Ratio | Required | FG | BG | Result |
|---|---|---|---|---|---|
| h2 Privacy Settings | 1.05:1 | 3.0:1 | #000000 | #06080E | Fail |
| h2 Watch HAProxy succes… | 1.02:1 | 3.0:1 | #000000 | #04010D | Fail |
| h2 KubeCon Amsterdam wa… | 1.02:1 | 3.0:1 | #000000 | #04010D | Fail |
| h2 Learn why we are G2'… | 1.02:1 | 3.0:1 | #000000 | #04010D | Fail |
| h2 Do more with | 1.02:1 | 3.0:1 | #000000 | #04010D | Fail |
| h2 HAProxy Enterprise | 1.02:1 | 3.0:1 | #000000 | #04010D | Fail |
| h2 HAProxy Fusion Contr… | 1.02:1 | 3.0:1 | #000000 | #04010D | Fail |
| h2 HAProxy Edge | 1.02:1 | 3.0:1 | #000000 | #04010D | Fail |
| h2 World-class experien… | 1.02:1 | 3.0:1 | #000000 | #04010D | Fail |
| h2 Trusted solutions fr… | 1.02:1 | 3.0:1 | #000000 | #04010D | Fail |
| h2 Powering the future … | 1.02:1 | 3.0:1 | #000000 | #04010D | Fail |
| h2 Real experiences, be… | 1.02:1 | 3.0:1 | #000000 | #04010D | Fail |
| h2 See how it works in … | 1.02:1 | 3.0:1 | #000000 | #04010D | Fail |
| h3 High-performance tra… | 1.02:1 | 3.0:1 | #000000 | #04010D | Fail |
| h3 Next-gen security wi… | 1.02:1 | 3.0:1 | #000000 | #04010D | Fail |
| h3 Uptime for mission-c… | 1.02:1 | 3.0:1 | #000000 | #04010D | Fail |
| h3 Simplify Kubernetes … | 1.02:1 | 3.0:1 | #000000 | #04010D | Fail |
| h3 Incredible technolog… | 1.02:1 | 3.0:1 | #000000 | #04010D | Fail |
| h3 Open source and inde… | 1.02:1 | 3.0:1 | #000000 | #04010D | Fail |
| h3 Relentless customer … | 1.02:1 | 3.0:1 | #000000 | #04010D | Fail |
Methodology: The top 20 text elements by font size were checked. Background color was sampled from the desktop screenshot using a 5-point pattern. WCAG 2.1 AA requires 4.5:1 for normal text and 3:1 for large text.
A+Heading Hierarchy31 headingsPASS
- H2 Privacy Settings
- H1 Powering the world's busiest websites and applications
- H2 Watch HAProxy success stories from industry leaders at HAProxyConf
- H2 KubeCon Amsterdam was huge. Here's what happened
- H2 Learn why we are G2's top-ranked solution
- H2 Do more with HAProxy One
- H2 HAProxy Enterprise
- H2 HAProxy Fusion Control Plane
- H2 HAProxy Edge
- H2 World-class experience
- H2 Trusted solutions from the experts in application delivery
- H3 High-performance traffic management at massive scale
- H3 Next-gen security with threat intelligence
- H3 Uptime for mission-critical applications
- H3 Simplify Kubernetes on-premises or in the cloud
- H2 Powering the future of secure application delivery
- H3 Incredible technology
- H3 Open source and independent
- H3 Relentless customer focus
- H2 Real experiences, better solutions
- H3 Data informed decision making: Roblox use case for more metrics
- H3 Modernizing LinkedIn’s traffic stack
- H3 Load balancing and high availability on Postgres using HAProxy
- H3 Handling 80 petabytes a month: autoscaling with traffic volume to protect revenue and reputation
- H3 Load balancers at DigitalOcean
- H3 Inside the GitHub load balancer
- H3 How we achieved 2 million RPS: HAProxy on Arm processors
- H2 See how it works in practice
- H3 Centralized security and management at scale: introducing HAProxy Fusion 2.0
- H3 Life After Ingress NGINX: A Zero-Stress Migration Guide to HAProxy
- H3 Discover what's possible
AForm Accessibility1 of 6 controls have issuesPASS
| Control | Type | Label | Method |
|---|---|---|---|
| functional | checkbox | Functional Cookies that make the website usable. | none |
| analytics_storage | checkbox | Analytics Help website owners understand how visitors interact with websites. | none |
| ad_storage | checkbox | Ads Enables advertising related storage. | none |
| ad_user_data | checkbox | User data Consent for sending user data to Google for advertising purposes. | none |
| ad_personalization | checkbox | Ad personalization Consent for personalized advertising. | none |
| q | search | (Search HAProxy Technologies...) | placeholder only |
Placeholder text disappears on focus and is not a reliable label.
<input type="search" name="q">
Placeholder-only labels disappear when the user starts typing — they must remember what the field was for.
Learn more ▾ ▴
Placeholders are NOT labels. They vanish on input, fail color contrast checks (most are gray), and don't satisfy WCAG SC 3.3.2. Always use a real <label> alongside (or aria-labelledby).
Source: WCAG 2.1 SC 3.3.2 / Nielsen Norman
A+Lighthouse Accessibility AuditsScore 100/100 — 0 failing, 27 passedPASS
Accessibility
These checks highlight opportunities to improve the accessibility of your web app. Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so manual testing is also encouraged.