Matterhorn 14-004 · PDF/UA-1 UA1:7.4.3-1
Heading tags must give their level in Arabic numerals
Custom heading tags like "Heading-One" or "HI" must role-map to H1–H6 or to Hn using Arabic numerals.
The condition, as the protocol states it. “Numbered heading tags do not use Arabic numerals and are not role mapped to heading types that do use Arabic numerals.”
Matterhorn Protocol 1.1, checkpoint 14, index 14-004, section UA1:7.4.3-1. The protocol marks this as requiring human judgement.
What a screen reader actually does
The heading level cannot be determined, so the element is announced without a level.
What the rule says
In the numbered heading model the level is in the tag name: H1 to H6 are defined in ISO 32000-1, and PDF/UA-1 clause 7.4.3 lets a document that needs more go on to H7, H8 and beyond. The same clause fixes how those names are written: the letter H followed by Arabic numerals, with no whitespace, no separators and no other numbering system. Its notes give Roman numerals as the example of what is not allowed, and H1,247 and H1 247 as names that fail where H1247 passes.
The Matterhorn Protocol turns this into condition 14-004 and widens it slightly: a numbered heading tag that does not use Arabic numerals fails unless it is role-mapped to a heading type that does. So the tag name is allowed to be anything, provided the role map resolves it to Hn.
| Tag in the file | Role map entry | Result |
|---|---|---|
H2 | — | Passes: a standard type |
Heading2 | Heading2 → H2 | Passes: custom name, mapped to a numbered heading |
HII | HII → H2 | Passes: the map supplies the Arabic numeral |
HII | none | Fails 14-004, and 02-001 as well |
Heading-Two | Heading-Two → P | Fails 14-004: the map ends at a paragraph |
H-2 | none | Fails 14-004 — not H followed directly by digits — and 02-001 |
What the reader gets
A reader follows the role map. HII → H2 is announced as heading level 2 and appears in the headings list at the right depth; the tag’s name never reaches the listener.
Without a usable mapping the reader has nothing to announce. A type with no role map entry is not a type it knows, so the text is read and the heading is not a heading. A type mapped to P is a paragraph to the reader, and missing from the headings list. Either way the user who navigates by heading loses this one, and every heading under it appears to belong to the one before.
Where it comes from
Producers that name tags after the author’s paragraph styles, when a style is called something like Heading Two or Titre II. Converters from structured XML, where heading elements are named by the source schema. And hand edits in Acrobat: the New Tag dialog accepts a typed tag type as well as one picked from the menu, so a typed HII goes into the file exactly as typed.
How to check it
This is a judgement because the question is whether an element is a heading, and at what level — the tag name only tells you what somebody called it.
- List the custom types. In Acrobat Pro, open the Tags panel (
View → Show/Hide → Side Panels → Tags) and choose Edit Role Map from its Options menu to see every role map entry the document has. A custom type with no entry is only visible in the tree itself. (Adobe: Edit document structure with the Content and Tags panels) - Find the ones that are headings. Any type whose name suggests a heading, and any type used on text that looks like one. Turn on Highlight Content in the Tags panel to see what each element covers.
- Follow each to the end of its chain. It passes if it ends at
H1–H6(or at anHnthat is itself mapped, see 14-005) at the level the document’s outline needs.
veraPDF’s PDF/UA-1 profile helps with part of it: rule 7.1-5 reports a non-standard type that does not map to a standard one, which catches HII with no entry. It has no rule for clause 7.4.3, so HII → P passes it. (veraPDF PDF/UA-1 rules)
How to fix it free, in Acrobat Pro
Two routes, both from Adobe’s Tags panel documentation.
Fix the role map — best when one custom type is used for many headings at the same level:
- Tags panel → Options → Edit Role Map.
- Map the custom type to the numbered heading it represents:
HIItoH2.
Change the element type — best for a handful of elements:
- Select the element in the Tags panel.
- Options → Properties, choose the heading level from the Type menu, and close the dialog.
If the document came out of an authoring tool, fix the style-to-tag mapping there and re-export, or the next revision will bring the same names back.
What Taggart does
Taggart has no check for 14-004. It produces no finding of that number, so the condition never reaches the review queue. It is on the list of conditions Taggart asks a person to confirm before it will write the PDF/UA claim into the file. In the application the conformance card lists them, with one box to tick — I have checked these conditions by hand, or with another validator. Until someone has, the claim is not written. The confirmation covers the whole list at once, so make the check above before you give it.
What it does catch is the half of the problem that overlaps with role mapping. A custom type with no role map entry is reported as 02-001:
The structure type /HII is used 1 time(s) but is neither a standard type nor present in the role map.
The repair for that, rolemap-repair, runs with the safe fixes and chooses a target from the name alone:
- H followed only by digits, or “Heading” directly followed by a digit, gives that level, capped at the deepest standard one:
Heading2→H2,H8→H6; - any other name with “head” or “title” in it gives
H1:Heading-TwobecomesH1, and so doesHeading_2, whose underscore keeps the digit from being read; - anything else gives
P:HI,HIIandH-2all become paragraphs.
Every mapping is written to the change log — mapped /HII to the standard type /P — and that line is the one to look for. After the repair the file passes 02-001, and a Roman-numeral heading is now a paragraph that nothing reports: one demoted heading is not enough to trip Taggart’s visual heading heuristic (14-001), which only reports when many more lines look like headings than are tagged as them. Correct the mapping by hand, as above.
A custom type whose role map entry already ends at a standard type is not reported at all, whatever that type is.
How Taggart handles it
No software can decide this one, and Taggart has no check for it, so it never appears among the findings or in the review queue. It is on the list of conditions Taggart asks you to confirm by hand before it writes the PDF/UA claim into the file — the claim waits until you have.
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
Is a tag called Heading2 a failure?
Not if the role map takes it to H2. A custom name is fine as long as it resolves to a numbered heading type. The failure is a heading tag whose level is written some other way — Roman numerals, a word, a separator — with no role map entry taking it to Hn.
What exactly counts as Arabic numerals here?
The digits 0 to 9, straight after the H, with no space and no separator. PDF/UA-1's own examples: H1247 is permissible; H1,247 and H1 247 are not. Roman numerals are named as a numbering system that is not allowed.
Why does the standard care what a tag is called?
Because the name is the level. In the numbered model there is nothing else in the file that says how deep a heading is, so a reader has to be able to read it off the type — directly, or through the role map.
Does Taggart report this?
Not as 14-004, which is on the list of conditions Taggart asks you to confirm by hand before it writes the PDF/UA claim. If the custom type has no role map entry at all, it is reported as 02-001 and the role-map repair assigns one by name. If its role map entry already ends at a standard type, nothing is reported, even when that type is a paragraph.
Where this sits in the standards
| Standard | Reference |
|---|---|
| Matterhorn Protocol 1.1 | Checkpoint 14 (Headings), index 14-004 |
| PDF/UA-1 (ISO 14289-1) | Clause 7.4.3-1 |
| 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
- 14-005 Content representing a 7th level (or higher) heading does not use an H7 (or higher) tagDocuments deeper than six levels must use Hn tags (H7, H8 …), role-mapped because ISO 32000-1 defines only H1–H6.
- 02-001 Non-standard tag mapping does not terminate with a standard typeA custom tag name is present in the role map but the chain of mappings never arrives at a structure type defined in ISO 32000-1, 14.8.4. Mapping may be indirect — a custom type may map to another custom type — but it must eventually terminate.
- 02-002 Role mapping is semantically inappropriateThe role map terminates at a standard type, but the wrong one — a custom "Sidebar" mapped to Table, or "PullQuote" mapped to Figure.
- 14-003 Numbered heading levels in descending sequence are skippedThe heading hierarchy jumps a level going down — H1 straight to H3. Going back up any number of levels is fine; going down must be one level at a time.
Other conditions in checkpoint 14
Checkpoint 14 covers headings. These are its other failure conditions; the ones without a link are in the rule set but do not have a written page yet.
- 14-001 Headings are not taggedText that is visually a heading — larger, bolder, isolated — is tagged as a paragraph. The document has no navigable outline.
- 14-002 First heading tag is not H1The document uses numbered headings (H1–H6) but the first one encountered in the structure tree is not an H1.
- 14-003 Numbered heading levels in descending sequence are skippedThe heading hierarchy jumps a level going down — H1 straight to H3. Going back up any number of levels is fine; going down must be one level at a time.
- 14-005 Content representing a 7th level (or higher) heading does not use an H7 (or higher) tagDocuments deeper than six levels must use Hn tags (H7, H8 …), role-mapped because ISO 32000-1 defines only H1–H6.
- 14-006 A node contains more than one H tagIn the strong-structure model, an unnumbered H derives its level from nesting depth, so a single structural node may contain at most one H.
- 14-007 Document uses both H and H# tagsA document must commit to one heading model: strong structure (H, levelled by nesting) or weak structure (H1–H6). Mixing them makes the level of any given heading ambiguous.
Check your own file. Taggart’s validator is free and unlimited — 75 of the 87 Matterhorn conditions software can decide, with the other 12 listed for you to confirm; no watermark, no expiry, and no account needed up to 60 pages.
This condition needs a person’s judgement, so there was nothing for a tool to check. Written from ISO 14289-1 and the Matterhorn Protocol on . The Acrobat steps follow Adobe’s documentation and were not walked through by hand. Last updated .