Matterhorn 28-002 · PDF/UA-1 UA1:7.18.1-2
An annotation with no place in the structure tree
Non-widget, non-link annotations must sit inside an Annot structure element so they have a place in the reading order.
The condition, as the protocol states it. “An annotation, other than of subtype Widget, Link and PrinterMark, is not a direct child of an <Annot> structure element.”
Matterhorn Protocol 1.1, checkpoint 28, index 28-002, section UA1:7.18.1-2. Software can decide this one on its own.
What a screen reader actually does
The annotation is not announced in sequence, or not at all.
What is in the file
Annotations live on the page, in the page dictionary’s /Annots array. Structure lives in the structure tree. Nothing connects the two automatically.
The connection is an OBJR — an object reference element — placed inside a structure element at the point in the reading order where the annotation belongs:
/Sect
├── /P "See the annual report for the full figures."
├── /Link
│ ├── (marked content) "the annual report"
│ └── /OBJR → 12 0 R ← the annotation
└── /P "The board approved it in March."
This condition fires when an annotation exists in /Annots and no OBJR anywhere in the tree points at it. The rectangle is on the page. The document’s structure does not know it is there.
It is distinct from 28-004, which is an annotation that is in the tree and has no description. An annotation can fail both, and the repairs are different: this one is a position, that one is words.
What the user hears
Nothing, in the reading order.
A screen reader walking the document in structure order never encounters the annotation, because it is not in the structure. Depending on the reader and the page’s /Tabs setting it may still be reachable by Tab — and then it arrives with no context, somewhere that has nothing to do with the sentence it belongs to.
For a link that is the difference between “See the annual report, link” and a link that appears after every paragraph in the document has been read, with no indication of what text it was attached to.
For a comment or a stamp it is usually silence. A document that carries an approval stamp reading Approved — Finance, 14 March communicates that to everyone who can see it and to nobody who cannot.
Where it comes from
Auto-detected URLs. Tools → Edit PDF → Link → Auto-detect URLs creates link annotations on the page and creates no structure elements. This is the single largest source, and it produces dozens at a time.
Anything added after tagging. The normal production order — export, tag, then annotate — puts every annotation outside the tree by construction.
Review artefacts. Comments, highlights and sticky notes from a review cycle that was never flattened. These usually should not be in the published file at all.
Stamps and signatures applied by a workflow tool.
Form fields, always, which is 28-010 — the same failure with its own condition because the repair has an extra step.
How to check it free
Acrobat Pro, the Order panel. View → Show/Hide → Navigation Panes → Order. Annotations that are in the tree appear in the order list. Ones that are not do not appear at all, which makes this the fastest visual check on a document with many of them.
Find Tag from Selection. Select the annotation on the page with the Select Object tool, then in the Tags panel use Options → Find Tag from Selection. Nothing selected in the tree means nothing points at it.
veraPDF reports it against clause 7.18.1 and lists each annotation with its subtype, which is how you tell forty auto-detected links from one stray stamp.
How to fix it free, in Acrobat Pro
First, decide whether it should exist. Review comments, highlights and leftover stamps are usually better deleted or flattened than tagged. Tools → Redact → Remove Hidden Information, or just delete them.
For the ones that stay, per annotation:
- Open the Tags panel and the Content panel.
- In Tags, select the element the annotation should follow — normally the
Pcontaining the text it relates to. Options → New Tag→ Link for a link, Annot for anything else.- Select the annotation on the page with the Select Object tool.
- Tags panel →
Options → Create Tag from Selection, or drag the annotation’s entry from the Content panel into the new element.
For auto-detected links this does not scale, and the honest answer is usually to delete them and put real hyperlinks in the source document, where they will be exported with structure attached.
Where Taggart differs
annotation-structure is a safe fix and runs in the batch: it adds a structure element and an object reference, touches no appearance and no annotation property, and the gate confirms the rendering is identical.
The part that is not mechanical is where in the order each one goes, and Taggart computes it rather than appending to the end. For each unplaced annotation it finds the text whose baseline and column position put it immediately before the annotation’s rectangle, and inserts the element after that text’s position in the tree. Right-to-left documents go through the same reading-order code as everything else, so in a Hebrew document “immediately before” means to the right, not to the left.
Where nothing can be located — an annotation over whitespace, a stamp in a margin — it says so per annotation instead of placing it somewhere plausible:
3 annotations could not be positioned from surrounding content: Stamp (page 1, top margin), Square (page 4), FileAttachment (page 9).
And it reports the subtypes together, because the shape of the list is the diagnosis:
41 annotations are not in the structure tree: Link ×38, Highlight ×2, Stamp ×1.
Thirty-eight links is auto-detection. Two highlights and a stamp are a review nobody cleaned up, and the right repair for those is a delete rather than a tag.
How Taggart handles it
Taggart detects this condition automatically. It is reported as a blocker, with the page, the structure path and the object id of every occurrence.
The fix is Place annotations in the structure tree. It is mechanical, so “Fix All Safe” applies it in bulk with a diff and a single undo.
Whatever Taggart changes, the page still looks identical. Fixes edit the PDF object model, not the content streams, and every remediation is re-rendered and compared against the original at structural similarity ≥ 0.999 before you get the file back. A tool that quietly reflows your document is worse than no tool.
Frequently asked questions
Which annotations need this?
Every one that is not an artifact. Links, comments, stamps, file attachments, highlights, form controls. The exceptions the standard makes are narrow: an annotation that is genuinely decorative can be an artifact, and a Popup that belongs to another annotation is carried by its parent.
My links work when I click them. Is this real?
Clicking is a mouse operation on a rectangle and it is unaffected. This is about where the annotation sits in the sequence a screen reader reads — which is the structure tree, and the annotation is not in it. The link works and cannot be found by anyone not using a mouse.
Is deleting the annotation a valid fix?
Often the best one. Review comments, stray highlights and leftover stamps are frequently not meant to be in the published document at all, and a document carrying forty reviewer notes has a different problem from an accessibility problem. Flatten or delete before tagging.
What is an OBJR?
An object reference: a structure element whose content is a pointer to an annotation rather than to marked content on the page. It is the only way an annotation joins the tree, and it is what is missing here.
Where this sits in the standards
| Standard | Reference |
|---|---|
| Matterhorn Protocol 1.1 | Checkpoint 28 (Annotations), index 28-002 |
| PDF/UA-1 (ISO 14289-1) | Clause 7.18.1-2 |
| WCAG 2.1 | 1.3.1 Info and Relationships — Level A |
| EN 301 549 / Section 508 / ADA Title II | All three point at WCAG 2.1 Level AA for non-web documents, so a Level A or AA criterion here is in scope for each of them. |
Related conditions
- 28-004 An annotation has neither a Contents entry nor an alternative description Every non-widget annotation needs an accessible description, either in its own /Contents or in the /Alt of the structure element that encloses it.
- 28-010 A widget annotation is not nested within a Form tag Every form control must sit inside a Form structure element.
- 28-009 A page containing an annotation has a Tabs entry with a value other than S /Tabs is present but set to /R (row order) or /C (column order) rather than /S (structure order).
- 09-001 Tags are not in logical reading order The order of elements in the structure tree does not match the order a human would read the page. This is the single most common substantive defect in tagged PDFs and the one Acrobat's own tooling handles worst.
Other conditions in checkpoint 28
Checkpoint 28 covers annotations. These are its other failure conditions; the ones without a link are in the rule set but do not have a written page yet.
- 28-001 An annotation is not in correct reading order The annotation's position in the structure tree does not match where it appears on the page.
- 28-003 An annotation is used for visual formatting but is not tagged according to its semantic function A Square or Line annotation used to draw a box round a callout is decoration and should be artifacted, or tagged for what it actually means.
- 28-004 An annotation has neither a Contents entry nor an alternative description Every non-widget annotation needs an accessible description, either in its own /Contents or in the /Alt of the structure element that encloses it.
- 28-005 A form field has neither a TU entry nor an alternative description The /TU tooltip is the accessible name of a PDF form field. Without it the field has no name at all — the visible label printed next to it is not connected to the control.
- 28-006 An annotation with subtype undefined in ISO 32000 does not meet 7.18.1 A custom annotation subtype still has to be placed in the structure tree and described.
- 28-007 An annotation of subtype TrapNet exists TrapNet annotations are prepress artefacts and are forbidden in PDF/UA-1.
- 28-008 A page containing an annotation does not contain a Tabs entry Any page carrying annotations must declare a tab order. PDF/UA-1 requires /Tabs /S — tab order follows the structure tree.
- 28-009 A page containing an annotation has a Tabs entry with a value other than S /Tabs is present but set to /R (row order) or /C (column order) rather than /S (structure order).
- 28-010 A widget annotation is not nested within a Form tag Every form control must sit inside a Form structure element.
- 28-011 A link annotation is not nested within a Link tag A link annotation must be a child of a Link structure element containing the link's text, joined by an object reference (/OBJR).
- 28-012 A link annotation does not include an alternate description in its Contents entry Link annotations need /Contents describing where the link goes.
- 28-013 An IsMap entry is true but the functionality is not provided in some other way A server-side image map requires pointing at a pixel, which is not possible without a mouse.
- 28-014 CT entry is missing from the media clip data dictionary The media clip's content type (/CT) is required so a processor knows what it is being asked to play.
- 28-015 Alt entry is missing from the media clip data dictionary Media clips require an /Alt array giving a text description.
- 28-016 File attachment annotations do not conform to 7.11 The file specification referenced by a FileAttachment annotation must carry both /F and /UF.
- 28-017 A PrinterMark annotation is included in the logical structure Crop marks and registration targets are production artefacts and must not appear in the structure tree.
- 28-018 The appearance stream of a PrinterMark annotation is not marked as Artifact The content inside a PrinterMark's appearance stream must itself be artifacted.
Check your own file. Taggart’s validator is free and unlimited — every machine-checkable Matterhorn condition, no watermark, no expiry, and no account needed up to 60 pages.
Verified against a real document on . Last updated .