# Documents in machine-readable formats

> A PDF that carries no document structure is unreadable to an agent and to a screen reader alike — the same defect, found twice.

- Source: /checks/document-formats
- Site: AgenticWebScore
- Language: English

---
A PDF that carries no document structure is unreadable to an agent and to a screen reader alike — the same defect, found twice.

| Property | Value |
| --- | --- |
| Check id | `document-formats` |
| Dimension | Content Accessibility (22%) |
| Tier | Recommended — pool 20 pts |
| Weight inside tier | 2 |
| Impact | Medium |
| Maturity | Draft — A published specification that is not yet ratified. |
| Conditional | No |
| Publishing skill | `document-formats` |
| Standards | PDF/UA |

## What the scanner requests

- `/documents`
- `/publications`
- `/reports`

## What is measured

The scanner collects same-origin links to downloadable documents from the homepage `/` (`.pdf`, `.doc`, `.docx`, `.xls`, `.xlsx`, `.ppt`, `.pptx`, `.odt`) and records the `Content-Type` each one returns. For every PDF it reads the file for the PDF/UA identification marker `pdfuaid:part` in the XMP metadata and for a tagged-PDF structure tree (`/StructTreeRoot`, and `/MarkInfo` with `/Marked true`), the structure on which PDF/UA (ISO 14289) is built. Pass when each linked document is also published as a structured HTML page or as markdown at a stable URL that the scan actually requested and that answered 2xx with an HTML or markdown content type, and any PDF that remains carries a structure tree; partial when an HTML or markdown version is merely linked without its response being observed, when a version exists but the PDFs are untagged, or when a document is offered as a PDF alone; fail when documents are reachable only as untagged PDF or office downloads. A linked-but-404 twin is not an alternative. Those byte-level markers are a necessary precondition rather than a conformance verdict - full PDF/UA validation needs a dedicated validator, and a marker inside a compressed object stream is invisible to this probe. This profile-scoped check is reported as not scored and excluded from the denominator unless the institution profile has been positively identified.

## Reproduce it yourself

You do not have to take our word for any of this. Run the same measurement against your own domain:

```bash
DOMAIN="https://example.com"
curl -sL "$DOMAIN/" | perl -0777 -ne 'while (m{href=["\x27]([^"\x27]+\.(?:pdf|docx?|xlsx?|pptx?|odt))["\x27]?}gi) { print "$1\n" }' | sort -u | head -3 | while read -r d; do case "$d" in "$DOMAIN"*) u="$d";; http*|//*) continue;; /*) u="$DOMAIN$d";; *) u="$DOMAIN/$d";; esac; printf '%s  ' "$u"; curl -sIL "$u" | grep -i '^content-type' | tail -1 | tr -d '\r'; curl -sL "$u" | strings | grep -cE '/StructTreeRoot|/MarkInfo|pdfuaid'; done
```

## The fix

This is the artifact to ship. It is the complete change, not a description of one.

```html
<!-- Primary form: a structured HTML page at a stable URL. The PDF is the alternate. -->
<article lang="en">
  <h1>Annual report 2025</h1>
  <p class="summary">Audited results, methodology and accounts for the 2025 financial year.</p>

  <table>
    <caption>Revenue by segment, 2025 (EUR thousands)</caption>
    <thead>
      <tr><th scope="col">Segment</th><th scope="col">2024</th><th scope="col">2025</th></tr>
    </thead>
    <tbody>
      <tr><th scope="row">Publishing</th><td>1240</td><td>1385</td></tr>
      <tr><th scope="row">Research</th><td>860</td><td>910</td></tr>
    </tbody>
  </table>

  <p><a href="/reports/2025/annual-report.pdf" type="application/pdf">Annual report 2025 (PDF/UA, tagged)</a></p>
  <!-- Export the PDF from this same source with PDF/UA tagging: never a scan,
       and never a hand-written metadata field - the structure is the artifact. -->
</article>
```

> PDF/UA is produced by the export pipeline, not by hand - there is no metadata schema you can paste into a PDF, and a page image that went through a scanner can never be tagged afterwards. The HTML or markdown twin has to answer 200 with an HTML or markdown content type: a link to a twin that 404s, or a twin outside the probe set, is reported as a declared-but-unverified alternative.

## Standards referenced

- `PDF/UA`

## Related checks

| Check | Tier | Impact | Same skill |
| --- | --- | --- | --- |
| `markdown-negotiation` — Markdown content negotiation | Recommended | Critical | — |
| `headings` — Semantic heading structure | Essential | High | — |
| `meta` — Title and summary metadata | Essential | High | — |
| `jsonld` — JSON-LD structured data | Essential | Critical | — |
| `faq-schema` — FAQ / question-answer schema | Recommended | High | — |
| `breadcrumb` — Breadcrumb / navigation schema | Emerging | Low | — |
| `summary` — Prominent summary block | Recommended | Medium | — |
| `lang` — Language declaration and multilingual access | Recommended | Medium | — |
