Common causes
- The save request timed out or was dropped (flaky connection, slow server, PHP timeout) - 'You are probably offline'
- A database error such as emoji in a non-utf8mb4 table, a full disk or a crashed wp_posts table - 'Could not update post in the database'
- The login session or REST nonce expired while the editor was open
- A firewall returning 403 for specific post content
- A plugin hooked on save_post throwing a fatal error
How to fix it
- Copy your content first. Select all blocks and copy them, or use the Code editor view to copy the raw markup, so nothing is lost while you troubleshoot.
- Read the full message and network response. In DevTools > Network find the failed /wp-json/wp/v2/posts/<id> request. A timeout, 403, 500 or JSON error code each point to a different cause.
- For 'Could not update post in the database'. Check the database error in debug.log (enable WP_DEBUG_LOG). Common fixes are converting tables to utf8mb4 for emoji, repairing wp_posts, or freeing disk space.
- For 'You are probably offline'. Check the server error log for PHP timeouts or 5xx errors at that time. Raise max_execution_time or fix the slow save_post hook; disable plugins to find it.
- Refresh your session. Reload the editor (WordPress keeps an autosave or local backup) or log in again if prompted; an expired nonce makes saves fail with 403.
- Check for WAF blocks. If saving fails only with certain content (SQL, script tags, code samples), ask your host which ModSecurity rule blocked it.
Check table charset (SQL, adjust prefix)
SELECT TABLE_NAME, TABLE_COLLATION
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME LIKE 'wp\_%';
CHECK TABLE wp_posts; How to stop it happening again
- Keep tables on utf8mb4 so emoji and special characters save
- Keep heavy work out of save_post hooks or run it asynchronously
- Save drafts frequently on long posts