Quick answer: Configure the server to send the right Content-Encoding for .gz/.br files, or switch the build to 'Decompression Fallback' so Unity's loader decompresses in JS when headers are absent.
This is the most common broken-deploy error for Unity WebGL: the build works on one host and dies on another. It is purely a server header problem. Here is how to fix it per hosting setup.
How to fix it
1. Fix the headers on servers you control
Serve *.js.gz with Content-Encoding: gzip and Content-Type: application/javascript (and *.br with br over HTTPS). Unity documents ready-made nginx, Apache, and IIS snippets.
2. Use Decompression Fallback for dumb hosts
On itch.io-style static hosts where you cannot set headers, enable Player Settings > Publishing Settings > Decompression Fallback and rebuild — the loader ships a JS decompressor.
3. Do not rename or unzip build files by hand
Unzipping the .gz files and leaving the old filenames in index.html is a classic half-fix; if you disable compression, rebuild so the loader manifest matches.
4. Verify with the network tab
Load the page with DevTools open: the framework file should download with the expected encoding header and the console should show the Unity loader progressing past 90%.
Catching the ones you can't reproduce
The hardest version of this to fix is the one you can't reproduce — it only happens on a player's hardware, OS, driver, or save state, under conditions that simply aren't present on your machine. A report that says “it crashed” or “it froze” gives you nothing to act on, so the bug survives release after release while quietly costing you players.
Automatic error capture closes that gap. Each failure arrives with its full stack trace, the device and OS, the build number, and a breadcrumb trail of what the player did right before it broke, so even a failure you have never seen becomes a specific, reproducible issue. Fold identical failures into one signature ranked by how many players each hits, and your worklist sorts itself worst-first instead of arriving as a stream of vague complaints.
This is where a tool like Bugnet earns its place. Its SDK captures every Unity error automatically with the full stack trace plus device, OS, memory, build, and game-state context, folds duplicates into one grouped issue with an occurrence count, and ties each to the build it first appeared on — so you fix the problem that hurts the most players first and confirm it is gone when its signature disappears from the next release.
The errors you never hear about are the ones quietly costing you players. Visibility turns them into a worklist.