ScreenshotNeo

BlogHTML to image & PDF

How to Make a PDF Accessible at a URL

Create a tagged, screen-reader-friendly PDF, test it, and publish a stable URL with an accessible HTML alternative.

By the ScreenshotNeo team1 October 20268 min read

Direct answer: Publish HTML when the content does not require a fixed page layout. When a PDF is necessary, make the source document accessible, export a tagged PDF, repair its structure and links, test it with automated and manual checks, then publish it at a stable HTTPS URL with descriptive surrounding link text and an HTML alternative.

1. Decide whether PDF is the right format

GOV.UK guidance calls HTML the most accessible format for publishing documents. HTML reflows, lets readers control presentation, works better with assistive technologies and is easier to update. Use PDF for a clear fixed-layout need such as a form, print-ready artwork, signed record or document whose pagination is part of its meaning.

Question Prefer HTML when… PDF is reasonable when…
Layout Readers need reflow, zoom or small screens. Exact pages, print layout or signatures matter.
Maintenance Content changes often. A stable version must be distributed or archived.
Navigation Web links, search and headings are central. Pagination, bookmarks and a downloadable artifact are required.
Assistive technology You can use native semantic HTML. You can provide tags, reading order, metadata and alternatives.

If the PDF is primarily web information, publish the complete HTML page and offer the PDF as an optional download.

2. Make the source document accessible

Accessibility problems created in the source are harder to repair after export. Before creating the PDF:

  • Apply real heading styles in a logical order (for example, Heading 1 followed by Heading 2), rather than changing font size and weight manually.
  • Use table header cells and keep tables simple. Do not use tables for visual positioning.
  • Write link text that describes the destination or action, such as “Download the 2026 application form,” instead of “click here” or a bare URL.
  • Provide meaningful alternative text for informative images. Mark decorative images as artifacts.
  • Use sufficient color contrast and do not communicate meaning by color alone.
  • Set the document language, title and other metadata.
  • Use a short, descriptive filename such as benefits-application-2026.pdf.
  • Ensure form controls have labels, usable keyboard order and clear instructions.

Microsoft 365 can add accessibility tags when saving as PDF, but automatic tagging is only a starting point. Inspect the result and remediate it.

3. Export a tagged PDF

Export with the authoring tool’s accessibility or “tagged PDF” option enabled. Tags are the structural foundation of an accessible PDF: they expose headings, paragraphs, lists, tables, figures and other roles to assistive technology. Confirm that the export preserved:

  • Heading hierarchy and document sections
  • Paragraph boundaries and list numbering
  • Table headers, scope and cell relationships
  • Figure alternative text
  • Form fields, labels and tab order
  • Document language, title and other metadata

A visual match to the source does not prove that the tag tree or reading order is correct.

4. Repair the tag tree and reading order

Open the PDF in an editor with tag-tree and accessibility tools. Inspect every page, especially pages containing columns, sidebars, tables, captions or floating objects.

  1. Set the document title and language.
  2. Open the tags panel and verify one coherent hierarchy. Do not skip heading levels without a structural reason.
  3. Place paragraphs, lists and headings in the order a reader should hear them.
  4. Assign table header cells and verify that header associations make sense when read row by row.
  5. Add alternative text to informative figures; mark borders, background shapes and other decoration as artifacts.
  6. Check form field names, tooltips, required status and keyboard order.
  7. Remove empty tags, duplicated content and hidden text that would be announced unexpectedly.

Section508.gov describes tags as the structural foundation of a PDF. The EU Publications Office also identifies tagging, logical reading order, metadata and image alternatives as core requirements.

Create links during authoring whenever possible. W3C’s PDF11 technique identifies authoring-time links as the simplest way to meet link accessibility requirements. Each link must be programmatically available and its purpose should be clear from its visible text or accessible name.

  • Use descriptive text: Read the payment terms.
  • Do not rely on color or underlining alone to convey that something is a link.
  • Ensure the link annotation is in the correct place in the tag tree and reading order.
  • Test internal links, external links, bookmarks and form-submit actions.
  • If a visible URL is unhelpful, provide an accessible name. W3C PDF13 documents the use of a link tag’s /Alt value for this purpose.

6. Test before publishing

Use several kinds of checks because no single checker finds every failure.

Check What to do Failures it can reveal
Automated checker Run the authoring or PDF editor accessibility checker. Missing tags, language, title, alt text, table headers or contrast warnings.
Tag inspection Review the complete tag tree and element properties. Wrong roles, skipped structure, duplicated or missing content.
Reading order Use the editor’s reading-order view and read pages sequentially. Columns read across, sidebars inserted in the wrong place, captions detached.
Keyboard Navigate without a mouse; operate every link and field. Unreachable controls, illogical tab order, keyboard traps.
Screen reader Listen through headings, landmarks, lists, tables, figures and forms. Announcements that differ from the visual order or omit meaning.
Link test Activate every link and verify its destination. Broken, redirected, ambiguous or inaccessible destinations.

