How do I check every file on Cloudflare Pages matches my build?

Last updated 2 November 2026

Take a fingerprint (SHA-256) of every file in your build folder, fetch the same file from your live domain, and compare the two. Matching fingerprints mean that exact file is live. We found no Cloudflare command that does this for you, so it's a short script, below.

Why it happens

"Deployment complete" means Cloudflare accepted the upload. It doesn't compare what your domain now serves with the folder on your machine. A file can still differ for reasons that have nothing to do with a broken deploy:

So a fair check follows redirects, skips config files and redirected files, and knows Cloudflare's HTML changes. Anything left that differs is a real difference.

How to check it yourself

Run this from your build folder (bash, with your domain in place of yoursite.com). It fetches each file with a unique query, so no cache answers, and follows redirects:

find . -type f ! -name _headers ! -name _redirects ! -name _routes.json ! -path './functions/*' | while read -r f; do
  p="${f#.}"
  live=$(curl -sL "https://yoursite.com${p// /%20}?x=$RANDOM" | sha256sum | cut -c1-64)
  mine=$(sha256sum "$f" | cut -c1-64)
  [ "$live" = "$mine" ] || echo "DIFFERS: $p"
done

No output means every file matches.

What to do next

The proof

golproductions.com, 2 November 2026: 112 files checked. 5 HTML pages differed. In every one, the only difference was the <!--email_off--> markers, which Cloudflare had removed. With those markers removed on both sides, all 112 matched.

Where Jogga comes in

Jogga, which we make, does this check for you, and adds a deploy ID so you know which deploy is live. It stamps the build, then reads the live site and checks every file:

npx @golproductions/jogga deploy dist https://yoursite.com -- npx wrangler pages deploy dist --project-name yourproject
LIVE: https://golproductions.com is serving deploy a3325da45b31047e, stamped 2026-11-02T06:07:50.573Z. All 112 files match, byte for byte.

What this page doesn't cover

This checks static files. Server code (Pages Functions, Workers) can't be fetched as a file, so it can't be compared this way. Pages built fresh on every request will always differ.

Questions people ask next

Why does /page.html redirect on Cloudflare Pages?
Pages serves pages without the .html ending and redirects the .html address to it with a 308. The file served is the same, so follow the redirect before comparing.

Why do _headers and _redirects return 404 on my site?
Cloudflare Pages reads those files as settings and never serves them as files. Leave them out of the check.

Do I need to purge the cache first?
Usually not. A unique query on each request, like ?x=123, gets past caches that store each full address separately, which Cloudflare does by default.

Prove every deploy.

Jogga is free.