The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.
Short answer: tagged PDF output is the strongest explanation supported by the historical reports. Users reported much larger files after tagged export was enabled by default in Puppeteer 11, and a separate report after upgrading to 12 noted a /StructRootTree in the larger PDF. That makes tagged structure a plausible cause—not proof of a universal Puppeteer 12 bug. Current Puppeteer documentation lists a tagged PDF option with a default of true. Compare controlled output, and try tagged: false only if an untagged PDF meets your accessibility requirements.
What changed—and what the reports actually show
The reported increase is real for the documents described, but the available evidence does not establish a single cause for every file that grew after an upgrade. The clearest historical change concerns tagged PDFs: a Puppeteer user reported that tagged export became enabled by default in version 11.0.0, and described a very large increase on a 539-page document. A different user reported a larger PDF after upgrading to 12.0.0 and observed /StructRootTree, a structure-tree entry, in the output.
Those details make tagged output a sensible first variable to test. They do not show that every v12 output grew, that tags explain all of the second report’s increase, or that a particular size multiplier should be expected. The issue reporting 3 MB before and 16 MB after the v12 upgrade was closed as not planned; it does not provide a maintainer-confirmed universal root cause. Treat both sets of numbers as individual user reports, not benchmarks.
| Report | Reported output change | What it establishes |
|---|---|---|
| Rossgp, Puppeteer issue report, 2022 | 1.5 MB before Puppeteer 11.0.0; 45.7 MB in 11.0.0, for one 539-page document | The user attributed the change to tagged export being enabled by default. It is not an independently reproduced or representative measurement. Issue #8100 |
| Yogesh Rathod, Puppeteer issue report, 2022 | 3 MB before and 16 MB after a reported upgrade to Puppeteer 12.0.0 | The report mentions /StructRootTree, but does not establish a universal v12 regression or confirmed sole cause. Issue #9124 |
Why tagged output can make a PDF larger
A tagged PDF contains structural information in addition to the visual page content. That structure is used to describe document organization and support accessibility. The Puppeteer PDF options documentation describes tagged as an experimental option to “Generate tagged (accessible) PDF” and documents its default as true. Check the documentation for the Puppeteer release you actually run; defaults and available options are version-specific. Puppeteer PDFOptions
#1 Best Overall
A file containing many pages or complex content may carry more structural information than a small, simple document. The issue reports are consistent with tagged structure contributing to increased output, but neither gives enough controlled detail to say how much of the increase it caused. In particular, the presence of /StructRootTree is evidence that a structure tree exists; by itself it does not prove that tree accounts for the entire difference.
Test the cause without changing several things at once
Make a reproducible comparison before changing production settings. Run the same input with the same fonts, assets, print settings, browser binary, operating system, and headless mode. Record the output file size and page count for every run. First change only Puppeteer version; then, if your installed version supports it, compare tagged and untagged output. This isolates whether the version change or the tag setting tracks with the difference.
- Record the environment. Save the Puppeteer version, the actual Chrome or Chromium executable and version, operating system, and headless setting alongside the test results.
- Freeze the document inputs. Use identical HTML, images, fonts, remote assets, and generated data. Ensure assets are available in both runs; different or missing fonts and images can change the output independently of a library upgrade.
- Hold print options constant. Keep options such as page format, margins, background printing, and page ranges identical. Compare the same number of pages.
- Vary one factor. Compare the two Puppeteer releases using the same browser setup. Then compare
tagged: trueandtagged: falseon the same release and browser, if that release supports the option. - Inspect and record the PDFs. Note the file size, page count, and whether a structure tree appears. Do not infer a cause from size alone.
- Check whether the smaller file is acceptable. Review accessibility requirements before choosing untagged output; file size is not the only success criterion.
Try tagged: false only when untagged output is acceptable
In releases whose PDFOptions support it, make the test explicit in the call to page.pdf():
Rank #2
const pdf = await page.pdf({
path: 'output.pdf',
tagged: false
});
For comparison, keep the option enabled in the control run:
const pdf = await page.pdf({
path: 'output-tagged.pdf',
tagged: true
});
These examples assume the installed Puppeteer release exposes tagged in its PDF options; confirm against the documentation matching that release. Current documentation marks the option experimental and gives it a default of true. See the PDFOptions reference.
Disabling tags trades away accessibility structure. Do not use it as a blanket size optimization when the PDF needs to be accessible. If tagged output is required, keep it enabled and look for content-specific reasons for the size instead. An older workaround reported in issue #8100 was to launch Chromium with ignoreDefaultArgs: ['--export-tagged-pdf']. That is a historical issue workaround, not the current documented PDF option; prefer the supported option where your installed release provides it, and verify the result rather than assuming the old flag behaves the same in a different release. Historical workaround report
Check the browser binary and headless mode
Puppeteer’s package version alone does not fully describe the PDF-generation environment. Its installation normally selects a specific Chrome version, and Puppeteer also supports using another executable by path. Record which browser actually runs; two tests with different Chrome/Chromium binaries are not a clean comparison of Puppeteer versions. Puppeteer installation documentation
Headless mode is another independent variable. A later Puppeteer report connected a file-size change to a headless-setting change; a maintainer explained that, in that setup, headless: 'new' corresponded to headful browser behavior while headless: 'shell' selected old headless mode. That report is a reason to control the mode in your test, not proof that headless behavior caused the v12 report. Puppeteer issue #10079
Common causes of a misleading comparison
- Different browser versions: Puppeteer may install a browser version, while an explicit executable path can select another. Record both the executable and its version.
- Different headless settings: Pin the setting in both runs. Do not treat
new,shell, and headful execution as interchangeable without checking the release-specific behavior. - Changed document inputs: Fonts, images, CSS, remote assets, or generated content can differ between runs. Keep them fixed before attributing size to Puppeteer.
- Changed print options: Different paper size, margins, background handling, or page ranges can change output. Compare equivalent print configurations.
- Comparing page counts rather than equivalent files: A multi-page document’s total size is not meaningful as a version comparison if its content or number of pages changed.
- Assuming a tag tree explains every byte: A structure tree can confirm tagged structure is present, but the reports do not quantify its contribution to the total file size.
Troubleshooting: what to do when the PDF is still large
The tagged option is rejected or has no effect
Check the installed Puppeteer version and the PDFOptions reference for that exact release. The current reference documents the option, but an older version may not expose the same API. If you cannot use the option, do not assume a newer documentation page describes your installed version. Upgrade deliberately, then rerun a controlled test.
Rank #4
The file shrinks with tags off, but accessibility matters
Restore tagged output. The smaller result is not an equivalent replacement if the document needs its accessibility structure. Investigate the document and generation environment while preserving the requirement; the available reports do not supply a universal alternative setting that keeps the same structure while guaranteeing a smaller file.
The size changes only when changing headless mode
Keep the mode fixed for version comparisons, and record the exact mode and browser binary. Test the modes you intend to deploy separately. The later report shows that mode can be a relevant variable in a particular setup, but does not establish which mode will produce smaller output for your document.
The result still differs with identical options
Verify that the HTML and assets are genuinely identical, that both runs use the same Chrome/Chromium executable and version, and that the PDFs have the same page count. Then compare tagged and untagged output if supported. If the difference remains, capture the minimal reproducible document and the full environment details when investigating the relevant Puppeteer release. The cited reports do not establish a general expected size or a guaranteed fix for every case.
Best Value
- Used Book in Good Condition
Or skip the browser setup
If your real task is taking a clean screenshot of a web page rather than generating a paginated, tagged PDF with Puppeteer, ScreenshotNeo offers a one-request screenshot API. It is not a drop-in replacement for custom Puppeteer PDF generation. Here is the cURL example using the documented endpoint and parameters; see the ScreenshotNeo API documentation for supported options:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
ScreenshotNeo removes cookie banners, newsletter popups, and chat widgets before the shot; bot checks, blank pages, and failed loads are never billed. Its MCP server lets AI agents take screenshots. The Free plan includes 1,000 screenshots a month with no card, and paid plans start at $5 for 3,000 screenshots. Sign up free for 1,000 screenshots a month with no card.
Bottom line
Tagged PDF output is the best-supported first explanation to test for the historical size increases, but the available reports do not prove one universal Puppeteer 12 cause. Compare equivalent runs, control the browser binary and headless mode, and use tagged: false only when an untagged PDF is acceptable.
Recommended Free Tools
Frequently Asked Questions
Is there a documented 16 MB target size for Puppeteer PDFs?
No. The cited 3 MB-to-16 MB change is one user’s report, not a target, benchmark, or expected output size.
Does finding /StructRootTree prove that tagged output caused the whole increase?
No. It indicates a structure tree is present; the cited report does not quantify its contribution or establish it as the sole cause.
Should I disable tagged output for every PDF to reduce size?
No. Untagged output gives up accessibility structure, so use it only if that trade-off is acceptable for the document.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

