Accessibility Wiki

Annotations must not hang off headings or the document root

PDF/UA check ANNOT_INVALID_PARENT · Annotations · severity Medium · PDF/UA 8.9 Annotations · advanced check

↩ Back to the rules index · WCAG cross-reference

Advanced check. This is a file-internals rule. It is hidden from the standard report view and generally indicates a problem with the tool that produced the PDF rather than something an author did.

Why it matters

Annotations under a heading or document root are announced out of context. The parent should be a content-bearing element like P, Span, or Annot.

What you will see

An annotation is nested directly under a heading or the document root rather than under content.

How to fix

Move the annotation's OBJR out of the heading or Document element and into a content-bearing element near the annotated text, such as the P or Span enclosing that content, or a dedicated Annot structure element placed as its child or sibling.

Step-by-step guide

  1. Read the parent_type and subtype recorded on each finding - the annotation's OBJR currently sits directly under a heading (H1-H6 or generic H), Document, or DocumentFragment element.
  2. Select the annotation on the page, then in the Accessibility tags panel (View > Show/Hide > Side panels > Accessibility tags) use Options > Find Tag from Selection to reveal the OBJR under the offending parent.
  3. Create an Annot element via Options > New Tag > Annotation, placed as a child or sibling of the structure element enclosing the annotated content - an Annot parent clears this check and MARKUP_ANNOT_PARENT_ANNOT at once, whereas moving the OBJR into a P or Span passes this check but leaves that one failing.
  4. Drag the OBJR into the target element and delete the now-empty wrapper if one is left behind.
  5. Keep the annotation as close as possible to the content it annotates - a child or sibling of the enclosing structure element, or a child of an Annot element (8.9.3.2).

Verify: Re-run the EQChecker scan in advanced mode; ANNOT_INVALID_PARENT should pass. Moving the OBJR into an Annot element also clears MARKUP_ANNOT_PARENT_ANNOT for the same annotation.

Note: Advanced-only check covering markup annotation subtypes. An annotation announced inside a heading or at the document root is read out of context; this typically happens when auto-taggers attach stray OBJRs to the nearest structural ancestor instead of the annotated content.

WCAG success criteria

1.3.1 Info and Relationships — Level A

Structure and relationships conveyed visually (headings, lists, tables, labels, groups) must also be available programmatically.

Understanding 1.3.1

Standards

This check contributes to the following standards:

PDF/UA WCAG A EN 301 549

Standard Criteria
PDF/UA-2 (ISO 14289-2:2024) 8.9 Annotations
EN 301 549 (non-web documents) 10.1.3.1