Matterhorn 11-003 · PDF/UA-1 UA1:7.2-3

Bookmarks with no language: the catalog is all they get

BlockerCheckpoint 11: Declared Natural LanguageWCAG 3.1.2 (AA)

Bookmark titles have no determinable language.

The condition, as the protocol states it. “Natural language in the Outline entries cannot be determined.”

Matterhorn Protocol 1.1, checkpoint 11, index 11-003, section UA1:7.2-3. Software can decide this one on its own.

What a screen reader actually does

The bookmark panel is announced in the wrong voice.

What the condition is

The outline, which Acrobat calls the Bookmarks panel, is a tree of dictionaries that hangs off the catalog, beside the structure tree rather than inside it:

1 0 obj
<< /Type /Catalog
   /Pages 2 0 R
   /Outlines 30 0 R
   /StructTreeRoot 6 0 R
   % no /Lang
>>
endobj

30 0 obj << /Type /Outlines /First 31 0 R /Last 32 0 R /Count 2 >> endobj

31 0 obj
<< /Title (Results)
   /Parent 30 0 R
   /Next 32 0 R
   /Dest [ 3 0 R /Fit ]
>>
endobj

Each entry’s /Title is text a screen reader speaks. None of them can say what language it is in. An outline item has no /Lang key, and because the outline is not part of the structure tree, a language set on a heading does not count for the bookmark made from that heading. What is left is the catalog’s /Lang. If it is missing, or is not a usable language tag, the language of every bookmark is undetermined and 11-003 fails.

What the user hears

The bookmarks panel is the table of contents for somebody who cannot scan the page. They move into it and arrow down the entries, and each one is spoken in the screen reader’s default voice.

On an English-default machine reading an English document, nothing audible goes wrong, which is how this condition gets waved through in testing. Put a Hebrew report on the same machine and every bookmark is a run of Hebrew letters handed to an English synthesiser: spelled out, skipped or turned into noise, depending on the reader. The person has a navigation panel they cannot navigate with.

Where it comes from

No document language at all. The plain case. Every bookmark fails, and so does the page text, which is 11-001. One fix clears both.

A language set everywhere except the catalog. Remediation that puts /Lang on the Document element, or on every paragraph, satisfies 11-001, because every word on the page now has a language. The bookmarks still have none. This is the one that survives a careful job.

A malformed tag. en_GB with an underscore, or English (UK). Taggart treats a value that is not shaped like a language tag as no value at all.

Bookmarks added afterwards. Bookmarks generated in Acrobat with New Bookmarks From Structure, or by a remediation tool, are judged by the catalog like any others; the heading each was made from lends it nothing.

How to check it free

Acrobat Pro. Document properties → Advanced → Reading Options → Language. If it is blank and the Bookmarks panel has entries, the file fails. The Accessibility Checker’s document-language check reports the same absence.

veraPDF tests outline entries against the catalog language and nothing else, so it reports this whenever the catalog has no /Lang, however well the rest of the file is labelled.

From a terminal, with pikepdf (free), print the catalog’s language; None is this condition if the file has bookmarks:

python3 -c "import pikepdf, sys; pdf = pikepdf.open(sys.argv[1]); print(pdf.Root.get('/Lang'))" report.pdf

How to fix it free, in Acrobat Pro

From Adobe’s guide to checking accessibility:

  1. The hamburger menu (Windows) or the File menu (macOS) → Properties → Advanced.
  2. Under Reading Options, choose the language from the Language list. If it is not listed, type its code in the field.
  3. OK, and save.

Or run the Accessibility Checker, select Primary Language, choose Fix from the options menu, and pick the language in the Set Reading Language dialog.

There is nothing to set on the bookmarks themselves. Adobe’s bookmark documentation describes the Bookmark Properties dialog with an Appearance tab and an Actions tab, and no language. The document language is the only control Acrobat gives you, and for this condition it is enough.

What Taggart does

Taggart checks this once per document. When the outline has at least one entry and the catalog /Lang is missing, or is not shaped like a BCP 47 tag, it reports a blocker:

The document has bookmarks but no valid catalog /Lang, so the natural language of the outline titles cannot be determined.

It looks at the catalog only. A document whose every structure element carries /Lang still gets this finding if the catalog is empty, which is the same reading veraPDF takes.

The repair is document-language, and it is not a safe fix: it runs only when you ask. In the app, ticking Set the document language shows the tag it will write, which starts as Taggart’s proposal: he-IL for Hebrew and ar for Arabic, from the letters; for text in Latin letters, the language its commonest words clearly point to — English, German, French, Spanish, Italian, Dutch, Portuguese or Polish. A page with too few words to tell gets en-US. Where the words point nowhere clearly, or the text is in another script, there is no proposal and the step asks you to type the tag. Change it to what is right — en-GB for a British report, fr-CA for a Canadian one — in the same repair step before it runs, or set the language in the program that made the file and export it again. The change log says which tag it wrote.

A value not shaped like a language tag is refused rather than written. The fix sets the catalog /Lang and adds dc:language to the XMP packet, and the same entry clears 11-001, 11-004, 11-005 and 11-006 where they share the cause.

The proposal is a proposal for a reason. Counting words says nothing about the region — it proposes fr, not fr-FR or fr-CA — and a document that quotes another language at length can mislead it. If the bookmarks are in a different language from the one declared, no check in Taggart compares them; whether a declared language is the right one is 11-007, which Taggart decides where the letters or the words settle it and otherwise leaves to a person.

How Taggart handles it

Taggart checks for this condition automatically and reports it as a blocker, with where in the file it found it.

The fix is Set the document language. It changes what the document means, so Taggart proposes it and waits for your approval rather than applying it unattended.

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

Can I set a language on one bookmark?

Not in a way anything relies on. An outline item has a title, a destination or action, a few display flags, and no /Lang key. PDF text strings can carry an inline language marker, but few tools write one, and neither veraPDF nor Taggart consults it for this condition. The document language is the lever.

Every heading in my document has a language. Why do the bookmarks fail?

Because bookmarks are not in the structure tree. A /Lang on a heading, or on a Document element wrapping everything, covers the text on the page and does not count for the bookmark made from it. For the outline, veraPDF's PDF/UA-1 profile looks at the catalog /Lang and nothing else, and so does Taggart.

What about a document with bookmarks in two languages?

Set the catalog to the language most of them are in. The rest will be read in that voice, and there is no dependable way to mark a single bookmark otherwise. If the outline really is half one language and half another, that is a sign the document may want to be two documents.

Does this apply to a document without bookmarks?

No. The condition needs an outline with at least one entry. Whether a document should have bookmarks is a separate question; Acrobat's checker, for one, asks for them on documents of 21 pages or more.

Where this sits in the standards

Standards this condition maps to
StandardReference
Matterhorn Protocol 1.1Checkpoint 11 (Declared Natural Language), index 11-003
PDF/UA-1 (ISO 14289-1)Clause 7.2-3
WCAG 2.13.1.2 Language of Parts — Level AA
EN 301 549 / Section 508 / ADA Title IIAll 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.

Other conditions in checkpoint 11

Checkpoint 11 covers declared natural language. These are its other failure conditions; the ones without a link are in the rule set but do not have a written page yet.

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.

Check a PDF free

Checked with Taggart on a generated file that fails this condition on . The Acrobat steps follow Adobe’s documentation and were not walked through by hand. Last updated .