# HTML Report Troubleshooting — Blank Pages, Dead Links, Blocked Assets

Canonical: https://commareports.com/fix
Published: 2026-09-07

> A report that renders blank, downloads instead of opening, 404s on click-through, or won't preview anywhere. The console message that identifies each cause, and the fix for it.

# HTML report troubleshooting

A report that works on your machine and breaks everywhere else is not a
random event. It is one of about six causes, and the browser console
names which one before you start guessing.

## Start here: read the console

| Console says                                      | Cause                         | Page                                                                                             |
| ------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ |
| 404 on `.css` / `.js`                             | Only the entry file travelled | [Lost CSS](/html-report-broken-css)                                                              |
| CORS error against `file:///…`                    | Opaque local origin           | [Allure blank](/fix/allure-report-blank-page) · [Playwright blank](/fix/playwright-report-blank) |
| `Refused to … violates … Content Security Policy` | The host's policy             | [Mixed content vs CSP](/fix/mixed-content-blocked-html-report)                                   |
| `…requested an insecure resource…`                | Mixed content                 | [Mixed content](/fix/mixed-content-blocked-html-report)                                          |
| Nothing — the page just downloads                 | Wrong `Content-Type`          | [S3 downloads instead of rendering](/fix/s3-html-downloads-instead-of-opening)                   |
| Nothing — the chart box is empty                  | The library never loaded      | [Plotly missing](/fix/plotly-chart-not-showing-in-html)                                          |

## Blank pages and missing content

- [Allure report opens as a blank page](/fix/allure-report-blank-page) — the XHR-loaded `data/` tree, and why `allure open` works
- [Playwright report is blank or won't open](/fix/playwright-report-blank) — `show-report`, traces, and the CI zip that makes it worse
- [Plotly chart missing from the exported HTML](/fix/plotly-chart-not-showing-in-html) — the four `include_plotlyjs` modes
- [Jupyter widgets don't render in the export](/fix/jupyter-widgets-not-rendering-in-html) — what survives without a kernel
- [My HTML report lost its CSS](/html-report-broken-css) — five causes, in order
- [Coverage report links 404 on click-through](/fix/coverage-report-links-broken) — the directory you left behind

## Hosting and delivery

- [GitHub Actions artifact HTML won't open](/fix/github-actions-artifact-html-not-viewable) — why it is always a zip
- [GitLab Pages report 404s](/fix/gitlab-pages-report-404) — the `public/` rule and branch collisions
- [The CI artifact link expired](/fix/ci-artifact-expired) — four deletion mechanisms, only one of them retention
- [S3 downloads your HTML instead of rendering it](/fix/s3-html-downloads-instead-of-opening) — the `Content-Type` fix
- [Mixed content blocked](/fix/mixed-content-blocked-html-report) — telling it apart from a CSP refusal
- [The localhost link doesn't work for others](/fix/localhost-link-doesnt-work-for-others) — why, and the two real options

## Getting it in front of people

- [The HTML file is too big to email](/fix/html-file-too-big-to-email) — what is making it large, and what to cut
- [Slack won't preview an HTML file](/fix/slack-wont-preview-html-file) — the security reason, and what to post
- [The agent's output is too long to paste](/fix/agent-output-too-long-to-paste) — comment and message ceilings

## The pattern underneath all of them

Three things make a report work on your machine, and all three are lost
in transit:

1. **The whole output directory** is present. Copy the entry file out
   and every relative reference breaks.
2. **The origin is permissive.** Your local server gave it a real
   `http://` origin; `file://` on the recipient's laptop does not.
3. **Your network reaches the CDN.** Theirs might not, and the viewer
   they open it in may refuse the request regardless.

Publishing the output directory to a URL restores all three at once:
the entry HTML becomes the report body, assets upload alongside it with
their relative references rewritten to the uploaded copies, and the
whole thing is served over HTTPS from an address that does not depend on
anyone's machine being awake.

Interactivity survives — scripts run in a sandboxed iframe
(`allow-scripts`, no `allow-same-origin`) — and readers can select the
failing assertion or the suspicious number and comment on **it**, rather
than screenshotting it into chat ([comment on HTML](/comment-on-html)).

**Limits:** entry HTML 5 MB; assets 25 MB per file, 250 MB and 500 files
per report.

## Try it

Comma is free — unlimited reports, unlimited commenters, unlimited
revision history.

**[Publish a report that opens for everyone →](https://commareports.com/)**

### Related

- [Report types](/report-types) — 190+ per-tool publishing guides
- [Publish from CI](/docs/ci) · [Quickstart](/docs/quickstart)
- [Stop screenshotting reports](/stop-screenshotting-reports)
