What Happened

Automated analysis of census.gov flagged issues across 8 success criteria. Verifying every one by hand against the live page on July 31, 2026 produced 10 confirmed defects and threw away 15 findings in four classes, each listed below with its count and the reason.

That ratio is the reason a conformance report needs a person attached to it. Every eliminated item below was plausible, specific, and wrong, and every one would have reached a client as a defect to fix if nobody had checked. Six claimed that hovering revealed content when the handler actually dismisses it.

Verification cut the other way too, and we are showing that rather than quietly fixing it. Two defects we dismissed on the first pass turned out to be real, and both were dismissed for the same reason: the check we ran could not see the thing it was looking for. One heading-structure defect lives inside an embedded frame our heading walk never entered. One sits inside an element we had waved away on a technicality about its tag. A third finding we called a false positive - an undersized tap target - was correct all along; we had applied the spacing exception with the wrong test.

Scope, stated precisely. One page, the homepage, at 1440x900, in Chromium, on July 31, 2026. We verified the failures, not the passes, so nothing here should be read as a clean bill of health for the criteria not listed. A single page sample can show that a site does not conform; it can never show that it does. This is a methodology demonstration on a public site, published unsolicited, with every item reproducible from the evidence given.

The 10 Confirmed Findings

Each was re-measured on the live page. The evidence column is what we observed, not what a scanner reported.

SC 2.1.1 Keyboard (Level A)

The back-to-top control cannot be reached or operated by keyboard.

What we measured: The control is a <div class="o-angle-up-1"> carrying an onclick handler. Measured on the live page: no tabindex, no role, no accessible name, and no focusable descendant anywhere inside its #pagetop container. It is reachable by mouse only.

Fix: Use a <button> element, or add tabindex="0", a role, an accessible name, and a keyboard activation handler.

Impact: Real but contained. The control scrolls to the top, which a keyboard user can already do with Home or Ctrl+Home, so no task is blocked. We rate it moderate rather than serious for that reason.

SC 2.4.3 Focus Order (Level A)

Ten elements carry positive tabindex values; four of them reach the tab order and take it over.

What we measured: Ten elements in the served markup carry tabindex greater than zero; six sit inside a hidden container and never render. A real 16-press tab walk from the start of the document gives stops 1-4 as a#uscb-nav-skip-header (1), img#thumbsup (1), img#thumbsdown (2), div#CloseThumbs (3) - so the lower-right feedback widget is reached at tab stop 2, ahead of the main navigation, and only reaches the page proper at stop 5.

Fix: Remove the positive values and let DOM order govern. Where an element must come first, move it earlier in the source.

Impact: A keyboard user who does not take the skip link lands next on a corner feedback widget rather than the page content.

SC 4.1.2 Name, Role, Value (Level A)

Two content iframes have no title attribute.

What we measured: The page carries four iframes and three have no title. The two that render content - populationwidget.php and econwidget?noheader - both return title=null. Of the two that do not render, one (Adobe ID syncing) carries a title and one has neither src nor title.

Fix: Add a title to each iframe describing the embedded content, e.g. title="U.S. and world population clock".

Impact: Screen reader users get "frame" with no indication of what the embedded widget contains.

SC 1.3.1 Info and Relationships (Level A)

Seven list items sit inside a <span> rather than a list container.

What we measured: Seven li.uscb-multi-col-list-item elements have span.uscb-link-list as their direct parent: Data Profiles, America Counts, 2026 Census Test, 2030 Census, Verify a Survey, Annual Integrated Economic Survey, 2020 Census Results. (A page-wide count of list items outside a list parent returns eight; the eighth is a different element with a different class and parent, and is not part of this finding.)

Fix: Wrap them in <ul>, or put role="list" on the span.

Impact: Assistive technology does not announce these as a list or give item counts, so users lose the "3 of 7" orientation a list provides.

SC 1.3.1 Info and Relationships (Level A)

All six navigation landmarks are unlabelled. (Advisory: best practice, not a normative failure.)

What we measured: Six nav / role="navigation" regions on the page; none carries aria-label or aria-labelledby.

Fix: Give each an aria-label describing its purpose, e.g. "Main", "Utility", "Footer".

Impact: A screen reader user listing landmarks hears "navigation" six times with no way to tell them apart. We flag this as advisory rather than a hard 1.3.1 failure: there is no W3C Failure technique for unlabelled duplicate landmarks, and a developer would be within their rights to push back on it as best practice. It is listed because it is real and cheap to fix, not because it would sink a review.

SC 1.3.5 Identify Input Purpose (Level AA)

The email signup field has no autocomplete attribute.

What we measured: input[type="email"][name="email"] inside form#GD-snippet-form returns autocomplete=null.

Fix: Add autocomplete="email".

Impact: Users relying on autofill, including people with motor and cognitive disabilities, do not get the field populated.

SC 2.5.8 Target Size (Minimum) (Level AA)

One social share icon is undersized and does not qualify for the spacing exception.

What we measured: The Facebook icon measures 20x35 CSS pixels; the four beside it are 35x35. SC 2.5.8 exempts an undersized target when a 24px-diameter circle centred on it does not intersect another target. Centred at x=515, that circle reaches x=527, and the neighbouring icon’s box begins at x=525. It intersects by 2px, so the exception does not apply.

Fix: Give the icon min-width: 24px, or add 2px of horizontal clearance from its neighbour.

Impact: Minor, and worth showing the arithmetic for: this one turns on a 2px margin, which is exactly the kind of call that gets waved through in both directions without measurement.

