You press Publish or Update in the block editor and a red bar says "Publishing failed. You are probably offline." (or "Updating failed"). Your internet is usually fine. The editor saves by sending the post to your own site in the background, and that request came back with no answer it could read: something blocked it, cut it off, or sent it to the wrong address. Your text is still in the open tab, so do not close it yet.
Before anything else, select all the text in the post (click in it, Ctrl+A twice, Ctrl+C) and paste it somewhere safe. The editor also keeps a local backup in the browser and offers "The backup of this post in your browser is different" next time, but a copy you made yourself is certain.
/wp-json/wp/v2/posts/ (or ?rest_route=). Its status is the answer:
(failed), (blocked) or net::ERR_: the browser never got a reply. Go to step 2.403: a firewall or security plugin refused it. Go to step 3.500, 502, 503, 504 or a long wait then failure: the server broke or ran out of time. Go to step 4.http:// while the editor is on https://, the site's own address settings are wrong (Settings, General) and the browser blocks the mixed request.SELECT ... FROM. Save a short test post. If that works, remove the last pasted block and try again. The firewall log or the host can name the rule./wp-json/ request./wp-admin/.https:// one you actually use (if they are greyed out, they are set in wp-config.php; change them there)./wp-json/wp/v2/ requests from logged-in editors in the security plugin, or ask the host to whitelist that one ModSecurity rule ID for your site. Paste embed code through a proper embed block instead of raw HTML where you can./wp-admin/* and /wp-json/* when the request carries your login cookie.| What you see | What it means | Usual fix |
|---|---|---|
| Saves in a private window, fails in your normal one | An extension blocks the save request | Allow your site in the extension |
| Network tab shows a 403 on /wp-json/ | A firewall or security plugin refused it | Allow the rule for the editor, or ask the host |
| Only posts with pasted code or embeds fail | A firewall pattern matches the text | Use an embed block, or whitelist the rule |
| Request goes to http:// from an https:// editor | Site address is set to the old http one | Fix both addresses in Settings, General |
| 500/504, or long wait then failure | A plugin crashes or the save times out | Read the error log, fix the plugin, raise the limit |
Most of these are one extension setting, one address or one firewall rule. If every save fails and you cannot find what is blocking it, that is what the box below is for. Related: "The response is not a valid JSON response", cURL error 28 and REST API errors in Site Health and "Are you sure you want to do this?".