Accessibility
· 13 checks — Landmarks, headings, alt text, forms, and link quality rolled into one auditable list.F404 Error PageActionHTTP 404, bare pageFIX
DWeb ManifestActionNot foundFIX
No web manifest found.
DPrint StylesheetActionNo print stylesFIX
CLandmark StructureAction4 landmarksREVIEW
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
BLink & Button Quality6 issue(s) across 222 links and 1 buttonsREVIEW
| Element | Text | Issue | Suggested Fix |
|---|---|---|---|
| /doc/ | Learn More | generic text | Replace with descriptive text |
Before: Learn More Suggested: Doc | |||
| https://us.pycon.org/2026/attend/informa… | REGISTER FOR PYCON US! | new tab | Add '(opens in new tab)' to text |
| https://blog.python.org | More | generic text | Replace with descriptive text |
Before: More Suggested: Blog.Python.Org | |||
| /events/calendars/ | More | generic text | Replace with descriptive text |
Before: More Suggested: Calendars | |||
| /success-stories/ | More | generic text | Replace with descriptive text |
Before: More Suggested: Success Stories | |||
| /about/apps | More | generic text | Replace with descriptive text |
Before: More Suggested: Apps | |||
| /psf/ | Learn more | generic text | Replace with descriptive text |
Before: Learn more Suggested: Psf | |||
Generic link text like 'click here' doesn't describe the destination.
/doc/ ("Learn More"); https://blog.python.org ("More"); /events/calendars/ ("More"); /success-stories/ ("More"); /about/apps ("More"); /psf/ ("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.
https://us.pycon.org/2026/attend/information/
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
CFavicon & BrandingAction6 icon(s) detectedREVIEW
BDark Mode SupportDark mode detectedREVIEW
Detection limited to meta tags and inline styles.
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.
2 contrast failures on background images/gradients
These failures are invisible to CSS-based accessibility tools like Lighthouse. The text may be fine on a solid background, but fails when rendered over an image or gradient.
Show all checked elements (20)
| Element | Ratio | Required | FG | BG | Result |
|---|---|---|---|---|---|
| h1 Functions Defined | 2.76:1 | 3.0:1 | #000000 | #29577F | Fail |
| h1 Compound Data Types | 2.76:1 | 3.0:1 | #000000 | #29577F | Fail |
| h1 Intuitive Interpreta… | 2.76:1 | 3.0:1 | #000000 | #29577F | Fail |
| h1 All the Flow You’d… | 2.76:1 | 3.0:1 | #000000 | #29577F | Fail |
| h1 Quick & Easy to Lear… | 2.76:1 | 3.0:1 | #000000 | #29577F | Fail |
| h2 Get Started | 2.76:1 | 3.0:1 | #000000 | #29577F | Fail |
| h2 Download | 2.76:1 | 3.0:1 | #000000 | #29577F | Fail |
| h2 Docs | 2.76:1 | 3.0:1 | #000000 | #29577F | Fail |
| h2 Jobs | 2.76:1 | 3.0:1 | #000000 | #29577F | Fail |
| h2 Latest News | 2.76:1 | 3.0:1 | #000000 | #29577F | Fail |
| h2 Upcoming Events | 2.76:1 | 3.0:1 | #000000 | #29577F | Fail |
| h2 Success Stories | 2.76:1 | 3.0:1 | #000000 | #29577F | Fail |
| h2 Use Python for… | 2.76:1 | 3.0:1 | #000000 | #29577F | Fail |
| title Welcome to Python.or… | 1.16:1 | 4.5:1 | #000000 | #11171D | Fail |
| strong Notice: | 1.45:1 | 3.0:1 | #000000 | #1A2B3A | Fail |
| p This page displays a… | 1.36:1 | 4.5:1 | #000000 | #1C262D | Fail |
| a Skip to content | 1.42:1 | 4.5:1 | #000000 | #1E2933 | Fail |
| span ▼ | 1.42:1 | 4.5:1 | #000000 | #1E2933 | Fail |
| a Close | 2.96:1 | 4.5:1 | #000000 | #465F39 | Fail |
| a Python | 1.42:1 | 4.5:1 | #000000 | #1E2933 | 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.
CLighthouse Accessibility AuditsActionScore 75/100 — 7 failing, 23 passedREVIEW
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.
ARIA
Some ARIA parent roles must contain specific child roles to perform their intended accessibility functions. Learn more about roles and required children elements.
Performance issues directly impact user engagement and conversion rates.
| Failing Elements |
|---|
Python
PSF
Docs
PyPI
Jobs
Community div#touchnav-wrapper > div#top > nav.meta-navigation > ul.menu |
About
Applications
Quotes
Getting Started
Help
Python Brochure
Downloads
All re… footer#site-map > div.main-footer-links > div.container > ul#container |
Help & Contact
Diversity
Submit Website Bug
Status footer#site-map > div.site-base > div.container > ul.footer-links |
Some ARIA child roles must be contained by specific parent roles to properly perform their intended accessibility functions. Learn more about ARIA roles and required parent element.
Performance issues directly impact user engagement and conversion rates.
| Failing Elements |
|---|
Applications ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Quotes ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Getting Started ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Help ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Python Brochure ul#container > li.tier-1 > ul.subnav > li.tier-2 |
All releases ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Source code ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Windows ul#container > li.tier-1 > ul.subnav > li.tier-2 |
macOS ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Android ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Other Platforms ul#container > li.tier-1 > ul.subnav > li.tier-2 |
License ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Alternative Implementations ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Docs ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Audio/Visual Talks ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Beginner's Guide ul#container > li.tier-1 > ul.subnav > li.tier-2 |
FAQ ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Non-English Docs ul#container > li.tier-1 > ul.subnav > li.tier-2 |
PEP Index ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Python Books ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Python Essays ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Diversity ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Mailing Lists ul#container > li.tier-1 > ul.subnav > li.tier-2 |
IRC ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Forums ul#container > li.tier-1 > ul.subnav > li.tier-2 |
PSF Annual Impact Report ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Python Conferences ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Special Interest Groups ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Python Logo ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Python Wiki ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Code of Conduct ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Community Awards ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Get Involved ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Shared Stories ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Arts ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Business ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Education ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Engineering ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Government ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Scientific ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Software Development ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Python News ul#container > li.tier-1 > ul.subnav > li.tier-2 |
PSF Newsletter ul#container > li.tier-1 > ul.subnav > li.tier-2 |
PSF News ul#container > li.tier-1 > ul.subnav > li.tier-2 |
PyCon US News ul#container > li.tier-1 > ul.subnav > li.tier-2 |
News from the Community ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Python Events ul#container > li.tier-1 > ul.subnav > li.tier-2 |
User Group Events ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Python Events Archive ul#container > li.tier-1 > ul.subnav > li.tier-2 |
User Group Events Archive ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Submit an Event ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Developer's Guide ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Issue Tracker ul#container > li.tier-1 > ul.subnav > li.tier-2 |
python-dev list ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Core Mentorship ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Report a Security Issue ul#container > li.tier-1 > ul.subnav > li.tier-2 |
Focusable descendents within an `[aria-hidden="true"]` element prevent those interactive elements from being available to users of assistive technologies like screen readers. Learn how `aria-hidden` affects focusable elements.
Informational: a Permissions-Policy directive showing feature -> allowed origins.
Source: MDN Permissions-Policy
| Failing Elements |
|---|
Close div#touchnav-wrapper > div#top > nav.meta-navigation > a#close-python-network |
The Python Network div#touchnav-wrapper > div#top > nav.meta-navigation > a#python-network |
A A div.container > div.options-bar-container > div.options-bar > div.adjust-font-size |
These are opportunities to improve the usage of ARIA in your application which may enhance the experience for users of assistive technology, like a screen reader.
Contrast
Low-contrast text is difficult or impossible for many users to read. Learn how to provide sufficient color contrast.
Performance issues directly impact user engagement and conversion rates.
| Failing Elements |
|---|
Back to Top footer#site-map > div.main-footer-links > div.container > a#back-to-top-1 |
About div.container > ul#container > li.tier-1 > a |
Downloads div.container > ul#container > li.tier-1 > a |
Documentation div.container > ul#container > li.tier-1 > a |
Community div.container > ul#container > li.tier-1 > a |
Success Stories div.container > ul#container > li.tier-1 > a |
News div.container > ul#container > li.tier-1 > a |
Events div.container > ul#container > li.tier-1 > a |
Contributing div.container > ul#container > li.tier-1 > a |
Back to Top footer#site-map > div.main-footer-links > div.container > a#back-to-top-2 |
These are opportunities to improve the legibility of your content.
Tables and lists
Screen readers have a specific way of announcing lists. Ensuring proper list structure aids screen reader output. Learn more about proper list structure.
Performance issues directly impact user engagement and conversion rates.
| Failing Elements |
|---|
Applications
Quotes
Getting Started
Help
Python Brochure div.container > ul#container > li.tier-1 > ul.subnav |
All releases
Source code
Windows
macOS
Android
Other Platforms
License
Alternat… div.container > ul#container > li.tier-1 > ul.subnav |
Docs
Audio/Visual Talks
Beginner's Guide
FAQ
Non-English Docs
PEP Index
Python … div.container > ul#container > li.tier-1 > ul.subnav |
Diversity
Mailing Lists
IRC
Forums
PSF Annual Impact Report
Python Conferences
… div.container > ul#container > li.tier-1 > ul.subnav |
Arts
Business
Education
Engineering
Government
Scientific
Software Development div.container > ul#container > li.tier-1 > ul.subnav |
Python News
PSF Newsletter
PSF News
PyCon US News
News from the Community div.container > ul#container > li.tier-1 > ul.subnav |
Python Events
User Group Events
Python Events Archive
User Group Events Archive… div.container > ul#container > li.tier-1 > ul.subnav |
Developer's Guide
Issue Tracker
python-dev list
Core Mentorship
Report a Securi… div.container > ul#container > li.tier-1 > ul.subnav |
Screen readers require list items (`<li>`) to be contained within a parent `<ul>`, `<ol>` or `<menu>` to be announced properly. Learn more about proper list structure.
Performance issues directly impact user engagement and conversion rates.
| Failing Elements |
|---|
Python div#top > nav.meta-navigation > ul.menu > li.python-meta |
PSF div#top > nav.meta-navigation > ul.menu > li.psf-meta |
Docs div#top > nav.meta-navigation > ul.menu > li.docs-meta |
PyPI div#top > nav.meta-navigation > ul.menu > li.pypi-meta |
Jobs div#top > nav.meta-navigation > ul.menu > li.jobs-meta |
Community div#top > nav.meta-navigation > ul.menu > li.shop-meta |
About
Applications
Quotes
Getting Started
Help
Python Brochure div.main-footer-links > div.container > ul#container > li.tier-1 |
Downloads
All releases
Source code
Windows
macOS
Android
Other Platforms
Licens… div.main-footer-links > div.container > ul#container > li.tier-1 |
Documentation
Docs
Audio/Visual Talks
Beginner's Guide
FAQ
Non-English Docs
PEP… div.main-footer-links > div.container > ul#container > li.tier-1 |
Community
Diversity
Mailing Lists
IRC
Forums
PSF Annual Impact Report
Python Co… div.main-footer-links > div.container > ul#container > li.tier-1 |
Success Stories
Arts
Business
Education
Engineering
Government
Scientific
Softw… div.main-footer-links > div.container > ul#container > li.tier-1 |
News
Python News
PSF Newsletter
PSF News
PyCon US News
News from the Community div.main-footer-links > div.container > ul#container > li.tier-1 |
Events
Python Events
User Group Events
Python Events Archive
User Group Events … div.main-footer-links > div.container > ul#container > li.tier-1 |
Contributing
Developer's Guide
Issue Tracker
python-dev list
Core Mentorship
Re… div.main-footer-links > div.container > ul#container > li.tier-1 |
Help & Contact div.site-base > div.container > ul.footer-links > li.tier-1 |
Diversity div.site-base > div.container > ul.footer-links > li.tier-1 |
Submit Website Bug div.site-base > div.container > ul.footer-links > li.tier-1 |
Status div.site-base > div.container > ul.footer-links > li.tier-1 |
These are opportunities to improve the experience of reading tabular or list data using assistive technology, like a screen reader.
Navigation
A value greater than 0 implies an explicit navigation ordering. Although technically valid, this often creates frustrating experiences for users who rely on assistive technologies. Learn more about the `tabindex` attribute.
Performance issues directly impact user engagement and conversion rates.
| Failing Elements |
|---|
div.options-bar > form.search-the-site > fieldset > input#id-search-field div.options-bar > form.search-the-site > fieldset > input#id-search-field |
These are opportunities to improve keyboard navigation in your application.
AHeading Hierarchy14 headingsPASS
- H1 Functions Defined
- H1 Compound Data Types duplicate H1
- H1 Intuitive Interpretation duplicate H1
- H1 All the Flow You’d Expect duplicate H1
- H1 Quick & Easy to Learn duplicate H1
- H2 Get Started
- H2 Download
- H2 Docs
- H2 Jobs
- H2 Latest News
- H2 Upcoming Events
- H2 Success Stories
- H2 Use Python for…
- H2 >>> Python Software Foundation
A page should have only one H1. Multiple H1s dilute the document outline.
Multiple H1s blur the page's primary topic — screen-reader users and Google both prefer one H1.
Learn more ▾ ▴
HTML5's outline algorithm technically allows multiple H1s within sectioning content, but no browser implements it. In practice: one H1 per page. Use H2-H6 for subsections.
Source: WCAG 2.4.6 / Google Search Central
A+Alt Text QualityAll 1 images OKPASS
A+Form AccessibilityAll 1 controls labeledPASS
| Control | Type | Label | Method |
|---|---|---|---|
| #id-search-field | search | Search This Site | for/id |