Accessibility
· 23 checks — Landmarks, headings, alt text, forms, and link quality rolled into one auditable list.FHeading HierarchyAction62 headings, 8 skip(s)FIX
- H1 Connect, protect, and build everywhere
- H6 Join us at Connect San Francisco skipped
- H6 New 2026 Security Signals Report
- H2 Our connectivity cloud is the best place to connect your users, apps, clouds, and networksprotect everything you connect to the Internetbuild and scale applications
- H3 Connect your workforce, AI agents, apps, and infrastructure
- H6 Related skipped
- H3 Protect and accelerate websites and AI-enabled apps
- H6 Related skipped
- H3 Build and secure AI agents
- H6 Related skipped
- H2 One global cloud network unlike any other
- H2 Leading companies rely on Cloudflare
- H4 Connect skipped
- H4 Protect
- H4 Build
- H3 Connect users and apps securely
- H3 Protect and accelerate websites
- H3 Build and scale applications
- H2 How Cloudflare can help
- H6 Modernize remote access skipped
- H6 Secure generative and agentic AI
- H6 Deploy serverless code
- H6 Deploy AI on the edge
- H6 Stop DDoS attacks
- H6 Block bot traffic
- H2 News and resources
- H5 What's new skipped
- H5 Insights
- H5 Library
- H5 Events
- H6 Cloudflare and GoDaddy partner to help enable an open agentic web
- H6 Cloudflare named a ‘Leader’ in Forrester Wave for Edge Development Platforms for 2026
- H6 2026 Cloudflare Threat Report
- H6 Attend a Test Drive workshop to get hands-on experience with Cloudflare products
- H6 Cloudflare strengthens content offering to AI companies with acquisition of Human Native
- H6 Cloudflare acquires Astro to accelerate the future of high-performance web development
- H6 Cloudflare 2025 Impact Report
- H6 Cloudflare to acquire Replicate to build the most seamless AI Cloud for developers
- H6 Cloudflare named a Challenger in 2025 Gartner® Magic Quadrant™ for CNAP
- H6 Cloudflare named a Visionary in 2025 Gartner® Magic Quadrant™ for SASE Platforms
- H6 Rethink what cyber resilience really means
- H6 NCR Voyix on how a service mindset delivers better security outcomes
- H6 CSO Grant Bourzikas shares strategies to curb AI misinformation
- H6 Cloudflare CIO, Mike Hamilton on how AI is disrupting software purchases
- H6 Protect modern organizations from threats without stifling innovation
- H6 3 challenges of securing and connecting application services
- H6 Explore more ebooks in Cloudflare's Resource Hub
- H6 Increase developer velocity with a connectivity cloud
- H6 Registration is now open for Cloudflare Connect 2026
- H6 Join our solutions engineering team for a weekly application services demo
- H6 Learn more about Cloudflare and meet our team at an upcoming event near you
- H6 Enhance your knowledge and gain new skills with a live or on-demand webinar
- H6 Security builders workshop series
- H6 Security leaders forum series
- H6 Architecture Workshop Series
- H2 Get started with the connectivity cloud
- H5 Get started for free skipped
- H5 Need help choosing?
- H5 Talk to an expert
- H2 Speak to sales about SASE and workspace security.
- H2 Thank You
- H2 Our site uses cookies
Skipping heading levels breaks the document outline. Screen readers may interpret missing levels as structural errors.
Skipping heading levels breaks the document outline — screen-reader users lose track of section nesting.
Learn more ▾ ▴
Screen reader users navigate by jumping between headings (H1 → H2 → H3). Skipping (H1 → H3) breaks the sense of hierarchy. Use sequential levels even if you don't like the default styling — restyle with CSS instead. WCAG 1.3.1 (Info and Relationships) treats this as an A failure.
Source: WCAG 2.1 SC 1.3.1 / W3C WAI
Skipping heading levels breaks the document outline. Screen readers may interpret missing levels as structural errors.
Skipping heading levels breaks the document outline — screen-reader users lose track of section nesting.
Learn more ▾ ▴
Screen reader users navigate by jumping between headings (H1 → H2 → H3). Skipping (H1 → H3) breaks the sense of hierarchy. Use sequential levels even if you don't like the default styling — restyle with CSS instead. WCAG 1.3.1 (Info and Relationships) treats this as an A failure.
Source: WCAG 2.1 SC 1.3.1 / W3C WAI
Skipping heading levels breaks the document outline. Screen readers may interpret missing levels as structural errors.
Skipping heading levels breaks the document outline — screen-reader users lose track of section nesting.
Learn more ▾ ▴
Screen reader users navigate by jumping between headings (H1 → H2 → H3). Skipping (H1 → H3) breaks the sense of hierarchy. Use sequential levels even if you don't like the default styling — restyle with CSS instead. WCAG 1.3.1 (Info and Relationships) treats this as an A failure.
Source: WCAG 2.1 SC 1.3.1 / W3C WAI
Skipping heading levels breaks the document outline. Screen readers may interpret missing levels as structural errors.
Skipping heading levels breaks the document outline — screen-reader users lose track of section nesting.
Learn more ▾ ▴
Screen reader users navigate by jumping between headings (H1 → H2 → H3). Skipping (H1 → H3) breaks the sense of hierarchy. Use sequential levels even if you don't like the default styling — restyle with CSS instead. WCAG 1.3.1 (Info and Relationships) treats this as an A failure.
Source: WCAG 2.1 SC 1.3.1 / W3C WAI
Skipping heading levels breaks the document outline. Screen readers may interpret missing levels as structural errors.
Skipping heading levels breaks the document outline — screen-reader users lose track of section nesting.
Learn more ▾ ▴
Screen reader users navigate by jumping between headings (H1 → H2 → H3). Skipping (H1 → H3) breaks the sense of hierarchy. Use sequential levels even if you don't like the default styling — restyle with CSS instead. WCAG 1.3.1 (Info and Relationships) treats this as an A failure.
Source: WCAG 2.1 SC 1.3.1 / W3C WAI
Skipping heading levels breaks the document outline. Screen readers may interpret missing levels as structural errors.
Skipping heading levels breaks the document outline — screen-reader users lose track of section nesting.
Learn more ▾ ▴
Screen reader users navigate by jumping between headings (H1 → H2 → H3). Skipping (H1 → H3) breaks the sense of hierarchy. Use sequential levels even if you don't like the default styling — restyle with CSS instead. WCAG 1.3.1 (Info and Relationships) treats this as an A failure.
Source: WCAG 2.1 SC 1.3.1 / W3C WAI
Skipping heading levels breaks the document outline. Screen readers may interpret missing levels as structural errors.
Skipping heading levels breaks the document outline — screen-reader users lose track of section nesting.
Learn more ▾ ▴
Screen reader users navigate by jumping between headings (H1 → H2 → H3). Skipping (H1 → H3) breaks the sense of hierarchy. Use sequential levels even if you don't like the default styling — restyle with CSS instead. WCAG 1.3.1 (Info and Relationships) treats this as an A failure.
Source: WCAG 2.1 SC 1.3.1 / W3C WAI
Skipping heading levels breaks the document outline. Screen readers may interpret missing levels as structural errors.
Skipping heading levels breaks the document outline — screen-reader users lose track of section nesting.
Learn more ▾ ▴
Screen reader users navigate by jumping between headings (H1 → H2 → H3). Skipping (H1 → H3) breaks the sense of hierarchy. Use sequential levels even if you don't like the default styling — restyle with CSS instead. WCAG 1.3.1 (Info and Relationships) treats this as an A failure.
Source: WCAG 2.1 SC 1.3.1 / W3C WAI
DLink & Button QualityAction8 issue(s) across 286 links and 26 buttonsFIX
| Element | Text | Issue | Suggested Fix |
|---|---|---|---|
| http://www.support.cloudflare.com | Support | new tab | Add '(opens in new tab)' to text |
| https://developers.cloudflare.com/ | Developer libraryDocumentation… | new tab | Add '(opens in new tab)' to text |
| https://developers.cloudflare.com/produc… | Application demosExplore what … | new tab | Add '(opens in new tab)' to text |
| https://developers.cloudflare.com/worker… | TutorialsStep-by-step build tu… | new tab | Add '(opens in new tab)' to text |
| https://developers.cloudflare.com/refere… | Reference architectureDiagrams… | new tab | Add '(opens in new tab)' to text |
| https://playground.ai.cloudflare.com/ | AI Demo in 30 secondsQuick gui… | new tab | Add '(opens in new tab)' to text |
| https://discord.com/invite/cloudflaredev | Developers DiscordJoin the com… | new tab | Add '(opens in new tab)' to text |
| https://dash.cloudflare.com/sign-up/work… | Start building | new tab | Add '(opens in new tab)' to text |
| https://portal.cloudflarepartners.com/ | Partner PortalFind resources a… | new tab | Add '(opens in new tab)' to text |
| https://partnerlocator.cloudflare.com/da… | Find a partnerPowerUP your bus… | new tab | Add '(opens in new tab)' to text |
| https://developers.cloudflare.com/ | DocumentationDeveloper documen… | new tab | Add '(opens in new tab)' to text |
| https://cloudflare.tv/live | Cloudflare TVInnovative series… | new tab | Add '(opens in new tab)' to text |
| https://radar.cloudflare.com/ | RadarInternet traffic and secu… | new tab | Add '(opens in new tab)' to text |
| https://dash.cloudflare.com/?to=/:accoun… | Contact us | new tab | Add '(opens in new tab)' to text |
| https://community.cloudflare.com/ | Community forum | new tab | Add '(opens in new tab)' to text |
| https://developers.cloudflare.com/suppor… | Lost account access? | new tab | Add '(opens in new tab)' to text |
| https://discord.com/invite/cloudflaredev | Developers Discord | new tab | Add '(opens in new tab)' to text |
| https://www.support.cloudflare.com/ | Get help | new tab | Add '(opens in new tab)' to text |
| https://dash.cloudflare.com/sign-up | Start for free | new tab | Add '(opens in new tab)' to text |
| /sase/ | Learn more | generic text | Replace with descriptive text |
Before: Learn more Suggested: Sase | |||
| /sase/ | Learn more | generic text | Replace with descriptive text |
Before: Learn more Suggested: Sase | |||
| /application-services/ | Learn more | generic text | Replace with descriptive text |
Before: Learn more Suggested: Application Services | |||
| https://workers.cloudflare.com/ | Learn more | generic text | Replace with descriptive text |
Before: Learn more Suggested: Home page | |||
| https://workers.cloudflare.com/pricing | View plans | new tab | Add '(opens in new tab)' to text |
| /lp/forrester-wave-edp-2026/ | Read report | new tab | Add '(opens in new tab)' to text |
| /press/press-releases/2026/cloudflare-ac… | Read report | new tab | Add '(opens in new tab)' to text |
| /connect/ | Learn more | generic text | Replace with descriptive text |
Before: Learn more Suggested: Connect | |||
| /lp/architectureworkshops/?utm_medium=di… | Learn more | generic text | Replace with descriptive text |
Before: Learn more Suggested: ?Utm Medium=Display&Utm Source=Direct&Utm Campaign=2025 Q2 Acq Namer Umbrella Ge He General Cloudflare | |||
| https://dash.cloudflare.com/sign-up/ | Start for free | new tab | Add '(opens in new tab)' to text |
| https://dash.cloudflare.com/?to=/:accoun… | Customer support | new tab | Add '(opens in new tab)' to text |
| https://community.cloudflare.com/ | Community forum | new tab | Add '(opens in new tab)' to text |
| https://discord.com/invite/cloudflaredev | Developers Discord | new tab | Add '(opens in new tab)' to text |
| https://developers.cloudflare.com/suppor… | Lost account access? | new tab | Add '(opens in new tab)' to text |
| https://www.facebook.com/Cloudflare/ | Facebook Icon | new tab | Add '(opens in new tab)' to text |
| https://www.linkedin.com/company/cloudfl… | LinkedIn Icon | new tab | Add '(opens in new tab)' to text |
| https://x.com/Cloudflare | X Icon White | new tab | Add '(opens in new tab)' to text |
| https://www.youtube.com/cloudflare | Youtube Icon | new tab | Add '(opens in new tab)' to text |
| https://www.instagram.com/cloudflare/ | Instagram Icon | new tab | Add '(opens in new tab)' to text |
| https://www.cloudflare.com/terms/ | view | new tab | Add '(opens in new tab)' to text |
| https://www.cloudflare.com/privacypolicy… | view | new tab | Add '(opens in new tab)' to text |
| https://www.cloudflare.com/gdpr/subproce… | view | new tab | Add '(opens in new tab)' to text |
| https://www.cloudflare.com/privacypolicy… | view | new tab | Add '(opens in new tab)' to text |
| <button> | (empty) | empty | Add button text or aria-label |
| <button> | (empty) | empty | Add button text or aria-label |
Generic link text like 'click here' doesn't describe the destination.
/sase/ ("Learn more"); /sase/ ("Learn more"); /application-services/ ("Learn more"); https://workers.cloudflare.com/ ("Learn more"); /connect/ ("Learn more"); /lp/architectureworkshops/?utm_medium=display&utm_source=direct&utm_campaign=… ("Learn 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.
http://www.support.cloudflare.com; https://developers.cloudflare.com/; https://developers.cloudflare.com/products/; https://developers.cloudflare.com/workers/tutorials/; https://developers.cloudflare.com/reference-architecture/; https://playground.ai.cloudflare.com/; https://discord.com/invite/cloudflaredev; https://dash.cloudflare.com/sign-up/workers-and-pages; https://portal.cloudflarepartners.com/; https://partnerlocator.cloudflare.com/dashboard (+26 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
Icon-only buttons need an aria-label so screen readers can announce them.
button.nv-min-w-px (#120 on page); button.nv-min-w-px (#174 on page)
Buttons with no accessible text (icon-only, no aria-label) can't be activated by voice control or understood by screen readers.
Source: WCAG 2.1 SC 4.1.2
DMobile Keyboard & AutofillAction3/4 eligible field(s) missing autocomplete or inputmodeFIX
D404 Error PageActionHTTP 404, custom pageFIX
FFavicon & BrandingAction2 icon(s) detectedFIX
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
BLandmark Structure11 landmarksREVIEW
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
CForm AccessibilityAction6 of 16 controls have issuesREVIEW
| Control | Type | Label | Method |
|---|---|---|---|
| #e7af6b44-3534-426a-9bd2-c0347ae582dd-modal-FirstName | text | First name: * | for/id |
| #e7af6b44-3534-426a-9bd2-c0347ae582dd-modal-LastName | text | Last name: * | for/id |
| #e7af6b44-3534-426a-9bd2-c0347ae582dd-modal-Phone | tel | Phone: * | for/id |
| #e7af6b44-3534-426a-9bd2-c0347ae582dd-modal-Email | Work email: * | for/id | |
| #e7af6b44-3534-426a-9bd2-c0347ae582dd-modal-Company | text | Company: * | for/id |
| #e7af6b44-3534-426a-9bd2-c0347ae582dd-modal-marketingOptInConsent | checkbox | none | |
| #e7af6b44-3534-426a-9bd2-c0347ae582dd-modal-consentTermsofService | checkbox | none | |
| #e7af6b44-3534-426a-9bd2-c0347ae582dd-modal-consentCollectionanduseofpersonalinformation | checkbox | none | |
| #e7af6b44-3534-426a-9bd2-c0347ae582dd-modal-consentTransferpersonalinformationoverseas | checkbox | none | |
| #e7af6b44-3534-426a-9bd2-c0347ae582dd-modal-consentSharingpersonalinformationtothirdparties | checkbox | none | |
| Country-search-field | text | (none) | none |
| Job_Level__c | select | (none) | none |
| Job_Level__c-search-field | text | (none) | none |
| Job_Function__c | select | (none) | none |
| Job_Function__c-search-field | text | (none) | none |
| Country | select | (none) | none |
Form controls need a <label>, aria-label, or aria-labelledby for screen readers.
<select name="Job_Level__c">; <input type="text" name="Job_Level__c-search-field">; <select name="Job_Function__c">; <input type="text" name="Job_Function__c-search-field">; <select name="Country">; <input type="text" name="Country-search-field">
Form controls without labels — assistive tech announces 'edit text' with no context; users can't complete forms.
Source: WCAG 2.1 SC 3.3.2
BColor Contrast (Screenshot)20 text elements analyzed, 0 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 |
|---|---|---|---|---|---|
| h1 Connect, protect, an… | 21.00:1 | 3.0:1 | #000000 | #FFFFFF | Pass |
| h2 Our connectivity clo… | 21.00:1 | 3.0:1 | #000000 | #FFFFFF | Pass |
| h2 One global cloud net… | 21.00:1 | 3.0:1 | #000000 | #FFFFFF | Pass |
| h2 Leading companies re… | 21.00:1 | 3.0:1 | #000000 | #FFFFFF | Pass |
| h2 How Cloudflare can h… | 21.00:1 | 3.0:1 | #000000 | #FFFFFF | Pass |
| h2 News and resources | 21.00:1 | 3.0:1 | #000000 | #FFFFFF | Pass |
| h2 Get started with the… | 21.00:1 | 3.0:1 | #000000 | #FFFFFF | Pass |
| h2 Speak to sales about… | 21.00:1 | 3.0:1 | #000000 | #FFFFFF | Pass |
| h2 Thank You | 21.00:1 | 3.0:1 | #000000 | #FFFFFF | Pass |
| h2 Our site uses cookie… | 21.00:1 | 3.0:1 | #000000 | #FFFFFF | Pass |
| h3 Connect your workfor… | 21.00:1 | 3.0:1 | #000000 | #FFFFFF | Pass |
| h3 Protect and accelera… | 21.00:1 | 3.0:1 | #000000 | #FFFFFF | Pass |
| h3 Build and secure AI … | 21.00:1 | 3.0:1 | #000000 | #FFFFFF | Pass |
| h3 Connect users and ap… | 21.00:1 | 3.0:1 | #000000 | #FFFFFF | Pass |
| h3 Protect and accelera… | 21.00:1 | 3.0:1 | #000000 | #FFFFFF | Pass |
| h3 Build and scale appl… | 21.00:1 | 3.0:1 | #000000 | #FFFFFF | Pass |
| title Connect, protect, an… | 5.24:1 | 4.5:1 | #000000 | #7F7F7F | Pass |
| a Log in | 5.24:1 | 4.5:1 | #000000 | #7F7F7F | Pass |
| a Support | 5.24:1 | 4.5:1 | #000000 | #7F7F7F | Pass |
| span Sales: 900 943 467 | 5.24:1 | 4.5:1 | #000000 | #7F7F7F | Pass |
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+Alt Text QualityAll 76 images OKPASS
AForm Input Types3 input(s) using type=text where a specific type would helpPASS
A+Form Input Quality16 form control(s) checked, no input-semantic issuesPASS
A+Document LanguageLang attribute set to "en-us"PASS
A+Tabindex Anti-Patterns299 explicit tabindex attribute(s) checked, no anti-patternsPASS
A+Iframe AccessibilityNo iframes on this pagePASS
A+Tap Target AdequacyAll tap targets meet WCAG 2.5.5/2.5.8 sizingPASS
A+Mobile-Readable Font SizesAll 45 visible text node(s) render at >= 12 CSS pixelsPASS
A+PWA DepthNo PWA depth issues detectedPASS
A+Mobile UX Depth1 mobile-depth signal(s) detectedPASS
A+Lighthouse Accessibility AuditsScore 99/100 — 1 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.
Navigation
Properly ordered headings that do not skip levels convey the semantic structure of the page, making it easier to navigate and understand when using assistive technologies. Learn more about heading order.
Performance issues directly impact user engagement and conversion rates.
| Failing Elements |
|---|
Join us at Connect San Francisco div.flex > div.flex > div.md:flex-1 > h6.leading-[110%] |
Related div.flex > div > div.space-y-4 > h6 |
Related div.flex > div > div.space-y-4 > h6 |
Related div.flex > div > div.space-y-4 > h6 |
Connect div.whitespace-nowrap > div.active > div.text-start > h4.text-[1rem] |
Modernize remote access div.relative > div.fade-card-front > div.text-center > h6.leading-[110%] |
What's new div.whitespace-nowrap > div.active > div.text-start > h5.text-[1rem] |
Get started for free div > div.h-full > div.text-center > h5.leading-[110%] |
These are opportunities to improve keyboard navigation in your application.