Web Development

Why Your Netlify Site Silently Stopped Updating (Auto-Publish Off)

Netlify builds go green, deploys say ready, but the live site never changes. The cause is auto-publishing disabled by a forgotten rollback. Here is the fix.

May 21, 2026
6 min

The Silent Freeze: Green Builds, Stale Site

You push a commit. CI goes green. Netlify reports the deploy as "ready." Your site does not update. So you push three more commits. Three more "ready" deploys. And still the same old content sits live on your domain.

There is no error. No failed build. No red cross anywhere to grab your attention. Every signal you normally trust is telling you everything worked — and yet nothing you shipped is visible to a single visitor. This is one of the most disorienting failure modes in modern web deployment, precisely because it disguises itself as success.

What you are looking at is a Netlify site with auto-publishing disabled. The build pipeline is still running on every push, dutifully compiling your code and marking each result "ready." It just is not promoting any of those builds to production. They pile up in the deploy queue, green and untouched, while an older deploy keeps serving traffic.

The first time it happens, you will burn an hour second-guessing your code, your cache, your DNS — everything except the one setting that actually moved.

What Auto-Publish Actually Does

By default, Netlify runs a simple promise: every successful build of your production branch goes live automatically. Build succeeds, build publishes, done. That automatic promotion is what "auto-publishing" means, and it is on by default for a reason — it is the behaviour almost everyone expects from continuous deployment.

When auto-publishing is off, that final promotion step is severed. Netlify still listens for pushes. It still builds. It still validates. But the last link in the chain — "and now make this the live deploy" — no longer fires automatically. Instead, each finished build becomes a staged deploy waiting for a human to explicitly publish it.

This is genuinely useful in some workflows. Teams running a release-approval process, or sites where a person must sign off before production changes, deliberately turn auto-publish off. The problem is that the setting is sticky and invisible. Nothing in your day-to-day push-and-watch routine reminds you it is set.

So a feature designed for deliberate, gated releases becomes a trap for anyone who landed in that state by accident.

The Trigger: A Rollback You Forgot to Undo

Here is how almost everyone ends up here without meaning to: a rollback.

Something broke in production. You opened the Netlify dashboard, found a known-good earlier deploy, and clicked "Publish deploy" or "Restore" to roll back to it. The fire is out, the site is stable, you move on. What you may not realise is that manually publishing an older deploy can switch the site into a state where automatic promotion stops.

From that moment, every automated deploy is staging-only. Your incident response — the right call in the moment — quietly changed the rules for every push that follows. Days or weeks later, a completely unrelated change refuses to appear live, and the rollback you did during an outage is the last thing you would think to blame.

This is the heart of why the bug is so slippery: the action that caused it and the symptom it produces are separated by time, by context, and often by a different person entirely.

How to Confirm Auto-Publish Is Off

The good news is that confirmation takes about ten seconds once you know where to look. The symptom hides in the normal deploy list, but it is obvious the moment you check the right indicator.

Open the Netlify dashboard and go to Deploys. Scan the list for the deploy carrying the Published label. Now compare it to your most recent commit. If the Published badge is sitting on an older deploy while newer "ready" builds stack above it, auto-publishing is off. The newest green build is not the live one — and that mismatch is your entire diagnosis.

For a scriptable check, compare the live deploy's commit_ref field against your current git SHA. If they diverge while your latest build shows "ready," you have confirmed the freeze without ever opening a browser. This is the check worth automating, because the human eye glides right past a green build that simply is not the published one.

Two Fixes: One Deploy vs Permanent

There are two fixes, and which one you want depends on whether this was a one-off or an ongoing problem.

To publish a single deploy right now: open the deploy you want live, and choose Publish deploy. That promotes one specific build to production immediately. It does not change the underlying setting — the next push will still stage rather than publish — but it gets your current work live without delay.

To fix it permanently: go to Site configuration → Build & deploy and re-enable auto-publishing. From then on, every successful build promotes itself again, and the trap is closed.

If you script your deploys, the Netlify API exposes the same control. netlify api restoreSiteDeploy --data '{"deploy_id":"<id>"}' publishes a specific deploy by ID — handy when you are verifying and promoting deploys from a pipeline rather than clicking through the dashboard.

Trust the Live Site, Not the Build Badge

The deeper lesson outlives this one Netlify setting: a "ready" build is not a live site. Build status tells you compilation succeeded. It says nothing about what bytes a real visitor receives. Those are two different facts, and conflating them is what let four green deploys hide a frozen site.

If you run any CI/CD that pushes regularly, add a post-deploy assertion that closes the gap. Curl the live URL and grep for a unique string from the latest commit — a version number, a build hash, a fresh headline. If the string is not there, fail the pipeline loudly. That single check converts a silent, hour-eating mystery into an instant, unambiguous alarm.

The platforms we build on are full of settings that are correct in one context and quietly catastrophic in another. The defence is never "trust the dashboard." It is "verify the thing your users actually touch."

What's Next

This kind of invisible-state debugging is exactly the work that separates a site that ships reliably from one that surprises you. If you want a build and deploy pipeline that fails loud instead of failing silent, that is the standard we build to — see our website development service for how we approach it, and our take on web design and development best practices for the principles behind it.

Share This Article

Spread the knowledge

Free Strategy Session

Stop Guessing.
Start Growing.

Get a custom strategy built around your goals, not generic advice. Real insights. Measurable results.

No obligation
30-min call
Custom strategy

Continue Your Learning Journey

Explore these related articles to deepen your understanding of web development

We Found 9 Invisible Pages Hiding on a Client's Server (Here's How)

A client's location pages weren't updating despite template changes. The culprit: orphan PHP files overriding the URL rewrite system. Here's how we found them.

8 min read
Read →

How to Use Claude Code Agent Teams: The Complete Guide

Learn how Claude Code Agent Teams coordinate parallel AI agents to tackle complex projects. Real case study: 7 deliverables in 15 minutes across a plumbing franchise.

11 min read
Read →

Claude Code Background Tasks: How AI Agents Work While You Sleep

Learn how Claude Code background tasks let AI agents run builds, audits, and research autonomously. Discover how we use async agents to manage multiple clients simultaneously.

11 min read
Read →

Need Help With Web Development?

Explore our professional services to get expert assistance