SC 1.3.1 Info and Relationships (Level A)

The embedded economic-indicators document starts its heading structure at h6.

What we measured: Our first pass dismissed a reported h2-to-h6 skip because a heading walk of the page found no skipped levels. That walk stopped at the iframe boundary and could not have found it. Entering the frames: the top document ends that region with h2 "U.S. Economic Indicators", and the econwidget?noheader frame directly beneath it contains four h6 headings ("Homeownership Rate", "Rental Vacancy Rate", and two more) with no h1-h5 above them in that document.

Fix: Start the embedded document at h2, or set the widget headings to the level that follows its host context.

Impact: A screen reader user navigating the embedded frame by heading level lands on h6 items with nothing above them. Worth saying plainly: the scanner was right about this one and our first verification pass was wrong, because it only looked at the top-level document.

SC 4.1.2 Name, Role, Value (Level A)

The Yes/No controls in the feedback widget are bare spans with no role and no keyboard access.

What we measured: The single <center> element on the page is the rating widget. Its four children are img#thumbsup (tabindex 1, alt "Thumbs Up Image"), span#yes, img#thumbsdown (tabindex 2, alt "Thumbs Down Image") and span#no. The two spans carry no role, no tabindex and no accessible name beyond their text, yet they are the labelled Yes and No choices; the images beside them are the operable controls and expose only an img role.

Fix: Make each choice a <button> with an accessible name, or give the spans a button role, tabindex and key handling, and pair the images with them via aria-labelledby.

Impact: Assistive technology announces two images and two pieces of text where a user needs two clearly named buttons. We had originally dismissed this as an obsolete-<center> false positive - the tag really is irrelevant, but a real defect was sitting inside the element that was flagged.

SC 1.1.1 Non-text Content (Level A)

A banner image has no alt attribute at all.

What we measured: img.uscb-banner-alert-promo-image (freedom-250-icon.png, 50x50, visible, not inside a link) has no alt attribute, no role, and no aria-hidden.

Fix: From its context the icon is decorative, so alt="" is the correct fix rather than descriptive text.

Impact: Minor. With no alt attribute some assistive technology announces the filename; alt="" makes it silent as intended.

The 15 Findings We Threw Away

Grouped into the four claims they came from, with exact counts so the arithmetic reconciles. This table is the actual work product of a manual audit, and it is the part an automated report cannot produce. Every class below has since been corrected in the tooling - see the section after it.

Automated findings that did not survive manual verification
Automated claimAs flaggedWhy it did not survive
10 hover handlers reported as "content inaccessible to keyboard users"10 issues, flagged seriousEvery handler body was read. Of the ten, six call toggleOverlay(false) - they DISMISS the mega-menu and reveal nothing; one of those is the site logo. The remaining four do reveal (toggleOverlay(true, 0-3)), but each wraps exactly one <a href> that stays keyboard reachable and navigates to the same content the hover panel shows. Neither group is a keyboard failure as stated.
3 anchors use javascript: URLs and are not keyboard operableflagged moderateA native anchor with an href is focusable with Tab and activates with Enter regardless of the URL scheme. The tool’s own text hedged this, and it should not have been reported as a failure.
1 finding: required email field has no visible required indicationflagged moderateThe field carries a programmatic label ("Enter your email address") and the required attribute; identifying a required field with that property is a W3C-sufficient technique for 3.3.2. Worth noting for the record: the associated label is visually hidden, so a sighted user relies on the placeholder alone. That is a separate concern and not this criterion.
1 finding: navigation tabs lack a semantic ARIA roleflagged moderateThe tab wrappers are divs, but each contains an <a href> that carries the implicit link role and is the element a user actually focuses and activates. The wrapper needs no role.

What We Did About It Afterwards

Throwing away a bad finding helps one client. Fixing the logic that produced it helps every client after them. So each class of false positive above was traced back to the code and corrected.

The hover check graded findings on the mere presence of an onmouseenter attribute and never read the handler; it now reads the handler body, drops the ones that only dismiss, and hedges when it genuinely cannot tell. The obsolete-element rule no longer reports presentational tags under a criterion about interactive components. The missing-role check no longer flags a wrapper whose focusable child already exposes a role. The javascript: URL rule stopped asserting a keyboard failure it had no evidence for.

Re-running the same scan afterwards: 9 findings removed, none added, and every confirmed defect on this page still fires, including the two the first verification pass had wrongly dismissed. That last part is the test that matters. A fix that quietly silences a real defect is worse than the false positive it replaced, so the check is always run in both directions.

Why This Matters for Your ACR

A conformance report is read by someone whose job is to find the weak claim in it. A report padded with issues that a developer can refute in one reply costs you the credibility of the ones that are real, and an agency reviewer who catches two bad findings stops trusting the other twenty.

The DHS Trusted Tester methodology exists because this judgment is the hard part, not the scanning. Automated tooling is how we get to a candidate list quickly. What you are paying for is the part that happens next.

See the sample ACR and remediation plan, or read how the Section 508 engagement works.

A Note on the Site We Tested

census.gov was chosen because it is public, high-traffic, and squarely within Section 508’s scope, not because it is unusually poor. Several things on it work well: the skip link is the first tab stop, becomes visible on focus, and moves the reading position past the masthead, which is more than many commercial sites manage. The findings above are offered constructively and every one includes the fix. If anyone at the Census Bureau wants the underlying evidence, it is available on request.