← Back to the PDF Accessibility Tag Checker

Why does a PDF that looks fine fail this accessibility check?

Because PDF/UA and Section 508's tagging requirement is about a structure tree stored inside the file, not about how the page renders. A PDF viewer paints a page from raw drawing instructions -- position this text run here, draw this image there -- and can produce a perfectly readable page with no structure tree at all. A screen reader does not see the rendered page; it reads the tag tree, and if that tree is missing, incomplete, or never marked current, there is nothing for it to read regardless of how the page looks to a sighted reviewer.

This gap is why a document can pass every eyeball review a team gives it and still fail a structural check outright: the two are looking at different things. Below is what each of this tool's six findings actually means and, where there is one, the ordinary fix.

Not a tagged PDF

The document catalog has no /StructTreeRoot at all, or has one but never declares /MarkInfo /Marked true -- so a reader cannot trust that whatever tree exists is complete or current. This is by far the most common finding, because tagging is opt-in at export time in most authoring tools: a Word document saved as PDF without "Best for electronic distribution and accessibility" checked, or a design tool's PDF export run without its accessibility pass, both produce a visually normal document with nothing structural underneath. The fix happens upstream, at export -- in Word, Export > Options > "Document structure tags for accessibility"; in Acrobat Pro, the Accessibility > "Autotag Document" or "Make Accessible" wizard adds a tree to a PDF that already exists.

No document title or no declared language

Both are single dictionary entries -- /Title in the Document Information dictionary, /Lang in the document catalog -- and both are invisible in a normal read-through because neither one renders on the page. Without a title, a screen reader announces the file name instead (scan0047.pdf is not useful to anyone); without a declared language, assistive technology has no signal for which pronunciation rules to load, even in a document written entirely in one language throughout.

How can a document have no text layer if I can read the text on the page?

The page you see is usually a scanned image of a printed document, not real text -- common for signed forms, older records, and anything run through a copier before being saved as a PDF. Visually the words are sharp and legible; structurally the page is one large picture with no text-show operator anywhere in its content stream, so nothing can be selected, searched, copied, or read aloud. The fix is OCR: running the page through optical character recognition to add a real, invisible text layer underneath the image.

My PDF has alt text on some images -- why is that still flagged?

A partial-alt-text finding is document-wide: it counts every image in the file against every non-empty /Alt string found anywhere in the structure tree, because matching a specific alt-text entry to the exact image it labels needs the marked-content ID chain this tool does not walk. If the counts are close, most images are likely labelled and a manual pass can confirm which ones are not; if the alt-text count is far below the image count, most images still have nothing, even though the file clearly has alt text on some of them.

Unlabeled form fields

An interactive form field can look perfectly labelled on the page -- a text box sitting right next to the words "Last name" -- while carrying no /TU (alternate field name) on itself or any ancestor field. The visible label and the field are two separate objects with no structural connection between them; a sighted user's eye makes the association a screen reader cannot. The fix is setting each field's tooltip/alternate name in the PDF form editor so the connection exists in the file, not just on the page.

Check your own document

Drop a PDF into the checker to see exactly which of these findings apply to it, with the specific evidence behind each one, or scan a whole folder at once with the CLI:

node cli/check.mjs ./document-library/ --json

Neither the browser page nor the CLI uploads the file anywhere -- see the disclaimer below.