Fix issues, regenerate or replace the PDF, and repeat the checks. Automated results are evidence of specific checks, not proof of complete conformance.

7. Publish the PDF at an accessible URL

  1. Serve the file over HTTPS.
  2. Use a stable, descriptive filename and URL. Avoid session IDs and unnecessary query strings.
  3. Set a PDF content type and a download disposition appropriate to your experience.
  4. Keep old URLs working with redirects when a file is replaced.
  5. Put the link in meaningful surrounding HTML. Identify the format and, when useful, file size or page count.
  6. Provide an HTML alternative for content that is mainly informational.
  7. After every replacement, retest the file, its URL, its links and its HTML context.
<p>
  <a href="/documents/benefits-application-2026.pdf">
    Download the 2026 benefits application (PDF)
  </a>
</p>
<p>
  Prefer a web page? <a href="/benefits/application">Read the application information in HTML</a>.
</p>

Do not use a bare link such as /file.pdf as the only context. Screen-reader users should be able to understand what the file contains before opening it.

8. Capture and verify a published PDF page

A screenshot can help document visual regressions, but it cannot replace tag-tree, keyboard or screen-reader testing. If you need an image or PDF capture of the published page for review, you can use a browser automation script or a screenshot API.

9. Common problems and fixes

Problem Likely cause Fix
Screen reader announces a page in the wrong order Tags follow visual placement rather than logical reading order. Reorder tags and the reading-order panel; test again with a screen reader.
Headings are missing Text was styled visually instead of using heading semantics. Apply heading styles in the source and repair heading tags in the PDF.
Table is read as a series of unrelated cells Header cells or scope relationships were not exported. Mark header cells, simplify the table and verify row/column navigation.
Image is announced as its filename No alternative text was supplied. Add concise meaningful alt text or mark the image as decorative.
Links cannot be reached by keyboard Annotations are missing, hidden or out of tab order. Recreate links, place them in the tag structure and set a logical tab order.
Checker passes but users report barriers Automated tools cannot judge every reading-order, wording or interaction issue. Inspect manually and test with keyboard and assistive technology.
URL works for staff but not readers Authentication, expiring URLs, hotlink rules or incorrect content type. Test in a private browser session, use a stable public HTTPS URL and configure server headers.
Updated PDF still shows old content Browser, CDN or proxy cache. Use cache invalidation or a versioned filename while keeping a redirect from the old URL.

10. Performance, reliability and cost

  • Keep PDFs as small as practical. Compress images without removing information needed to understand them.
  • Use a cache or CDN for repeated downloads, but purge it whenever an accessibility repair is published.
  • Monitor broken links and replacement dates. A perfectly tagged file is still inaccessible if its URL returns an error.
  • Retain the source document and a record of the checks performed so future edits do not discard structure.
  • For large batches of pages, capture only the pages or elements needed for review and use asynchronous processing where available.

Or skip the browser setup

ScreenshotNeo returns a screenshot or PDF from one GET request. Before capture it accepts the cookie or consent banner like a visitor and removes more than 60 known consent platforms, newsletter popups and chat widgets; each cleanup step can be turned off. Bot checks, blank pages, timeouts, failed loads and cache hits are not billed, and the response identifies the page verdict and billing status.

See the ScreenshotNeo API documentation for all options, including PDF paper size, margins, landscape mode and page ranges.

curl -G "https://api.screenshotneo.com/v1/shot" \
  -d access_key=YOUR_API_KEY \
  --data-urlencode url=https://example.com/accessibility-guide.pdf \
  -o shot.webp
import requests

r = requests.get(
    "https://api.screenshotneo.com/v1/shot",
    params={"access_key": "YOUR_API_KEY", "url": "https://example.com/accessibility-guide.pdf"},
    timeout=90,
)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({
  access_key: 'YOUR_API_KEY',
  url: 'https://example.com/accessibility-guide.pdf'
});
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const bytes = new Uint8Array(await res.arrayBuffer());
await Bun.write('shot.webp', bytes);

An MCP server provides take_screenshot, get_page_info and capture_pdf tools for Claude, Cursor and other MCP clients, so an AI agent can inspect published pages. Free usage includes 1,000 screenshots each month with no card; paid plans start at $5 for 3,000 shots. Create a free ScreenshotNeo account.

FAQ

Is a tagged PDF automatically accessible?

No. Tags provide structure, but you still need to verify reading order, headings, tables, figures, links, forms, metadata, keyboard access and real assistive-technology behavior.

Should every PDF have an HTML version?

Provide HTML whenever the material is primarily web information or readers need reflow and easy maintenance. A fixed-layout artifact may remain PDF when there is a clear reason.

Can I fix accessibility without the original source?

Often, yes, with tag-tree, reading-order, link, form and metadata tools, but rebuilding from an accessible source is usually more reliable for complex documents.

Does a descriptive URL make the PDF accessible?

No. A clear URL and link context help people find and identify the file; accessibility still depends on the PDF’s semantic structure, content and testing.