Blog

  • How to fix WordPress issues without guessing

    Key takeaways

    • Read the evidence before you change anything: the Recovery Mode email, the host’s error log and wp-content/debug.log usually name the file and line.
    • A plugin, theme or update conflict is the cause people report most often. A 500 error can also come from .htaccess, memory, the database or the server, so don’t assume it’s a plugin.
    • Roll back the one component that broke rather than restoring the whole site. A full restore can wipe orders and posts created since the backup.
    • On a WooCommerce store, check Orders before anyone retries Place order. WooCommerce also advises against switching to classic checkout as a first fix.
    • Clearing a cache helps you diagnose. It doesn’t prove the fix worked. In one case WP Super Cache kept showing a database error to visitors after the server had recovered.

    A WordPress site is several layers stacked together: core, the theme, plugins, PHP, the web server, the database, and one or more caches. When something breaks, you usually see one of a few generic screens, no matter which layer actually failed. “There has been a critical error on this website” can mean a plugin crashed, the theme doesn’t work with your PHP version, or memory ran out.

    So the most common mistake isn’t a wrong fix. It’s treating the symptom as the diagnosis: assuming every 500 is a plugin conflict, every spinner is a caching problem, and a cleared cache means the problem is gone. This guide gives you the order of checks first, then the fix for each common symptom. If your site won’t load at all, our guide to why WordPress is not loading matches the exact message to its cause.

    What should you do before you touch anything?

    Write down the evidence, make a backup, then change one thing at a time. WordPress’s own handbook, WooCommerce’s docs and most hosts recommend the same order, because guessing destroys the clues you need.

    1. Record the exact message and when it appears. Note whether it shows on every page or one page, whether it shows logged in or logged out, and what changed just before it started. A plugin update, a PHP upgrade or a pasted snippet is usually the answer.
    2. Check the admin inbox. Since WordPress 5.2, Recovery Mode can email the site admin a link when a fatal error happens. The email names the plugin or theme that failed and lets you log in with it paused.
    3. Read the logs. Your hosting panel has a server error log, and often a separate PHP error log. Each can show a different problem. If WordPress debug logging is on, there is also wp-content/debug.log.
    4. Back up files and the database together. Do this even if the site is half broken. A backup of the broken state still lets you undo your own mistakes.
    5. Change one variable, then retest the action that failed. If you change three things and the site comes back, you still don’t know which change fixed it.

    If no log exists yet, turn on WordPress debug logging in wp-config.php. Keep on-screen display off on a live site so visitors never see file paths:

    define( 'WP_DEBUG', true );
    define( 'WP_DEBUG_LOG', true );
    define( 'WP_DEBUG_DISPLAY', false );

    Load the broken page again, then open debug.log. Look at the file path, not the wording. A path inside wp-content/plugins/some-plugin/ names your suspect. When you’re done, set WP_DEBUG back to false.

    Which WordPress issues come up most, and how do you fix each one?

    No public dataset ranks WordPress failures by how often they happen. The order below reflects how often each pattern comes up in WordPress.org support threads, WooCommerce documentation and hosting guidance. Plugin, theme and update conflicts top that list by a wide margin.

    A critical error or white screen right after an update

    This is usually a PHP fatal error in a plugin or theme. WordPress’s common-errors handbook lists plugin conflicts, an incompatible theme or PHP version, exhausted memory and corrupted files as the usual causes.

    Start with the Recovery Mode link if you got one, and deactivate the component it names. If you can’t reach wp-admin, connect by SFTP or the host’s file manager and rename only the suspect plugin’s folder in wp-content/plugins, for example to some-plugin-off. If the theme is the suspect, switch to a default theme. Our walkthrough on reading a WordPress fatal error covers each route in detail.

    Once you know which plugin broke, decide what to do about the version. If the update caused the crash, roll back to the previous release with a tool such as WP Rollback, which reverts WordPress.org plugins and themes to an earlier version. Report the bug to the developer too. A rollback is a workaround. The faulty release is still a problem until the developer ships a patched one.

    WordPress Recovery Mode email naming the plugin that caused a fatal error
    The automated recovery email pinpoints the exact theme or plugin responsible for the crash alongside a direct link to regain dashboard access. · Source: www.wpbeginner.com

    A 500 Internal Server Error

    A 500 has more possible causes than any other message on this list: .htaccess, a plugin or theme, PHP limits, file permissions, the database, corrupted core files or the server itself. Read the host’s error log first, because it often names the file and line.

    If the log suggests .htaccess, or says nothing useful, download a copy of the file, rename it to .htaccess-old and reload the site. If the site works again, go to Settings → Permalinks and click Save Changes to generate a clean file. Then add back any custom redirect or security rules one at a time from your copy. If the 500 doesn’t go away, the file wasn’t the cause, so put it back and continue with plugins, the theme and memory. Our server error 500 guide walks through the rest.

    “Allowed memory size exhausted”

    Match the fix to the log line. Raising WP_MEMORY_LIMIT in wp-config.php only asks for more memory. If the server sets a lower memory_limit, the server’s limit applies, and only your host can raise it. And if one plugin keeps using more memory after an update, extra memory just delays the next crash. Roll back that plugin or replace it.

    “Error establishing a database connection”

    WordPress’s handbook names three causes: wrong credentials in wp-config.php, problems with your web host such as a database server that is down or over quota, and, if neither explains it, a compromised site. Check the host’s status page first. If the database server is down, wait. Editing files while the host recovers only adds risk.

    If the host is fine, compare DB_NAME, DB_USER, DB_PASSWORD and DB_HOST with the database details in your hosting panel. A recent password change on the hosting account often explains the error.

    Your changes don’t show, or the error won’t go away

    Caches confuse diagnosis in both directions. They can show an old page after you edit it, and they can keep showing an error after it’s fixed. On one WordPress.org thread, WP Super Cache kept serving the “Error establishing a database connection” screen to logged-out visitors after a brief server problem. Logged-in users never saw it, and only clearing the cache fixed it.

    Check every layer: the browser, the cache plugin, the host’s server cache and any CDN. Then test in a private window while logged out. If the problem is still there after every layer is purged, the cache isn’t the cause, so troubleshoot the site itself. Our guide on a WordPress page not updating covers the save failures that look like caching.

    Posts and pages return 404 but exist in the admin

    The rewrite rules are broken. The content is still there. Go to Settings → Permalinks and click Save Changes without changing the structure. WordPress’s documentation explains that if .htaccess isn’t writable, WordPress shows you the rules to add yourself. In that case the save didn’t fix anything, even though the button worked.

    If saving doesn’t help, ask your host whether mod_rewrite is enabled on Apache. Also check for a page that shares its slug with a custom post type. Don’t change the permalink structure to fix a 404. Those URLs are meant to be permanent, and changing them breaks every existing link and search result.

    WordPress Settings Permalinks screen used to fix 404 errors on posts
    Clicking the Save Changes button at the bottom of the Permalink Settings screen prompts WordPress to rebuild its rewrite rules without altering your URL structure. · Source: kinsta.com

    WooCommerce checkout spins forever

    WooCommerce’s spinner documentation explains that the browser is usually waiting for a request, rejecting its response, or failing to finish the JavaScript that updates checkout. Open your browser’s DevTools, go to the Network tab, filter by Fetch/XHR and place a test order. Note the status code, how long the request took and the response. Then open WooCommerce’s logs at the same timestamp.

    Three warnings from those docs matter more than any fix. Check Orders before anyone retries Place order, because the first attempt may have gone through. Don’t switch from the Checkout block to classic checkout as a first step. It can hide the real problem, and extensions support the two differently. And remember that a staging copy can still send real emails and fire webhooks.

    Should you deactivate every plugin at once?

    Only when the site is already down, or when the test is invisible to visitors. Turning off every plugin is quick, but on a working store it also takes down checkout, forms and logins while you test.

    WooCommerce’s conflict test is the careful version. Switch to a default theme, deactivate everything except WooCommerce and the extension that misbehaves, then reactivate plugins one at a time, repeating the steps that triggered the problem after each one. Two plugins can each work fine alone and fail together, so test suspect pairs both ways.

    On a live site, run the test on a staging copy, or use the Troubleshooting mode in WordPress.org’s Health Check & Troubleshooting plugin. That mode disables plugins and switches the theme for your logged-in session only. It can’t disable must-use plugins, and it can’t reproduce a problem that only logged-out visitors see. Its directory listing also now warns that it hasn’t been tested with the latest three major WordPress releases. Test it on staging before you rely on it on a live site.

    When should you stop and get help?

    Stop when the evidence points to something you can’t change safely. Most failed self-fixes happen because the person kept going past one of these points:

    • The log names custom code or a theme file you didn’t write. Editing it on a live site can turn a broken page into a broken site.
    • A store is losing orders. The cost of each hour is now higher than the cost of help, and a wrong step can create duplicate orders.
    • You see signs of a hack: redirects you didn’t add, browser malware warnings, or a database error your credentials and host don’t explain. Cleanup means closing the way in, not just deleting files. Our guide to WordPress security issues explains how to tell the difference.
    • The fault is below WordPress. PHP versions, server limits and database outages belong to the host. Plugin, theme and custom-code faults usually go back to whoever maintains that code.

    Whoever takes it on, send them the exact error, what you were doing when it appeared, what changed recently, the relevant log lines, the affected URL, and what you expected compared with what happened. If you’d rather describe the problem in chat and have it handled, SiteSelf’s WordPress bug-fix work reads the error, makes the fix on your live site (code-level fixes need hosting access), and reports what changed and what it checked.

    Frequently asked questions

    I disabled all my plugins and the error is still there. What next?

    Switch to a default theme, then check .htaccess, then read the server error log. Look at memory, the database and the server before you go back to plugins. Also check for must-use plugins in wp-content/mu-plugins, because they keep running when you deactivate everything else.

    Should I restore a backup instead of fixing the problem?

    Usually not first. A full restore puts back every file and database row from the backup date, so you lose any orders, comments and posts created since then. If one change broke the site, undo that one change. Our guide to restoring WordPress from backup covers when a full restore is the right call.

    Can I stop updating plugins so nothing breaks?

    No. Skipped updates leave known security holes open, and a site that falls years behind ends up with one large, risky update instead of many small ones. Update one component at a time, with a fresh backup each time, and test login, forms and checkout after each update.

    Is it safe to turn on WP_DEBUG on a live site?

    Yes, as long as WP_DEBUG_DISPLAY is false, so errors go to the log file and not the screen. WordPress recommends doing your debugging on a staging or development copy where you can. Turn it off when you finish, because the log can grow large and it contains file paths.

    My site is stuck on “Briefly unavailable for scheduled maintenance”. What do I do?

    An update was interrupted and left a .maintenance file in the site root. Make sure no update is still running, delete the file by SFTP or the file manager, then run the update again. The interrupted update may have left a plugin half installed, so check that plugin too.

    Does advice for WordPress.com apply to my self-hosted site?

    Not always. WordPress.com and self-hosted WordPress from WordPress.org have different accounts, features and support channels. File access, error logs and PHP settings belong to your host on a self-hosted site, which is why most fixes in this guide mention the hosting panel.

  • How to restore a WordPress site from backup

    Key takeaways

    • If a plugin update broke the site, try renaming that plugin’s folder in wp-content/plugins first. A full restore also deletes every order, comment and edit made since the backup.
    • WordPress’s Advanced Administration Handbook says the files and the database are separate. Restore the files first, then import the database, then check DB_NAME, DB_USER, DB_PASSWORD and $table_prefix in wp-config.php.
    • WooCommerce Subscriptions warns that renewals processed after the backup can come back as Pending and charge customers twice. Cleaning that up is developer work.
    • Don’t rely on a restore route that needs wp-admin. A fresh WordPress install with the same backup plugin, the host panel, or SFTP plus phpMyAdmin all work when the dashboard is down.
    • If a restore says it finished but the site looks empty or stale, the usual causes are a table prefix mismatch, a cache, unsaved permalinks, or files and a database taken at different times.

    A plugin update went through, and now the site shows “There has been a critical error on this website.” Your host’s panel has a backup from last night, and the Restore button is right there. That button can get you back online in minutes. It can also delete this morning’s orders and bring back a version of the site that breaks in a new way.

    Restoring is not an undo. It is a deliberate overwrite, and it works when three things are true. The backup is complete. The route you use still works with the site down. You check the result afterwards. This guide covers all three, using host tools, backup plugins and a manual restore.

    Should you restore at all, or fix what broke?

    If one change broke the site, undo that change first. When an update causes a fatal error, WordPress usually sends a recovery-mode email that names the plugin. If wp-admin is down, connect over SFTP and rename the plugin’s folder, for example plugin-name to plugin-name-off. WordPress deactivates a plugin when it can’t find its files. Our guide to fixing a WordPress fatal error covers this step by step.

    This matters because a full restore replaces everything after the restore point: posts, comments, form entries, users, settings and orders. If someone just overwrote a paragraph, use that post’s revision history. Save the restore for damage that is spread across the site, or for when you can’t find the cause.

    What a usable backup has to contain

    A working restore needs files and a database taken at the same moment. WordPress’s Advanced Administration Handbook on backups treats them as two separate parts:

    • Files: WordPress core, themes, plugins, uploads, wp-config.php and .htaccess.
    • Database: posts, pages, users, settings, menus, orders and plugin data, usually saved as a .sql, .sql.gz or .zip file.

    If you restore only the files, you get the theme back but no content. If you restore only the database, you get pages and text without the theme, plugins or images. That second case comes up a lot in support threads: someone restores a database-only set and wonders why the design is gone. Mixing a database from one day with files from another causes quieter problems, such as missing images or settings pointing at plugins that aren’t there.

    Before you rely on a backup, open the archive and look inside. Check that a database file is there and isn’t 0 KB, and that wp-content includes plugins and themes, not only uploads. A file named “full-backup” proves nothing. Our explainer on what a backup plugin leaves out covers the common gaps.

    What to do before you press Restore

    1. Back up the broken site. Copy the current files and export the current database, and keep them apart from the backup you plan to restore. If the restore goes wrong, this is how you get back to where you started. It may also hold the only copy of today’s orders or uploads.
    2. Check what the host’s snapshot includes. Host tools vary. Kinsta’s documentation says its snapshots include files, the database, redirects, Nginx configuration and MyKinsta settings. It also says restoring an earlier backup can remove domains you added later. Read your host’s page before you confirm.
    3. Export anything newer than the restore point. That means orders, customers, form entries, new users and new posts, plus the media files they use. Plan how you’ll bring each one back, because a CSV export isn’t always ready to import.
    4. Treat subscription stores as a separate problem. WooCommerce’s guide to restoring backups with Subscriptions calls the time between the backup and the restore a “gap period.” Renewals already processed in that window can come back as Pending, and if they run again, customers get charged twice. WooCommerce describes the cleanup as developer-level work.
    5. Keep a copy off the server. Download the backup to your computer or to external storage. A backup kept on the same server is gone if the server or account is lost.
    6. Stop new changes. Turn on maintenance mode, tell editors to stop working, and pause checkout. Orders placed during a database restore create one more thing to sort out afterwards.

    How to restore with a host tool or backup plugin

    On most sites, the host panel is the quickest route. Open the backup list, check that you’re on the right site (agency accounts often list staging and production with similar names), pick the restore point and choose the scope. Pick files and database together unless you’re sure the current files match the older database. A plugin update can change database tables as well as files. Then let the restore finish without making other changes.

    Backup plugins work the same way while wp-admin is up. If the dashboard is down, you can’t reach a restore screen inside it. The usual workaround is to install a fresh copy of WordPress, install the same backup plugin, and point it at your remote storage or upload the archives. For UpdraftPlus, put the archive files in wp-content/updraft, then click Rescan local folder so the plugin finds them.

    If you can, restore into a fresh install or a staging copy rather than over the broken site. Restoring over an existing install can leave stray files and data behind. A staging copy also lets you test before you send live traffic to it.

    How to restore manually with SFTP and phpMyAdmin

    A manual restore needs file access (SFTP or the host’s file manager) and database access (phpMyAdmin, or SSH for the command line). Follow the handbook’s order: files first, then the database.

    1. Restore the files. Move the current web root aside, then upload or extract the backup in its place. Copying clean files over a compromised site leaves the attacker’s extra files where they are. After extracting, check you haven’t ended up with an extra nested folder such as public_html/public_html.
    2. Import the database. An empty database gives the most predictable result. In phpMyAdmin, select the site’s database in the left-hand panel before you open Import. Large files often time out in the browser, so import them from the command line instead.
    3. Match the configuration. In wp-config.php, check DB_NAME, DB_USER, DB_PASSWORD and DB_HOST. Then check that $table_prefix matches the restored table names. If the tables are named wp7x_posts and the config says wp_, WordPress acts as if nothing is installed.
    phpMyAdmin Import tab used for a WordPress database restore
    Selecting your site database in the left sidebar ensures the import tool targets the correct database before uploading your SQL backup. · Source: help.one.com

    The command-line versions, over SSH:

    mysql -u dbuser -p dbname < backup.sql
    # or, with WP-CLI
    wp db import backup.sql

    Why the restore failed, and what the log says

    Read the restore log before you try again. Running the same restore over and over seldom changes the result. UpdraftPlus’s documentation on restorations that don’t complete matches the common errors to their causes:

    Message in the logCauseWhat to do
    PCLZIP_ERR_BAD_FORMAT (-10)Corrupt or incomplete archiveDownload it again straight from storage, check it unzips, upload it and rescan. When you delete the bad local copy, leave the option to also delete it from remote storage unticked.
    “Allowed memory size … exhausted”PHP memory limitRaise WP_MEMORY_LIMIT. If it already equals the server’s limit, ask the host.
    “Disk quota exceeded”No free spaceDelete old backups or files, then retry.
    “Could not move the files into place”File permissionsAsk the host to fix ownership. Don’t set folders to 777.

    On large sites, restore one part at a time: database, then plugins, themes and uploads separately. Shared hosts often run out of resources on a single upload folder over 1 GB. If the plugin offers to continue an interrupted restore, use that option, then check the result. A half-finished restore can leave parts of the site from different dates.

    Old backups bring their own problem. WordPress’s upgrading handbook warns that rolling back can fail when an update changed the database structure. A theme from 2018 on today’s PHP can throw fatal errors even after a clean restore. To get it running, temporarily match the PHP version, or rename the incompatible plugin or theme folder.

    The restore finished but the site still looks wrong

    “Restore complete” means the tool finished. It doesn’t mean the site works. Check these in order:

    • Empty site or install screen: table prefix or database name mismatch in wp-config.php.
    • Old pages showing: clear the page cache, any server cache (such as LiteSpeed) and the CDN.
    • 404s on every page except the home page: go to Settings > Permalinks and click Save Changes without changing anything.
    • Broken images: wp-content/uploads didn’t transfer, or the server can’t read it.
    • Wrong content, or another site’s content: you restored the wrong set, or mixed files and a database from different backups.

    If you restored to a different domain, don’t run a find-and-replace on the SQL file. WordPress’s migration handbook warns that a plain replace breaks serialized data, the format themes and widgets use to store settings. Use a tool that understands it, and do a dry run first:

    wp search-replace 'https://old.example.com' 'https://new.example.com' --dry-run
    WordPress Permalinks settings screen after restoring a site from backup
    Clicking Save Changes on the WordPress permalink settings screen flushes rewrite rules to quickly resolve lingering 404 errors after a restore. · Source: kinsta.com

    How to check the restored site before reopening

    Run the structural checks first: wp db check for table errors and wp core verify-checksums for changed core files. Then test what the business depends on:

    • Log in to wp-admin as an existing user.
    • Load the home page and your main landing pages. Check the text, images and menus.
    • Submit a form and confirm the email arrives, not just the thank-you message.
    • Open a recent upload in the Media Library.
    • On a store, place a test order with sandbox payment details. Check recent orders, subscriptions and the scheduled actions under Tools > Scheduled Actions.

    If the restore followed a hack, the backup may already be infected, and the hole the attacker used is still open. Confirm the backup is from before the compromise. Then go through the admin users, plugins and scheduled tasks, update everything and change passwords. Our WordPress security issues guide covers the containment steps.

    When to stop and get help

    Stop when you’ve tried twice with the same error, when the log says the database is invalid, when subscription renewals fall in the gap period, or when you can’t tell whether the backup is clean. At that point, more attempts add risk without adding information. Ask your host for a newer copy, or ask the previous developer, before anyone quotes for a rebuild. Pages that look “missing” are sometimes sitting in a backup someone else holds.

    If you’d rather hand over the diagnosis, SiteSelf works on the live site through chat, using hosting access for file and database work. Before it changes anything, it says what it’s about to change and whether that can be undone, and afterwards it reports what it checked. Here is how SiteSelf handles broken sites.

    Frequently asked questions

    How long does a WordPress restore take?

    WP Engine’s support documentation says an automated restore takes “a few minutes to several hours,” depending on site size and file count. Small sites on a healthy host often finish in minutes. Large upload folders, big SQL files and repeated timeouts are what turn a restore into a day’s work.

    I only have the files, not the database. Can I recover the site?

    Partly. The files give you the theme, plugins and images, but not posts, pages, users or settings, because those live in the database. Ask your host whether they kept database backups before you start rebuilding content by hand.

    Should I restore a backup that is years old?

    Only after asking your host or previous developer for something newer. An old backup loses every change since it was taken, and its plugins and theme are more likely to break on current PHP and WordPress versions. If it’s all you have, restore it to staging first.

    Is restoring from backup enough to fix a hacked site?

    No. The backup may already contain the malware, and the vulnerability the attacker used is still there after the restore. Use a backup from before the compromise, then check users, plugins and scheduled tasks, and close the hole.

    Can I restore only part of a site?

    Many host tools and plugins let you restore just the database, just the plugins or just the uploads. That keeps newer data you’d otherwise lose. The risk is a mismatch, such as theme files that expect database settings from a different date, so check the site carefully afterwards.

  • Why WordPress is not loading and how to fix it

    Key takeaways

    • Test from a phone on mobile data before you touch the site. If the site loads there, the problem is your browser or network, and editing WordPress won’t help.
    • A blank page or ‘There has been a critical error’ usually means a PHP fatal error from a plugin, theme or custom code. Since version 5.2, WordPress’s Recovery Mode can email the administrator a login link that pauses the faulty component.
    • Renaming .htaccess, disabling plugins and rolling back an update are diagnostic tests. Leaving any of them in place can switch off features or reopen a security hole.
    • With Cloudflare’s Flexible SSL mode plus an HTTPS redirect on the origin, you get ERR_TOO_MANY_REDIRECTS. Cloudflare’s fix is Full or Full (strict) mode, or removing the duplicate redirect.
    • WooCommerce warns that the Health Check troubleshooting mode doesn’t put payment gateways into sandbox, so a test order can take a real payment.

    Say your homepage is white and a customer can’t place an order, but the login screen still opens. That detail matters. It means the server answers requests and at least part of WordPress runs, so turning off every plugin would be the wrong first move.

    “Not loading” covers at least eight different failures: a blank page, a critical error, a database error, a 5xx code, a stuck maintenance screen, a redirect loop, a domain that won’t resolve, and a checkout that spins forever. Each one lives in a different layer. Find the layer first and the fix is usually short.

    Is the site down for everyone or just you?

    Find that out before anything else. Open the site in a private window, then on your phone with Wi-Fi switched off. If it loads on mobile data, the fault is your browser, an extension, your router or your DNS resolver, not the site. Our guide to fixing DNS_PROBE_FINISHED_BAD_CONFIG errors covers that case.

    If the site fails on every network, check your host’s status page before you edit anything. On Reddit’s r/webdev, one owner was sure a new forms plugin had broken their site. It turned out to be a host outage. Changing a working site to “fix” someone else’s outage is how one incident becomes two.

    Clearing your browser cache only fixes your own browser. It does nothing for a server, database or DNS fault.

    Which layer does your symptom point to?

    Write down the exact message, the URL and the time it started. Then find it in this table.

    What you seeLikely layerFirst checkWho usually fixes it
    Blank white page, or “There has been a critical error on this website”PHP fatal error in a plugin, theme or custom codeRecovery Mode email, then the debug logYou or a developer
    500 Internal Server Error.htaccess, a plugin, the theme or memoryThe host’s error logYou, a developer or the host
    “Error establishing a database connection”Wrong credentials, or the database server is down or fullCompare wp-config.php with your host’s valuesUsually the host
    “Briefly unavailable for scheduled maintenance”An update left a .maintenance file behindIs the update still running?You
    ERR_TOO_MANY_REDIRECTSTwo redirect rules or the SSL mode disagreeSite URLs, .htaccess, CDN SSL modeYou or whoever controls the CDN
    502, 503, 504 or a timeoutHost capacity, resource limits or the databaseHost status page and logsThe host first
    “Site can’t be reached” or NXDOMAINDNS or nameserversDomain records at the registrarWhoever controls DNS
    Store loads, but checkout spinsJavaScript, caching or CDN optimisationBrowser Console and Network tabsYou or a developer

    Before you edit files, take a backup or a hosting snapshot, and include the broken state. You should know how to restore it without the WordPress dashboard.

    Why a blank page usually points at a plugin or theme

    A white screen or the “critical error” message almost always means PHP hit a fatal error. Practitioners most often find that a plugin, a theme or custom code caused it, usually right after an update or a PHP version change. That pattern comes from repeated reports, not from any measured failure rate.

    WordPress not loading with the critical error message in a browser
    The default critical error message indicates that a fatal PHP issue has abruptly halted WordPress execution, most commonly due to conflicting plugin or theme code. · Source: www.wpbeginner.com

    Start with the Recovery Mode email. WordPress added Recovery Mode in version 5.2. When a fatal error happens, it can email the administrator a login link. That link pauses the faulty plugin or theme for your session only. Visitors still get the error. Use the session to find out which component the email names, then deactivate or update it.

    The email doesn’t always arrive. WordPress’s documentation says Recovery Mode triggers only on fatal errors during normal page loads, not during cron or background tasks. Check spam. If nothing is there, use file access instead.

    Without the dashboard, connect over SFTP or your host’s file manager. Rename the folder of the suspect plugin inside wp-content/plugins. If you can’t tell which plugin is at fault, rename the whole plugins folder. If the theme is the problem, rename the active theme’s folder and WordPress falls back to a default theme, provided one is installed.

    Read the log before guessing. In wp-config.php, edit any existing debug lines rather than adding duplicates. Set them above the “stop editing” comment:

    define( 'WP_DEBUG', true );
    define( 'WP_DEBUG_LOG', true );
    define( 'WP_DEBUG_DISPLAY', false );

    Reload the failing page, then open wp-content/debug.log. Find the first fatal error with a matching timestamp. Its file path names the culprit. Later warnings are often side effects. WordPress’s debugging handbook covers these constants. Never show errors to visitors, and turn debugging off when you’re done, because the log can hold sensitive paths and data. Our guide to reading a WordPress fatal error goes through common messages one by one.

    What a 500 error usually means

    Check the host’s error log first. A 500 hides its cause from the browser, but the log usually names it. WordPress.org’s troubleshooting FAQ names a corrupted .htaccess as a likely cause. To test it, rename the file to .htaccess_old and reload the site. If the site comes back, go to Settings > Permalinks and click Save to create a clean file.

    WordPress Permalinks settings screen used to regenerate .htaccess
    Clicking the Save Changes button on the Permalink Settings screen immediately flushes and regenerates a clean set of WordPress rewrite rules. · Source: kinsta.com

    Keep the old file until you’ve compared the two. It may contain custom rules you still need, such as redirects or security directives. Security plugins sometimes leave rules behind that point to files that no longer exist, and those can cause a 500 on their own. If .htaccess wasn’t the cause, test plugins and the theme next. Our full guide to fixing a server error 500 covers the rest.

    Check database credentials before you change them

    “Error establishing a database connection” has two families of cause. The first is wrong values in wp-config.php: DB_NAME, DB_USER, DB_PASSWORD or DB_HOST. The second is on the host’s side: the database server is down, over its quota, or out of connections.

    Compare each value with what your hosting panel shows. Don’t assume DB_HOST is localhost, because many hosts use a separate database server. If every value matches, contact the host. Guessing new credentials doesn’t fix a stopped database server, and it adds a second fault you’ll have to undo later.

    Stuck on “Briefly unavailable for scheduled maintenance”

    WordPress creates a .maintenance file in the site root during updates and deletes it when they finish. If an update is interrupted, the file stays and the site keeps showing the notice. First make sure no update is still running. Then delete the file (turn on “show hidden files” in your file manager to see it) and rerun the update that failed. Deleting the file only removes the notice. An interrupted update can leave a plugin half-installed, so test that plugin too. Why WordPress updating failed covers that half.

    Redirect loops come from two rules that disagree

    ERR_TOO_MANY_REDIRECTS is a configuration conflict, not a crash. First check that the WordPress Address and Site Address (Settings > General, or WP_HOME and WP_SITEURL in wp-config.php) both use the scheme you intend. Then look for competing redirects in .htaccess, in an SSL plugin and at your CDN.

    Here’s a common version. Cloudflare is set to Flexible SSL, so it talks to your server over plain HTTP. Your server or WordPress redirects HTTP to HTTPS. Each side keeps sending the visitor back to the other. Cloudflare’s documentation recommends Full or Full (strict) mode when your server has a valid certificate, or removing the conflicting redirect.

    Cloudflare SSL mode setting that causes WordPress redirect loops
    Choosing Flexible encryption causes Cloudflare to reach the origin over plain HTTP, triggering an endless redirect loop when the origin server enforces HTTPS. · Source: community.cloudflare.com

    To see the loop instead of guessing, run curl -sIL https://example.com. It prints every Location header in the chain. Adding another force-HTTPS rule makes the loop worse, and clearing cookies won’t fix a loop that starts on the server.

    502, 503, 504 and timeouts belong to the host first

    These codes usually mean the server ran out of capacity or a timeout cut the request off. Note the code and the time, check the host’s status page, and send the host the log lines. Let them recommend memory or execution limits. Raising limits blindly can hide the problem or make it worse. Our guide to fixing a WordPress 503 error explains why.

    Moving to a bigger server can hide the cause too. On r/woocommerce, a store with about 50 plugins timed out for roughly two months. Disabling every plugin brought it back, but the timeouts returned on reactivation. Commenters warned that a dedicated server would only mask a slow plugin or query. Query Monitor, a plugin that shows which components and database queries are slow, is a better next step than a bigger plan.

    When the domain doesn’t resolve at all

    If the browser says the site can’t be reached, or a DNS lookup returns NXDOMAIN, the request never gets to WordPress. Check the A or CNAME records and the nameservers at your registrar or DNS provider against the values your host gives you. After a nameserver change, check that the old records were copied to the new provider. Then wait for the change to spread. Practitioners report waits of a few hours, and occasionally up to two or three days.

    The store loads, but the checkout spins

    On WooCommerce, start with the basics in WooCommerce’s pages-not-displaying guide. Check that the Cart, Checkout and My Account pages exist and are assigned under WooCommerce settings. Save Settings > Permalinks without changing anything. Make sure cart and checkout are excluded from every cache.

    For a spinning checkout, open the browser’s Console and Network tabs and find the first request that fails. Common blockers are JavaScript errors, optimisation plugins, a content security policy, consent tools, ad blockers and CDN features such as Cloudflare’s Rocket Loader and minification. A theme that leaves out wp_head() or wp_footer() can also stop payment scripts from loading.

    One warning before you test: WooCommerce’s Health Check guide says troubleshooting mode doesn’t put your payment gateway into sandbox mode. A test order can take a real payment.

    A test is not a fix

    Renaming .htaccess, disabling all plugins, letting Recovery Mode pause something and rolling back an update are all ways to find the cause. Each one also has a cost. With every plugin off, your forms, checkout and security plugin are off too. A rollback can bring back a vulnerability the update closed. Once you’ve found the culprit, turn everything else back on one at a time and replace or update the component that failed.

    Then confirm the site actually works, not just that a page appears. Log out and load the page that failed. Submit a form. On a store, check that an order record and payment status were created, not just that the confirmation screen showed. Purge the plugin, host and CDN caches so visitors stop seeing the broken copy.

    When to stop and get help

    Call your host if the database server is down, if 5xx errors keep coming back, if your account is suspended, or if you can’t reach a backup. Call whoever controls DNS or your CDN when the fault is in their system. Get a developer in these situations:

    • You have no file access, or you’re not comfortable editing wp-config.php.
    • The error comes back as soon as you reactivate plugins.
    • The log points to custom code or a PHP version mismatch.
    • Checkout is broken and money is at stake.

    Treat unfamiliar admin accounts, redirects to other sites or file changes nobody made as a security incident, not a loading problem.

    When you hand it over, include the failing URL, the timestamps, recent changes, the log excerpt and the tests you’ve already run. Remove passwords and customer data first. If you’d rather describe the symptom in chat and have the logs read and the fix applied for you, SiteSelf’s agent does that work on your site using hosting (SSH) access and reports what it changed and checked: see getting your WordPress site working again.

    Frequently asked questions

    Should I disable all plugins at once or one at a time?

    Do both, in that order. Disabling all of them tells you quickly whether plugins are involved at all. Reactivating them one by one tells you which plugin it is. On a live store, the Health Check & Troubleshooting plugin’s troubleshooting mode lets you run the test in your own session while visitors still see the normal site.

    The front end works but I can’t get into wp-admin. Is that the same problem?

    Usually not. A working front end with a broken login points to a login, cookie, security plugin or redirect issue, not a site-wide failure. Our guide to fixing WordPress login problems sorts those by symptom.

    Could a plugin update have caused this?

    Yes, and it’s the pattern practitioners report most often. Check the Recovery Mode email or the debug log for the plugin it names. Roll that plugin back only as a temporary measure, because the update may have fixed a security flaw.

    Does updating WordPress fix a PHP version problem?

    Not by itself. The PHP version is set by your host, and your plugins and theme need to support it. You can see the current version under Tools > Site Health > Info > Server. If the log shows errors about deprecated or removed functions, update the component named in the error or ask the host which PHP versions it offers.

    Is a slow site the same as a site that’s not loading?

    No. A site that loads slowly needs speed work: caching, fewer heavy plugins, better hosting. A site that returns an error needs repair. Mixing the two up leads to buying a bigger server for a broken plugin, or chasing errors that are really timeouts.

  • Why WordPress updating failed and how to fix it

    Key takeaways

    • A red ‘Updating failed’ notice in the editor is a failed save request, usually blocked by a host security rule or broken by plugin output. Failed software updates come from file ownership, update-server access, disk space, timeouts or conflicts.
    • Never fix ‘could not copy files’ with chmod 777. WordPress’s file-permissions guide says to keep permissions as restricted as possible, and the usual cause is ownership, which only the host can correct.
    • Delete .maintenance only after the update has clearly stopped. Removing it clears the message. It does not finish the update, so check Dashboard > Updates afterwards.
    • If an update breaks a store, roll back the one plugin before you restore a full backup. A full restore can wipe out orders placed since the backup was taken.
    • ‘Update successful’ only means the installer finished. Check the installed version, then place a test order and send a test form.

    WordPress uses the words “updating failed” for two failures that have nothing in common. One appears in the block editor when you click Update on a post or page. The other appears on Dashboard > Updates or the Plugins screen when WordPress could not install new software. The causes are different, the fixes are different, and a fix for one can damage the other.

    So start by working out which one you are looking at. Then read the full error message. “Updating failed” tells you something went wrong. The rest of the message tells you which part of the site failed.

    Which “updating failed” are you looking at?

    Look at where the message appeared and how it is worded. The table below covers the common versions.

    Where you saw itWhat it saysWhat failed
    Block editor, after Update, Publish or Save draft“Updating failed. The response is not a valid JSON response.” or “You are probably offline.”The save request to the REST API
    Dashboard > Updates or Plugins“Download failed”, “Could not create directory”, “Could not copy file”, or a prompt for FTP credentialsThe software update, before or while files were written
    The public site“Briefly unavailable for scheduled maintenance. Check back in a minute.”An update that stopped partway
    Admin email inbox“An automated WordPress update has failed to complete”A background core update that was interrupted
    The site after an “Update successful” noticeA critical error, a white screen, or a checkout that does nothingThe new code ran and something conflicted with it

    If it was the editor, the short version is below, and our guide to a WordPress page not updating goes through every cause. Everything after that section is about software updates.

    If the editor said it, look at the failed request first

    When you click Update, the block editor sends your post to the REST API and expects JSON back. “Updating failed” means it got something else: a firewall block page, a redirect, a login screen, a PHP warning, or stray output in front of the JSON. Until you see what actually came back, you are guessing.

    Open your browser’s developer tools, go to the Network tab and click Update again. Then click the failed request and check three things: the status code, the Content-Type and the start of the response body.

    • 403 Forbidden. A server security rule (ModSecurity, a web application firewall or a CDN) blocked the save. This is the cause people confirm most often in support threads. Ask your host to check the security log and whitelist that one rule. Don’t ask them to switch security off.
    • HTML or a PHP warning in the body. A plugin, theme or snippet is printing output. Reported cases include an incomplete AIOSEO 5.0 database upgrade and a Google Ads tag pasted into a Custom HTML block.
    • A redirect (301 or 302). Check that the WordPress Address and Site Address under Settings > General match, including https and www.

    Reload the post in a new tab before you retype anything. Also, don’t change your permalink format to see if it helps. In one WordPress.org thread, a site owner switched to the default format, broke every link shared on social media, and later found the real cause was a ModSecurity rule. If you want to try it, re-save the existing structure without changing it.

    Why plugin, theme and core updates fail

    For software updates, WordPress’s own documentation and support threads keep pointing to the same few causes. The order below follows how often they come up in reports. Nobody has measured it, so treat it as a rough order. Two places help you sort them fast: Tools > Site Health, which flags problems such as the site being unable to reach WordPress.org, and your host’s error log.

    WordPress Site Health status screen used to diagnose a failed update
    The Site Health Status screen alerts administrators to outdated software components and configuration issues that can prevent routine updates from succeeding. · Source: www.abrightclearweb.com

    “Could not create directory” or an FTP prompt usually means ownership

    WordPress writes update files as the web server’s user. If that user doesn’t own wp-content/plugins or wp-content/upgrade, the write fails, or WordPress asks you for FTP details. Ownership is which server user owns a file. Permissions control what that user can do with it. Changing permissions doesn’t fix the wrong owner.

    That’s why chmod 777 is the wrong fix. WordPress’s file permissions guide says to keep permissions as restricted as possible and warns about 777 specifically. On shared hosting, send the host the exact error and the folder it names, and ask them to correct ownership for that folder.

    “Download failed” means the site could not fetch the package

    The site either couldn’t reach WordPress.org or the vendor’s update server, or the server refused it. If Site Health says it cannot reach WordPress.org, the host needs to look at outbound connections. For paid plugins, check the licence before anything else. It may have expired, or it may be registered to an old domain or to the agency that built the site.

    For WooCommerce Marketplace extensions, WooCommerce’s subscription troubleshooting page covers the usual causes: an expired subscription, a store disconnected from WooCommerce.com, or an outdated WooCommerce.com Update Manager. Changing files won’t fix any of these.

    A full disk blocks updates that look like they would fit

    The updater needs working space as well as room for the finished plugin. It unpacks the package into wp-content/upgrade and may keep a temporary backup of the old version while it works. Check your quota in the hosting panel. To free space, delete old backups stored on the server, not files in wp-content you don’t recognise.

    Timeouts and memory limits leave a named line in the log

    Look in the PHP error log for “Allowed memory size exhausted” or “Maximum execution time exceeded”. If one of those lines matches the time of the update, ask the host to raise that specific limit. If it isn’t in the log, raising limits only hides the real cause.

    Conflicts and buggy releases

    Sometimes the update installs fine and the new code is the problem. A 2023 study by Lin, Sayagh and Hassan found that 497 of the 500 most frequently released WordPress.org plugins had shipped at least one urgent fix within 24 hours of an earlier release. That measures how often releases need patching, not how often updates fail on real sites. It’s still a good reason to read the changelog, and to wait a day before installing a major release on a store.

    To find a conflict without taking the site down, use Troubleshooting Mode in the Health Check & Troubleshooting plugin. The WordPress support handbook explains that it disables plugins and switches the theme for your logged-in session only, so visitors see the normal site. WooCommerce’s conflict-testing guide recommends the same approach, or a staging copy, rather than switching everything off on a live store.

    How to get out of “Briefly unavailable for scheduled maintenance”

    WordPress creates a file called .maintenance in the site root while an update runs and deletes it when the update finishes. If the update stopped partway, the file stays and visitors keep seeing the message. Fix it in this order:

    1. Wait a few minutes. A slow update may still be running, and deleting the file mid-update can leave you with half the files from each version.
    2. Once nothing has changed for a while, connect over SFTP or your host’s file manager. Turn on hidden files, because the name starts with a dot.
    3. Delete .maintenance from the folder that holds wp-config.php.
    4. Go to Dashboard > Updates and see what is still listed. Update the unfinished item on its own, one item at a time.
    5. Check the installed version on the Plugins screen or under Dashboard > Updates.

    The WordPress troubleshooting FAQ confirms that removing the file clears the message, and the same applies to “An automated WordPress update has failed to complete”. Clearing the message doesn’t prove the update finished. Step 4 is how you find out.

    The update worked and the site broke

    If the site shows “There has been a critical error” after an update, the new code is failing when it runs. WordPress usually emails the admin address with a recovery mode link that pauses the failing plugin or theme so you can log in. Our guide to fixing a WordPress fatal error shows how to read the file path in the error, which tells you which component failed.

    Roll back that one component before you consider restoring a full backup. On a WooCommerce store, a full restore brings back yesterday’s database, which means losing every order placed since. Install the previous version from the vendor’s archive or a rollback plugin, then test the page that broke.

    If wp-admin is locked, rename the plugin’s folder in wp-content/plugins (for example to plugin-name-off) and WordPress will deactivate it. If you don’t know which plugin it is, our guide to plugins that stop working walks through isolating it.

    How to update manually when the dashboard keeps failing

    A manual update gets around the updater itself. It does not get around wrong ownership, a full disk or a blocked network, so fix those first.

    • Plugins. Download the current ZIP from WordPress.org or the vendor. Rename the old folder over SFTP so you can go back to it, then upload the ZIP under Plugins > Add New Plugin > Upload Plugin. Deactivate the plugin if you need to, but don’t delete or uninstall it. Uninstalling can delete its settings.
    • Core. Follow WordPress.org’s manual update steps. Replace the core files, keep wp-config.php, and don’t delete the existing wp-content folder. That folder holds your uploads, themes and plugins.
    • Themes. The same idea applies. Our guide to updating a theme without losing work covers child themes and licence errors.

    What “Update successful” does not tell you

    The notice means the installer finished. It doesn’t mean checkout works, forms send, or the version you wanted actually installed. Even update reports can be wrong: Easy Updates Manager’s changelog records a November 2024 fix for emails that marked some failed updates as “success”.

    WordPress updating failed error shown under a plugin on the Plugins screen
    An inline error notification beneath the plugin row highlights the failure message before another update attempt is made. · Source: wpdatatables.com

    After every update, check the installed version, log out and back in, send a test form and look at a few key pages. On a store, WooCommerce’s update guide asks for more: a backup first, staging where you can, letting the update finish without refreshing, running any database update WooCommerce prompts for, and then testing products, cart, checkout, payment, shipping, tax and emails. Before any of that, make sure your backup can actually be restored, because a backup job that ran isn’t proof of that.

    If you’d rather hand the update cycle off, SiteSelf runs plugin updates on request using hosting access, fetches the changed pages afterwards and reports what it updated and what it checked; the page on plugin updates and maintenance explains how that works.

    When to stop and get help

    Contact your host when the save request returns a 403, when the error names a folder WordPress can’t write to, when the disk is full, or when the log shows a PHP limit. These are server settings, and on shared hosting only the host can change them. Contact the plugin vendor when a paid update won’t download and the licence looks valid. Bring a developer in when a fatal error points at custom code, or when checkout is down and a single rollback hasn’t brought it back.

    Whoever you contact, send evidence: the exact message, the time it happened, the plugin and version, the status code or log line, and what you’ve already tried. A vague “updating failed” ticket gets sent back to the forums. A ticket with the log line in it gets fixed.

    Frequently asked questions

    Did my post save even though the editor said updating failed?

    Sometimes. The error tells you the editor didn’t get the reply it expected. That doesn’t always mean nothing was written. Open the post in a new tab or check its revisions before you retype anything.

    Should I re-save my permalinks?

    Re-saving the structure you already have under Settings > Permalinks is low risk, and it regenerates the rewrite rules. Changing the format is a different matter. Every existing URL changes, so links shared elsewhere start returning 404s.

    Is it safe to set folders to 777 so updates work?

    No. It lets anyone on the server write to those files, and it usually leaves the real cause, wrong ownership, untouched. Ask the host to correct ownership on the specific folder named in the error.

    Can I disable all plugins to find the problem on a live store?

    You can, but customers will see a broken store while you test. Use Troubleshooting Mode in the Health Check plugin, which changes plugins only for your session, or test on a staging copy.

    Why do automatic updates fail when manual updates work?

    Background updates depend on scheduled tasks and on the site sending requests to itself. A plugin conflict or a host firewall, DNS, SSL or password-protection rule can block those requests. Site Health reports loopback and scheduled-event problems, so start there.

    Should I restore a full backup after a bad update?

    Only after a targeted rollback has failed. A full restore replaces the database too, so on a store you lose any orders and customer accounts created since the backup was taken.

  • How to add password protection to a website

    Key takeaways

    • WordPress core protects single posts and pages only. The password is capped at 20 characters, the title stays visible, and each browser remembers only one post password at a time.
    • For a whole-site lock, the free tier of the Password Protected plugin (300,000+ active installs) works without host access. Your host’s Basic Auth tool is often the cleaner choice for staging, because the prompt appears before WordPress loads.
    • Page and plugin gates protect what WordPress renders, not uploads opened at their direct URL. Open a PDF or image link in a private window to check.
    • When the correct password just reloads the form, the cause is usually caching. Exclude the page or the wp-postpass_ cookie from the cache, purge every cache layer, and test again in a private window.
    • Server passwords can stop wp-cron from running, and a password-protected WooCommerce product still shows in the shop unless you hide it with Catalog visibility.

    Where you add a password to a WordPress site depends on what you want to hide. The editor’s Visibility setting protects one post or page. Locking the whole site takes a plugin or a password tool from your host. Locking uploaded files takes server-level protection. Most “it doesn’t work” reports come from using a tool on the wrong scope, or from a cache serving the page without its gate.

    Use this guide to choose a method and set it up. If you only need one page, our guide to password protecting a single WordPress page goes into more detail on that case.

    Which method fits what you are protecting?

    Start with the scope. The table below matches each common need to the method that covers it, along with the limit people most often miss.

    You want to protectUseWatch for
    One post or pageWordPress Visibility settingTitle stays visible, 20-character limit
    The whole site, without host accessA sitewide pluginCaching, uploads stay public
    A staging site or pre-launch buildYour host’s password tool (HTTP Basic Auth)CDN conflicts, wp-cron stops
    A store or selected productsWooCommerce product settings or a WooCommerce extensionProtected products still listed
    PDFs, images, member documentsServer or directory protectionPage passwords do not cover them
    Access per person, revocableUser accounts or a membership pluginA shared password can’t tell people apart

    How to password-protect one page or post

    This is built into WordPress and needs no plugin. WordPress.org’s documentation describes it as a per-item setting, not a site-wide one.

    1. Open the page or post in the editor.
    2. In the sidebar, click the current value next to Visibility (usually “Public”).
    3. Choose Password protected and type the password.
    4. Click Publish or Update.
    5. Open the URL in a private window. You should see a password form, not the content.
    WordPress editor Visibility panel with Password protected selected to add password protection to a page
    Selecting Password protected within the status and visibility panel reveals a password field to secure individual posts or pages directly in the block editor. · Source: www.wpzoom.com

    Know the limits before you share the link. WordPress.org’s “Protect posts with password” page says the password can be at most 20 characters, the title stays visible, and the browser remembers access through a cookie. That cookie tracks only one post password at a time, so a visitor moving between pages with different passwords has to re-enter the earlier one. Administrators, Editors and the post’s Author can see the content without the password.

    “Private” is a different setting. A private page is visible only to logged-in Administrators and Editors. Use it for internal notes, not for sharing with a client.

    The visible title matters for previews. A protected draft sits on the live site, titled and listed. For client reviews, a staging copy behind a host password usually works better.

    To remove protection, set Visibility back to Public and click Update.

    How to lock the whole site with a plugin

    Whole-site privacy isn’t part of WordPress core, as WordPress.org’s installation FAQ notes, so you need a plugin or a host tool. A plugin is the easier route when you have wp-admin access but no hosting panel.

    The most widely installed option is Password Protected (slug password-protected). It has more than 300,000 active installs, and its WordPress.org listing says protecting the complete site is free. Several plugins have similar names, so check the slug and author before you install. Our guide to installing a WordPress plugin safely covers that check, plus taking a backup first.

    1. Take a backup and confirm you can reach the site’s files over SFTP or your host’s file manager.
    2. Install and activate the plugin, then open its settings.
    3. Turn on protection, set a password, and decide whether logged-in users and administrators skip the prompt.
    4. Save, then test the homepage and a deep link in a private window.

    If the prompt locks you out, rename the plugin’s folder in wp-content/plugins over SFTP. WordPress deactivates a plugin it can’t find, and the gate goes with it.

    Selective rules, such as a public homepage with everything else locked, are often in paid tiers. Check the free tier covers your rule before you build around it. Keep these plugins updated like any other code that controls access.

    How to lock the whole site at the host

    HTTP Basic Auth is a browser prompt the web server shows before WordPress loads. It covers the login page, every URL and the uploads folder at once. That makes it the usual choice for staging sites and pre-launch builds.

    Most hosts offer it as a panel tool. In cPanel it is Directory Privacy: select the site’s root folder, turn on password protection, name the area, and create a username and password. On Kinsta it is under MyKinsta, Sites, your site, Tools, Password protection.

    On an Apache server without a panel tool, create a password file outside the public folder and add four lines to .htaccess. Back up the file first, and put the block above WordPress’s rewrite rules without touching them.

    htpasswd -c /home/youruser/.htpasswd clientname
    
    AuthType Basic
    AuthName "Client preview"
    AuthUserFile /home/youruser/.htpasswd
    Require valid-user

    Host-specific behaviour is where this goes wrong:

    • Nginx doesn’t read .htaccess. Pasting these lines on an Nginx host does nothing. Use the host’s own tool.
    • Kinsta’s documentation says its htpasswd tool doesn’t work with its CDN and edge caching, which you must disable first. Cancelling the prompt returns “401 Authorization Required”.
    • Protecting a folder inside a folder that is already protected can make the prompt appear over and over. Protect one level only.
    • Malformed rules can produce a 500 error or a blank page. Restore your backup of .htaccess and try again.

    Server passwords also block requests the site makes to itself. WooCommerce’s Product Search FAQ notes that the server rejects the wp-cron request, so scheduled tasks quietly stop running. Scheduled posts, imports and emails can fail on a protected staging site, as our article on autoblogging plugins and missed schedules describes. Webhooks and payment callbacks can fail the same way.

    How to protect a WooCommerce store or products

    A product’s own password gates its page, not its listing. WooCommerce’s product editor documentation says a password-protected product can still appear in the catalog. To take it out of the shop and search results, set Catalog visibility to Hidden in the product’s Publish box.

    For a private store or early-access sale, WooCommerce’s Password Protected extension can lock the whole site, the store including cart and checkout, or selected products, categories and pages. Its documentation lists a setting to hide protected products completely on shop and archive pages.

    Category locks can break automation. One store owner on r/woocommerce found a category-protection plugin blocked CSV imports and a supplier’s inventory feed. They kept the products open and added a passcode field at checkout instead.

    Why your uploaded files are probably still public

    A page password protects the page WordPress renders. The PDF linked from that page is a static file the server sends without asking WordPress. The Password Protected plugin’s GitHub documentation says plainly that it doesn’t protect uploaded images or files at their direct URLs.

    Copy a file link from the protected page and open it in a private window. If it loads, the file is public. For anything sensitive, such as a member list with addresses, protect the uploads folder at the server or use a tool built to protect files.

    How to test that the gate actually works

    A browser that has already entered the password hides every failure. Test like a stranger:

    • Open the protected URL in a private window and confirm the form or prompt appears.
    • Open a deep link and, for whole-site locks, /wp-login.php.
    • Open a file URL from protected content.
    • Purge the cache, then load the page on a phone using mobile data.
    • Check any staging or preview domain separately.

    If anything loads without a prompt, the method doesn’t cover that path. Change the method rather than adjusting the password.

    What to do when the password just reloads the form

    Caching is the first suspect, in both directions. A cached copy can show content with no prompt, or ignore the cookie WordPress sets after a correct password, so the form reloads. The Password Protected plugin’s documentation says caches must not serve cached pages when its cookie is set.

    1. Exclude the protected URL from your caching plugin, host cache and CDN. For core page passwords, exclude requests carrying the wp-postpass_ cookie.
    2. Purge every layer. An exclusion without a purge can leave a stale public copy in place.
    3. Retest in a private window.

    In a long WordPress.org support thread on this symptom, users reported fixing it by bypassing the URL in cPanel’s Cache Manager, whitelisting wp-postpass* in CloudFront, and adding a URI exclusion in LiteSpeed Cache after hours of trying. Excluding a large gallery page from cache can slow it down, so exclude only what you protect.

    WordPress password protected page form shown to logged-out visitors
    When this standard password prompt continuously reloads despite entering the correct credentials, misconfigured server or plugin caching is almost always the culprit. · Source: www.seedprod.com

    If caching isn’t the cause, switch to a default theme to rule out the theme or page builder, then deactivate plugins one at a time. A 403 on /wp-login.php?action=postpass usually means a login-hiding plugin is blocking the URL that the password form submits to. Our guide to fixing WordPress login problems covers those plugins. If you’d rather hand off the setup and testing, SiteSelf can make the change on your site when you ask in chat. It uses the connector plugin for page and plugin settings and hosting access for server rules, then fetches the page and reports what it found.

    When a shared password is the wrong tool

    A shared password can’t tell people apart. You can’t remove one person without changing the password for everyone, and you can’t see who used it. That is fine for a two-week client preview. It isn’t enough for wholesale pricing, member records or anything you would need to revoke from one person.

    When access varies by person, give people their own accounts with the lowest role that works, usually Subscriber, or use a membership plugin. It’s more setup, but you get control over each person’s access.

    A password is also not a search setting. Google’s robots.txt guide says robots.txt isn’t a way to keep a page out of Google. For a page that should stay out of search, use noindex or password protection.

    Frequently asked questions

    Can I password-protect a WordPress site without a plugin?

    Yes, at the host. Use cPanel’s Directory Privacy, your host’s own password tool, or .htaccess and .htpasswd on Apache. The prompt appears before WordPress loads and covers uploads too. Check that scheduled tasks still run afterwards.

    Will a password-protected page show up in Google?

    Don’t assume it is hidden. The title stays visible on the site, and files attached to the page can still be indexed if their URLs are public. Google recommends password protection or noindex to keep a page out of search, not robots.txt.

    Why does a visitor have to re-enter the password on another page?

    WordPress remembers only one post password per browser. If two pages use different passwords, opening the second replaces the first. Use the same password across a set of pages that belong together.

    How do I make a custom password form accessible?

    Give the field a visible label, add autocomplete="current-password", and allow paste. WCAG 2.2’s accessible authentication criterion treats blocking paste or autofill as a failure, because people rely on password managers.

    I changed the password and the new one is rejected. Why?

    Usually a stale cache or an old cookie. Purge every cache layer, clear the site’s cookies or use a private window, and try again. If it still fails, check for a login-hiding plugin blocking the form’s submit URL.

  • How a 301 permanent redirect affects SEO

    Key takeaways

    • Google’s site-move documentation says permanent redirects don’t cause a loss in PageRank, and also that rankings can move around while Google recrawls the new URLs.
    • Saving Settings > Permalinks doesn’t redirect anything. It flushes rewrite rules, so every old URL under the previous structure can start returning 404s.
    • wp_redirect() sends a 302 unless you pass 301, and it doesn’t stop the script, so call exit after it.
    • Google follows up to 10 hops but recommends no more than 3. Point each old URL straight at its final page.
    • If a deleted page has no real replacement, return a 404 or 410. Google may treat mass redirects to the homepage as soft 404s.

    You rename a service page, tidy up a product category, or move the site to HTTPS. The new URL works. But Google still has the old one indexed, other sites still link to it, and customers still have it bookmarked. A 301 redirect connects those old requests to the new address. Whether your search traffic makes it across depends almost entirely on how carefully you set up those redirects.

    This article explains what a 301 does for search, when it’s the right response, and where WordPress sites usually get it wrong. For step-by-step setup, see our guide to redirecting a page in WordPress.

    What a 301 tells Google, and what it doesn’t promise

    A 301 is a server response that says “this resource has moved permanently.” The new address goes in the Location header. Browsers and crawlers follow it automatically. Google’s redirect documentation treats a permanent redirect as a strong signal that the destination should become the canonical URL, the one shown in search results.

    The old fear was that every 301 “leaked” a fixed share of link value. Google has since said the opposite. Its site moves and migrations guide says permanent redirects don’t cause a loss in PageRank. The same guide also warns that rankings can fluctuate while Google recrawls and reprocesses the moved URLs. Both statements are true. A 301 carries the signals over. It doesn’t guarantee the new page ranks where the old one did.

    That gap matters most when the content changes too. If the new page drops the text, headings or offer that ranked the old one, the redirect carries signals to a weaker page. Change the URL and the content at the same time and you won’t be able to tell which change caused the drop.

    Big moves can take a long time to settle. In a 2025 Search Engine Journal study of 892 domain migrations, estimated organic traffic took an average of 523 days to match the old domain. The sample was self-selected and limited to domain moves, and the study doesn’t separate the effect of redirects from everything else that changed. A single slug change on a small site is a much smaller event. Still, plan for some movement.

    When is a 301 the right response?

    Use a 301 when the move is permanent and the new page is a real replacement for the old one. Google’s test is simple: if you expect to reverse the redirect later, it isn’t permanent, so use a 302 or 307 instead. A 308 is also permanent. The difference from a 301 is that it keeps the request method.

    SituationResponseWhere it should point
    Slug or permalink structure changed301The same page at its new URL
    HTTP to HTTPS, or www to non-www301Same path on the preferred protocol and host
    Domain move301The matching page on the new domain, not its homepage
    Two overlapping posts merged301The post you kept
    Product discontinued, close successor exists301The successor, or a category that serves the same buyer
    Product out of stock but coming back302, or no redirectTemporary page, if you need one at all
    Page deleted, nothing equivalent404 or 410Nowhere
    Page refreshed at the same URLNo redirectKeep the URL

    WooCommerce’s Product 404 Redirects documentation draws the same line for stores. It recommends a 301 for permanently deleted products and a 302 for products that are only temporarily unavailable. It also warns against choosing a destination that redirects back to the original URL.

    The row people resist most is the last real one: deleted, nothing equivalent. Sending every dead URL to the homepage feels safer than a 404. Google’s migration guide says otherwise. Redirecting unrelated old URLs to the homepage can confuse visitors, and Google may treat those redirects as soft 404s. If a page has no real replacement, a clear 404 is the honest answer, and you can make it a useful one with a custom 404 page.

    Why WordPress changes URLs without redirecting them

    Most redirect problems on WordPress start with a URL that changed and nobody added a redirect for it. WordPress makes these changes easy and covers them only partly.

    Changing permalinks redirects nothing. When you click Save under Settings > Permalinks, WordPress applies the new structure and flushes its rewrite rules. Old URLs aren’t mapped to new ones. Switch from /2024/05/post-name/ to /post-name/ and every dated URL that Google has indexed can start returning 404s. WooCommerce’s permalinks documentation gives the same warning for product and category bases.

    WordPress Settings Permalinks screen where changing the structure alters URLs without creating 301 redirects
    Selecting a new permalink structure and clicking Save Changes flushes your site rewrite rules without creating redirects for your existing links. · Source: kinsta.com

    Old-slug redirects cover only some cases. WordPress core has wp_old_slug_redirect(), which looks up a post’s past slugs when a request would otherwise 404. It’s useful. But it doesn’t cover structure changes, and you shouldn’t assume it caught a particular URL. Test the old address itself. Our explainer on what a WordPress slug is covers where the slug ends and the rest of the permalink begins.

    Canonical redirects aren’t bugs. redirect_canonical() sends requests to the URL WordPress considers correct, based on host, HTTPS and trailing slash. Owners sometimes see an unexpected 301 from it and switch it off. That can leave duplicate versions of the same page reachable, which is the problem it exists to solve.

    Custom code defaults to temporary. In WordPress developer resources, wp_redirect() takes a status of 302 by default and doesn’t stop execution. For a permanent move in a theme or must-use plugin:

    wp_safe_redirect( home_url( '/new-page/' ), 301 );
    exit;

    Leave off the 301 and you’ve told Google the old URL is coming back.

    Where should the redirect live?

    A WordPress request can be redirected by WordPress core, a redirect plugin, an SEO plugin’s redirect manager, .htaccess or Nginx rules, your host’s dashboard, and Cloudflare. Any of these layers works. The trouble starts when two of them handle the same URL. Pick one owner for each rule and write down which one it is.

    Google prefers server-side redirects when you can use them. A plugin like Redirection still returns a real 301 from PHP, so it’s a sound choice for owners without server access. Server rules handle the request before WordPress loads, which suits large rule sets. A mistake in a server rule, though, can break more than the page you meant to move. Our guide to htaccess 301 redirects shows where custom rules go so WordPress doesn’t overwrite them.

    Two host differences catch people after a migration:

    • WP Engine has deprecated .htaccess support. Redirects belong in Web Rules, which run in order. A broad rule placed above a specific one wins. Old .htaccess redirects may simply stop working after a move.
    • Kinsta’s redirect tool treats every source as a regular expression. Anchor paths with ^, and with $ for exact matches, or a rule can match its own destination and loop. Kinsta also says the tool can’t redirect query strings, and asks you to contact support for those.

    If you’d rather hand off the map and the checks, SiteSelf handles 301 redirects and SEO settings through chat. It uses its connector plugin for plugin-level redirects and hosting access for server rules, and it reports what each old URL returns afterwards.

    The mistakes that actually cost traffic

    When practitioners on r/Wordpress, r/webdev and the wordpress.org forums describe a traffic collapse after a rebuild, the cause is rarely the 301 status code. It’s usually one of four things, roughly in this order of how often they come up.

    Old URLs that nobody listed

    A rebuild changes the URL structure, someone redirects the pages in the main menu, and hundreds of old posts, product URLs and PDFs end up returning 404s. Fix this before launch. Export every URL from your sitemap, Search Console’s indexing and performance reports, analytics landing pages and your backlink tool. Then map each one to its closest real equivalent. A poster on r/webdev who migrated 3,100 URLs from a 14-year-old WordPress site said starting that spreadsheet late was the biggest regret of the project.

    Bulk redirects to the homepage or a broad category

    For large catalogues, the approach practitioners defend most often is a hybrid. Map your high-value URLs one to one. Send low-value ones to the closest category or brand page that genuinely fits. Return a 404 or 410 where nothing fits. Plugins that redirect every 404 to the homepage are popular, but the Redirection plugin’s own FAQ advises against redirecting all 404s.

    Chains

    A chain happens when site moves pile up: http:// goes to https://, then to www, then to the new slug. Google’s redirect documentation says Googlebot follows up to 10 hops but advises avoiding chains, ideally keeping them to 3 or fewer and always under 5. Point every old URL directly at the final page. Then update your menus, internal links, canonical tags and sitemap so your own site never goes through a redirect at all. Our guide to updating internal links in WordPress covers the editor side.

    Loops

    ERR_TOO_MANY_REDIRECTS means two layers disagree. A common case is documented by Cloudflare: in Flexible SSL mode, Cloudflare talks to your server over HTTP. If the server also redirects HTTP to HTTPS, the request bounces between them forever. Cloudflare’s fix is Full mode or higher, which needs a certificate on the origin server. Other causes are a force-HTTPS plugin turned on before HTTPS actually works, www and non-www settings that disagree, and regex rules with no anchors. SSL errors behind Cloudflare often show up alongside loops. Trace the chain before you clear caches or disable plugins. Those steps can hide the problem without telling you which rule caused it.

    Chrome ERR_TOO_MANY_REDIRECTS error caused by a 301 redirect loop
    The ERR_TOO_MANY_REDIRECTS browser error signals that edge services and origin servers are caught in an endless loop over the requested URL. · Source: kinsta.com

    How to tell a 301 is doing its job

    Check the actual HTTP response, logged out, after clearing your page cache. A browser alone won’t tell you much. Browsers cache 301s, so your browser may keep following a rule you’ve already changed. From a terminal:

    curl -sIL https://example.com/old-page/

    Each HTTP/ line is one hop. A good result shows one 301, a Location header with the final URL, and then a 200. Two or more 3xx lines mean a chain. A 302 where you expected a 301 means the wrong status. Repeating URLs mean a loop. The Redirection plugin also has an HTTP checker that shows each hop, if you’d rather stay in wp-admin.

    Then check the destination like a visitor would. Does the page load, answer the same question, and still let people buy or get in touch? In Search Console, “Page with redirect” is the expected status for a URL that redirects on purpose. A “Not found (404)” report that suddenly fills with old URLs means pages were missed.

    Google Search Console Page with redirect status for URLs using a 301 permanent redirect
    Google Search Console categorizes intentionally redirected URLs under the Page with redirect status in its indexing report. · Source: rankmath.com

    Keep the redirects. Google’s migration guide says to keep them for at least a year and to consider keeping them indefinitely, because people will keep clicking old links long after Google has updated its index. If you moved domains, keep the old domain registered so its redirects keep working.

    Frequently asked questions

    Does a 301 pass link equity?

    Yes. Google says permanent redirects don’t cause a PageRank loss, which replaces older advice about a fixed percentage lost per redirect. What a 301 can’t do is make the new page as relevant as the old one if its content got thinner.

    Should I use a 301 or a 308?

    Google treats both as permanent. A 308 keeps the request method, which matters for form submissions and API endpoints. For normal pages, a 301 is the usual choice, and most WordPress plugins offer it by default.

    Can a site have too many redirects?

    The number of redirects across the site is rarely the issue. Hops per URL are. Keep each old URL one step from its final page. A thousand single-hop redirects are healthier than ten five-hop chains.

    Do I need redirects when I move hosts but keep my URLs?

    Not if the domain and every path stay the same. Still, test a sample of URLs after the move. Hosts handle rules differently, and redirects that lived in .htaccess won’t run on a host that ignores that file.

    Why does WordPress redirect a URL I never set up?

    Usually it’s core doing its job. redirect_canonical() normalises host, HTTPS and trailing slashes, and wp_old_slug_redirect() forwards some old post slugs. Find the layer sending the redirect before you change anything, and don’t turn off canonical redirects to make the redirect go away.

    How long should I wait to judge whether redirects worked?

    Visitors are redirected the moment the rule goes live. Google’s recrawl runs on its own, slower schedule. Compare the affected pages against their numbers from before the change over several weeks, rather than reacting to the first few days.

  • Do you need a WordPress landing page builder?

    Key takeaways

    • HTTP Archive’s 2025 Web Almanac found a page builder on about 60% of WordPress sites, and the plain Block Editor on 18%. A builder is common, but you don’t need one to make a landing page.
    • Elementor deprecated its separate Landing Pages feature in Pro 3.27. Those pages were never allowed to be the homepage. Build on a regular Page with a saved template instead.
    • Builder choice does not set your speed. The Admin Bar’s audit of 150+ agency sites found medians between 66 and 77 across builders, with sample sizes as small as six.
    • Most ‘the builder broke’ moments come from WordPress settings, caches or plugin conflicts. Check Settings > Reading, test while logged out, and keep WooCommerce’s Cart, Checkout and My Account on separate pages.
    • The cost shows up later, in renewals, layouts that drift and pages locked into one builder’s format. Before you commit a whole campaign library to a tool, test how you would get your pages out of it.

    About 60% of WordPress sites run a page builder, according to HTTP Archive’s 2025 Web Almanac. Most of those builders were picked in an afternoon to get one page live. The site then keeps them for years, along with their renewals and updates, and a page format that only that builder can read.

    So “which WordPress landing page builder should I use?” is really two questions. Do you need a builder for this page at all? And what will you be maintaining once the page is live? This article answers both. If you want the ground-level version first, our guide on what a landing page builder really is covers the basic idea.

    What counts as a landing page builder on WordPress?

    The phrase covers four kinds of tools. They lock you in to very different degrees.

    Kind of toolWhat you getWhat you take on
    The block editor, optionally with a block toolkitNative WordPress pages, patterns and templates. Toolkits add more layout blocks.Fewer moving parts. Clients may find the editor less intuitive.
    A general visual page builderDrag-and-drop layout, template libraries, often forms and popupsA second editing system, its updates, and layouts stored in its own format
    A dedicated campaign or coming-soon pluginStandalone pages with no theme header or footer, plus campaign templatesOne more plugin. It can also clash with other coming-soon or maintenance plugins.
    A hosted landing-page platform outside WordPressFast duplication and A/B testingAnother subscription and another login. The page does not live on your site.

    Marketers who use both kinds describe a sensible split. They use a hosted platform when they run many short campaigns and test constantly. They use WordPress for evergreen pages, and for pages that need the site’s existing forms and plugins or that get handed back to a client.

    Do you need a builder for one landing page?

    Often you don’t. A landing page is a normal WordPress Page with a focused layout and usually no main navigation. The block editor can build that. HTTP Archive’s 2025 data puts the plain Block Editor on 18% of WordPress sites. Plenty of people already work this way.

    The steps are short. Create a Page. Open the Template panel in the page settings sidebar. Pick a template without a header or footer, if your theme has one. Block themes often include a blank or no-title template. Classic themes sometimes offer a “Full width” or “Blank” option. If yours has neither, you can create one in Appearance > Editor > Templates. Then build the sections from patterns. Our walkthrough on building a landing page in WordPress goes through it screen by screen.

    WordPress landing page builder alternative: block editor Template panel for a page
    The page settings panel in the block editor lets you assign a dedicated template to strip away standard site clutter for a focused campaign page. · Source: www.boisestate.edu

    A builder earns its place in three situations:

    • The site is already built in one. If every page is Elementor, Beaver Builder or Divi, use that for the landing page too. Adding a second editing system for one campaign doubles the upkeep and doesn’t buy you anything.
    • You launch many pages from templates. Ready-made campaign layouts save real hours if you publish several pages a month.
    • Someone who can’t work in blocks will edit it. If the person maintaining the page can only work visually, the tool they are comfortable in is the right one.

    Popularity is a weak reason on its own. Elementor’s WordPress.org listing shows 10+ million active installs, more than any other builder. That gets you more tutorials and freelancers. It also gets you more conflict reports, because more sites are running it.

    Will the builder decide how fast the page loads?

    Less than people expect. The Admin Bar audited more than 150 live agency sites in 2025 and reported median Lighthouse scores of 77 for Bricks, 70 for Beaver Builder, 69 for Gutenberg and 66 for Elementor. Those groups were small, six sites in the Gutenberg case, and no two sites were built the same way. That is a spread, not a ranking.

    The page decides most of it: hero image size, how many widgets and third-party scripts it loads, and whether caching is set up. Practitioners do complain that heavy builders load unused CSS and JavaScript on every request, and a bigger hosting plan won’t fix that. Others point out that many “the builder is slow” threads turn out to be heavy pages. Both are true. Test the real page, with its form, tracking and images, before you blame the tool or buy a new one.

    What breaks after you publish, and usually isn’t the builder

    Most failures reported on WordPress.org and in builder docs come from settings, caches and conflicts. Check these first, roughly in order of how often they come up.

    The page is live but isn’t the homepage

    Publishing a page does not make it the front page. WordPress only shows it as the homepage once you choose it under Settings > Reading > A static page. In a block theme, a Front Page template can override that setting. If the homepage still looks wrong, check Appearance > Editor > Templates. Our guide on setting a page as the front page covers the edge cases.

    WordPress Reading settings setting a landing page as the static homepage
    Selecting a static page in the Reading Settings officially designates your newly published page as the site homepage. · Source: learn.wordpress.org

    Elementor users hit one extra trap. Its separate Landing Pages feature created a custom post type, and the Reading setting only lists regular Pages, so those landing pages could never be the homepage. Elementor’s help center now says the feature was deprecated in Pro 3.27 and is no longer supported. The route that works is to save the design as a template, insert it into a regular Page, and select that Page. Many older tutorials still describe the old feature.

    Visitors still see the old version

    The cache can sit in your browser, a caching plugin, the host’s server and a CDN, and each one holds its own copy. Test in a private window while logged out. Purge the plugin cache, then the server and CDN caches, then the browser cache. Elementor also generates its own CSS files. Its Tools screen can regenerate them when styles look stale. If an optimization setting keeps breaking the layout, exclude that one setting rather than turning caching off. The full sequence is in our page-not-updating guide.

    The editor won’t save or won’t load

    An “invalid JSON response” error, a gray editor or a 403 error on save usually means one of four things: a plugin conflict, mismatched builder versions, a memory limit, or a server firewall rejecting the save request. Open your browser’s developer tools and look at the Network tab to see which request fails before you change anything. One WordPress.org thread from September 2026 shows why order matters. Saves failed after Elementor 4.3.0, extra memory did not help, and rolling back to 4.2.4 did.

    The store stopped checking out

    On WooCommerce, a landing page must never take over the store’s own pages. WooCommerce’s documentation warns that assigning Cart, Checkout and My Account to the same page can cause incorrect redirects and broken payment gateways. Check the assignments under WooCommerce > Settings > Advanced > Page setup. Then put a real product through the cart and checkout, including the payment redirect. A visual preview doesn’t test any of that.

    WooCommerce page setup screen keeping Cart, Checkout and My Account separate from a landing page
    Dedicated assignments in the page setup settings keep essential cart, checkout, and account functions separated so customer orders process reliably. · Source: woocommerce.com

    The page doesn’t show up in Google

    Use URL Inspection in Search Console. Remove any noindex you didn’t intend. If you want a page kept out of search, use noindex, not robots.txt. Google’s documentation explains that blocking a URL in robots.txt can stop Google from ever seeing its noindex tag. Also check the form: every field needs a real label, not just placeholder text. A polished builder layout can hide that problem.

    What does the builder cost after the first year?

    The first page is the cheap part. Three costs come later.

    Renewals. Introductory prices are common, and renewal prices are higher. SeedProd’s pricing page, for example, says renewals are charged at the full price. When you budget, use the renewal figure, not the launch offer.

    Drift. Practitioners describe a familiar pattern. Someone imports a demo, tweaks it and ships it. A few months later the offer on the page is out of date, the mobile layout has drifted and a plugin update has broken a section. Nobody gets round to fixing it, because every small edit means opening the builder again.

    Lock-in. Visual builders store layout in their own format. If you switch tools, you may have to rebuild the pages. People who converted Elementor pages to blocks report leftover HTML blocks and broken widgets. Before you put a whole campaign library into a tool, export one page, move it to staging, and see what is left after you deactivate the builder.

    None of this decides whether the page converts. No source shows one builder producing higher conversion rates than another. A clear offer, one main action, proof near the form and a mobile layout someone actually checked do far more.

    How the work changes when an agent builds the page

    Most landing pages are small jobs: a headline, three sections, a form that already exists, a button. The process around them is not small. Someone has to open the editor, find the right template, wire up the form, remember the Reading setting, purge the cache and check the result. That coordination is what gets postponed, and it is why so many campaign pages go out late or never get updated.

    SiteSelf is an AI agent that works on your existing WordPress site. You describe the page in chat or from Telegram, and the agent does the page edits on your live site itself.

    Example request: “Make a landing page for the spring remodel offer at /spring-offer. Use the copy in this doc, no main menu, and put our existing quote form at the bottom. Keep it out of the navigation and don’t make it the homepage.”

    Here is what the agent would do. It creates an ordinary Page in the block editor and applies your theme’s template without a header, if the theme has one. It adds the copy and the existing form, publishes at that slug and leaves Settings > Reading alone. Before the change, it tells you what is about to change and whether you can undo it. What it did is recorded.

    To check the work, the agent fetches the published page and reports in chat whether the copy, the form and the status match what you asked for. That check is not a screenshot or a device test, so look at the page on your phone yourself.

    The access depends on the task. The SiteSelf Connector plugin from the WordPress.org directory covers page content and settings. A new template file or theme CSS needs hosting (SSH) access.

    There are limits. If the page is owned by Elementor, Divi or Beaver Builder, the agent refuses it at the moment of work and explains why. It won’t run A/B tests, write to your analytics or ad accounts, or keep an eye on the page afterwards. It works on request, so when the offer changes, you ask again.

    Frequently asked questions

    Can Elementor still create landing pages?

    Yes, through regular Pages. Elementor’s separate Landing Pages feature was deprecated in Pro 3.27. The supported approach is to save your design as a template and insert it into an ordinary WordPress Page. That Page can also be set as the homepage.

    Is a free builder good enough?

    For a basic page, usually yes. The limits tend to show up in forms, marketing integrations and larger template libraries, which are often paid features. If your site already has a form plugin, check whether you need the builder’s form at all.

    How do I remove the header and footer from a landing page?

    Choose a blank or no-header template in the page’s Template panel, if your theme provides one. In a block theme you can create one under Appearance > Editor > Templates. Builders have their own canvas or blank layout setting. To hide just the title, see our guide on hiding page titles safely.

    What happens to my pages if I deactivate the builder?

    It depends on the builder, and the content is often left as unstyled or unreadable markup. Test it on a staging copy before you rely on the builder for many pages. Don’t run that test on the live site.

    Should I use a hosted landing-page platform instead of WordPress?

    Use one if you run many short campaigns and A/B test constantly. Expect another subscription and another tool to manage. For occasional or evergreen pages that need your site’s existing forms and plugins, building on WordPress is usually simpler.

    Why does my landing page work for me but not for visitors?

    You are probably logged in. Private, draft and password-protected pages show to logged-in admins, and so do uncached versions of pages. Test in a private window while logged out, then purge your caches.

  • WordPress page not updating? How to find the cause

    Key takeaways

    • Open the public URL in a private window first. If it’s new there and old in your tab, it’s your browser. If it’s old there but new in the editor, it’s a cache between WordPress and your visitors.
    • An editor notice such as “Updating failed” or “The response is not a valid JSON response” means the save never happened. Purging caches won’t help. Check the REST API, the firewall and the server instead.
    • Hosts split their caches. Kinsta’s Clear cache button doesn’t touch its CDN, and purging from WP Engine’s WordPress admin doesn’t clear its object cache.
    • If the text updated but the styling didn’t, clear Elementor’s generated files (Tools > Clear Files & Data) and any minification cache, then purge everything else.
    • Don’t fix staleness by turning caching off. DebugHawk measured a median TTFB of 106 ms for cached pages against 723 ms for uncached ones.

    You change the opening hours, click Update, reload, and the old hours are still there. You save again and nothing changes. Saving again won’t help, because “page not updating” can mean at least five different things: the edit saved but a cache serves an old copy, the edit saved in the wrong place, the save failed, the styling is stale while the text is current, or Google is showing an old version.

    Each one has a different fix. The order below starts with the test that tells them apart, then goes through the causes from most to least common. If you’re still learning where the editor’s controls are, start with how to edit pages in WordPress.

    Which problem do you have? Run one test first

    Open the exact public URL in a private or incognito window, where you’re logged out. Then compare three views: the editor, your normal logged-in tab, and the private window.

    • New in the private window, old in your normal tab: your own browser kept an old copy. WordPress.org’s FAQ notes that a normal refresh often doesn’t clear it. Do a hard refresh (Ctrl+F5, or Cmd+Shift+R on a Mac) and you’re done.
    • New in the editor and when logged in, old in the private window: a page cache is serving visitors an old copy. Logged-in admins often skip the page cache, which is why you see the change and your customers don’t. Go to the cache section below.
    • Old everywhere, including after you reload the editor: the edit didn’t save, or it went to a different page, template or site. Go to the save and “wrong place” sections.

    Never judge a fix from the logged-in session where you made the edit. That view is the one most likely to look right when it isn’t.

    Why the cache is usually the cause, and why clearing it “didn’t work”

    WordPress doesn’t include a page cache by default. WordPress.org’s FAQ says so, and it means there’s no core “clear cache” button. Any page caching on your site comes from a plugin, your host, a proxy such as Varnish, or a CDN. Each one keeps its own copy.

    That explains most failed fixes. In one WordPress.org support thread, the poster disabled W3 Total Cache entirely and the page stayed stale, because the host’s own GoDaddy cache was serving it. In an r/webdev thread, a plugin purge did nothing. Clearing the whole-site cache in cPanel fixed it. The same FAQ adds a second trap: cache plugins generally purge a page when you publish it, but a change elsewhere, such as in the theme, can leave cached pages untouched.

    Purge each layer, then retest logged out

    LayerWhere the purge livesCommonly missed because
    Caching plugin (LiteSpeed Cache, WP Rocket, W3 Total Cache, WP Fastest Cache, SiteGround Optimizer, Breeze)The plugin’s admin bar menu or settings pagePeople purge one page when the stale URL is another
    Host server cacheYour hosting panel (cPanel, Site Tools, MyKinsta, WP Engine portal)Owners don’t know the host runs its own cache
    CDN or edge cache (Cloudflare, host CDN)The CDN dashboard, or a separate CDN tab in the host panelIt’s often purged separately from the server cache
    Object cache (Redis, Memcached)Host panel or the object cache pluginIt holds database results like menus and options, not pages
    BrowserHard refresh or private windowIt’s the only layer people clear, over and over

    Work outward: plugin, then host, then CDN, then your browser. Test in a private window after each step. The layer that fixes it is the one you’ll want to configure properly later.

    WordPress admin bar showing a cache plugin purge menu for a page not updating
    While caching plugins offer a convenient option to purge pages directly from the admin bar, separate server and CDN caches often need to be cleared independently. · Source: wpastra.com

    Two hosts show why “clear cache” is ambiguous. Kinsta’s docs say the Clear cache button under Caching > Server Caching clears server and edge cache, plus Redis if it’s enabled, but not the CDN. You clear the CDN under Caching > CDN. WP Engine’s support docs list page, network/CDN and object cache as separate purge options. They also say a purge started from WP Engine’s WordPress admin doesn’t clear object cache, and that a full purge can make the site briefly slower while pages are cached again. If you don’t know which layers your site runs, ask your host. Thirty seconds of support chat beats an evening of guessing.

    Confirm it from the response headers

    If you’re comfortable with a terminal, read the headers instead of guessing:

    curl -sI https://example.com/your-page/ | grep -iE 'cache|age|cf-'

    A hit header (for example X-LiteSpeed-Cache: hit, or a CDN’s HIT status) and a large Age value mean a cache answered. LiteSpeed’s troubleshooting guide uses exactly this check. It also explains a quieter failure: when another plugin changes what a page shows without the page being saved, LiteSpeed may not know to purge it. A quick non-technical version is to add a made-up query string such as ?nocache=482 to the URL. Many page caches treat that as a different page. If the new content appears there, a cache is involved.

    Don’t turn caching off to make edits show. DebugHawk’s report on 5.7 million pageviews found a median time to first byte of 106 ms for cached pages and 723 ms for uncached ones. Purge the stale layer instead, and make sure it purges itself automatically when content changes.

    Text updated but the design didn’t: builder and minified CSS

    When the words are current but the layout, colours or widget styling are old, the stale copy is usually a generated CSS file, not the page. Elementor’s help center gives the fix: Elementor > Tools > Clear Files & Data, then purge your other caches.

    Minification caches cause the same symptom. In a WordPress.org thread about Elementor with W3 Total Cache’s CSS minification, purging only the minify cache wasn’t enough. What fixed the logged-out view was updating W3TC’s media query string and purging all caches. Our guide to layout and design changes in WordPress covers regenerating builder CSS in more detail.

    Elementor Tools screen with Clear Files and Data button for styling not updating in WordPress
    Clearing cached files and data within the Elementor Tools panel forces a fresh stylesheet regeneration when page styling fails to reflect recent edits. · Source: elementor.com

    You edited a different page than the one visitors see

    This sounds unlikely until it costs you an hour. Check these in order:

    1. Status. The page must say Published, not Draft or Pending Review.
    2. Same URL. Copy the permalink from the editor and compare it with the address you’re testing. Duplicate pages with similar slugs are a common pitfall on Astra and Elementor sites.
    3. Homepage assignment. If it’s the homepage, open Settings > Reading and confirm which page is set as the homepage. See setting a page as the front page.
    4. Page or template. In the Site Editor, page content and template changes save separately. Check that the save dialog included the item you meant. A template edit changes every page that uses that template.
    5. Environment and tab. Edits on staging don’t appear on production until someone pushes them. And check that you’re on the live site’s tab, not a local or staging copy.

    Then open Revisions in the editor sidebar. WordPress.org’s Revisions documentation says autosaves don’t overwrite published content, so if your change only exists in an autosave, it was never published. Restore it, review it, and click Update on purpose.

    The save itself failed

    If the editor showed “Updating failed”, “Publishing failed”, “The response is not a valid JSON response” or “Updating page failed. You’re probably offline”, nothing reached the database. The offline message can appear when your internet is fine. Nexcess’s documentation ties it to the server or REST API, not your connection.

    WordPress block editor showing an Updating failed notice when a page is not updating
    A red notice at the top of the editor signals that the update never reached the database, making cache clearing ineffective. · Source: kinsta.com
    1. Copy your content somewhere safe before trying anything.
    2. Open Tools > Site Health and look for REST API warnings. In the browser’s Network panel, find the failed request to /wp-json/ and note its status code.
    3. Go to Settings > Permalinks and click Save Changes without changing anything. This rebuilds rewrite rules.
    4. Ask your host to check firewall and server logs for blocked editor requests. Ask for a narrow exception, not a firewall switched off site-wide.
    5. Test for a plugin or theme conflict on staging, as described in fixing plugins that stop working.

    Installing Classic Editor has made saving work for some people, but that hides the cause rather than fixing it.

    WooCommerce data that looks old

    WooCommerce > Status > Tools has separate tools, and they don’t do the same job. “Delete all shop and product transient data” is for stale product or shop data. “Clear Template Cache” is for theme customizations that aren’t showing. “Clear expired transients” removes only expired entries. “Clear Customer Sessions” empties every shopper’s cart, so it’s not a refresh button.

    WooCommerce’s docs also say cart and checkout pages should normally be excluded from caching, because their content differs for each shopper. If those pages show the wrong contents, a purge won’t last. Fix the exclusion rule in the plugin and at the host.

    Google still shows the old version

    That’s a crawl problem, not a site problem. In Search Console, use URL Inspection to request indexing for one URL, or submit a sitemap for many. Google’s documentation says crawling can take days to weeks and that requesting the same URL again doesn’t speed it up.

    When to stop and get help

    Stop if you’ve purged every layer you know about and the logged-out view is still old, if saves fail and you can’t see server logs, or if testing for conflicts would mean switching off plugins on a live store. At that point, give your host or developer four facts: the exact URL, the time of your last update from Revisions, what visitors see, and every cache you purged. If you’d rather hand the whole hunt over, SiteSelf works through WordPress bug fixes like this one on request. It needs hosting (SSH) access for cache and file work, and it reports what it changed and what it checked.

    Frequently asked questions

    How do I clear the cache in WordPress?

    There’s no core page cache to clear. Use your caching plugin’s purge option, then your host panel’s cache tool, then your CDN. If you don’t know which of those your site uses, your host can tell you.

    Should I just wait 48 to 72 hours?

    No. A long wait usually means a cache layer nobody has purged yet. In one r/Wordpress thread, a maintenance company told the owner to wait, and the actual fix was clearing an edge cache.

    Why does my phone show the old page when my laptop shows the new one?

    Each device and browser keeps its own cache, and a CDN can serve different copies from different locations. Test in a private window on the phone. If it’s still old there, purge the CDN.

    Will updating WordPress or my plugins fix it?

    Usually not. A failed software update is a different problem: think maintenance mode, file permissions and PHP version. Update when a plugin’s changelog names your exact bug, not as a general cure for a stale page.

    Is it safe to turn off my caching plugin to test?

    For a few minutes, yes. But a host or CDN cache may still serve the old page, so a stale result proves nothing. Turn the plugin back on afterwards, because running without a page cache makes every page slower.

  • WordPress security issues and how to fix them

    Key takeaways

    • Patchstack counted 7,966 new WordPress ecosystem vulnerabilities in 2024: 96% in plugins, 4% in themes and only 7 in core.
    • For heavily exploited 2025 vulnerabilities, Patchstack found a 5-hour weighted median time to first exploit, so a site that waits a week to update has a real gap.
    • Sucuri found backdoors on 49.21% of the compromised sites it cleaned, which is why restoring a backup and passing a scan often ends in reinfection.
    • A critical error, a database connection error, a 403 or a 500 usually has an ordinary cause. Check debug.log and the host before you pay for malware cleanup.
    • WordPress’s recovery advice is to change every password (WordPress, hosting, FTP, database), change them again after cleanup, and change the secret keys to end active sessions.

    WordPress core is rarely what gets a site hacked. Patchstack’s 2025 security report counted 7,966 new vulnerabilities across the WordPress ecosystem in 2024. Of those, 96% were in plugins, 4% were in themes and 7 were in core. The count keeps rising: Patchstack’s 2026 report puts 2025 at 11,334.

    That changes where to look. The weak point is the unmaintained site: the plugin nobody updated, the old contractor who still has an admin login, and the backup nobody ever tested. This guide ranks the causes, gives the fix for each, and covers the part most people get wrong, which is recovery.

    Is it a security issue or an ordinary bug?

    Rule out an ordinary bug first. The scary errors people read as “hacked” usually have ordinary causes. WordPress’s common-errors handbook explains that the message “There has been a critical error on this website” usually comes from a plugin conflict, a theme compatibility problem, the PHP version, a memory limit or corrupted files. For “Error establishing a database connection”, the handbook says to check the configuration and the host before you suspect a compromise.

    So check the boring things before you pay anyone for malware removal. Read the email WordPress sends to the admin address, open wp-content/debug.log, and think about what changed recently. Our guides to fixing a WordPress fatal error and fixing a server error 500 go through that diagnosis step by step. If the cause is a broken plugin or setting and you would rather not do this yourself, SiteSelf takes WordPress troubleshooting and repairs on request through chat: the connector plugin is enough for settings work, and file-level fixes need hosting access.

    WordPress critical error message, which usually points to a bug rather than a security issue
    The default critical error screen indicates an internal script failure or plugin conflict rather than a security breach. · Source: www.wpbeginner.com

    The signs below point to an actual compromise, and a bug does not explain them:

    • Administrator accounts you did not create.
    • Spam posts or pages, often casino or pharmacy content, that you did not publish.
    • Redirects to other sites, sometimes only for visitors who arrive from Google, so you never see them yourself.
    • Unfamiliar PHP files, or recent changes to index.php or .htaccess that you did not make.
    • A browser warning, a hosting suspension, or a flag in Search Console’s Security issues report.

    What causes WordPress security issues, most common first

    Outdated, abandoned or pirated plugins and themes

    Extensions are where nearly all disclosed vulnerabilities sit, and attackers move fast. Patchstack’s 2026 report found a 5-hour weighted median time to first exploit for the heavily exploited vulnerabilities of 2025. About half of the high-impact ones were exploited within 24 hours. Updating once a month leaves weeks of exposure after a patch ships.

    The fix:

    1. Take a backup of the files and the database, and confirm it actually contains both.
    2. Update core, every plugin and every theme, not just core. A current core next to a vulnerable plugin is still a vulnerable site.
    3. Delete plugins and themes you do not use. Deactivating one leaves its code on the server.
    4. Replace anything that has stopped getting updates.
    5. Never install “nulled” (pirated) premium plugins. They are a common way malware gets in.

    If a vulnerability is public and no patch exists yet, turn off the affected feature if the business can do without it for a while. If it can’t, such as checkout or a booking form, ask your host whether a firewall rule can block the exploit until the vendor ships a fix. A firewall rule buys time. It does not replace the update.

    Weak passwords and too many administrators

    Brute force is simple: a script tries username and password pairs until one works. WordPress’s brute-force handbook recommends strong unique passwords, two-factor authentication, passkeys and limits on login attempts. Practitioners prefer an authenticator app to SMS for the second factor.

    Then go to Users and filter by Administrator. Every person should have their own account with the lowest role that still lets them do their job. Delete or downgrade accounts for former staff, agencies and freelancers. The hardening handbook calls security through obscurity an unsound primary strategy. Renaming the login URL is a small extra measure. It is no substitute for 2FA.

    Loose file permissions and the server underneath

    WordPress’s hardening handbook gives 755 for directories and 644 for files as “one possible scheme”. It suggests wp-config.php be readable only by its owner and the web server, often 400 or 440. Requirements vary by host, so confirm with yours before you change anything. Never set folders to 777 to get rid of a permissions error. That opens a hole and leaves the ownership problem unfixed.

    The server matters too. Your host controls the PHP version, and updating WordPress does nothing for an unpatched PHP. On shared hosting, one infected site can reach the other sites in the same account. Server-side controls such as firewalls and headers are covered in our guide to Apache web server security.

    Missing HTTPS

    Without HTTPS, login details travel unencrypted. Install a valid certificate first. Once HTTPS works across the whole site, WordPress’s HTTPS handbook describes adding define( 'FORCE_SSL_ADMIN', true ); to wp-config.php, which forces logins and the admin area onto HTTPS. WooCommerce strongly recommends HTTPS for stores, even when payments are processed off-site.

    Store abuse that is not a vulnerability

    A wave of small failed orders is usually card testing, not a hacked site. WooCommerce’s security FAQ describes it as fraudsters running repeated low-value transactions to check whether stolen cards work. The fixes it suggests are CAPTCHA or anti-fraud tools, refunding the fraudulent orders, reviewing guest checkout and working with your payment provider. Store owners report that blocking IP addresses rarely works, because the addresses change every time.

    How to recover from a hack without getting reinfected

    The most common recovery failure is reinfection. Attackers leave ways back in. Sucuri’s 2023 threat report found backdoors on 49.21% of the compromised sites it cleaned, and malicious admin users in 55.2% of infected databases. Those figures describe what attackers left behind, not how they got in. They also explain a story that repeats on the WordPress.org forums: restore a backup, pass a scan, get hacked again a few weeks later.

    WordPress’s “My site was hacked” FAQ and Google’s Search Console help add up to this sequence:

    1. Preserve evidence. Take a snapshot of files and database before you change anything, and contact your host. Some hosts, Kinsta among them, ask you not to reset or delete the site first.
    2. Write down what you saw. Note the symptoms, when they started and what changed recently.
    3. Find the entry point. Look for an outdated plugin, a reused password or another site in the same hosting account. If you skip this, the cleanup will not hold.
    4. Clean everything, not just the visible damage. Replace core, plugin and theme files with fresh copies. Check the database for rogue admins and injected content, and remove old WordPress copies left in subfolders.
    5. Close the hole. Update or remove the vulnerable component.
    6. Rotate every credential. Change the passwords for WordPress, the hosting panel, FTP or SFTP and the database. Change the secret keys in wp-config.php to end every active session, and change the passwords again once cleanup is finished.
    7. Request a Google review last. Google says its sample URLs may not be complete and that issues must be fixed throughout the site before you request a review.
    Google Search Console Security issues report for a hacked WordPress site
    Google Search Console lists only sample URLs for detected malware, meaning site owners must clean every infected file across the server before clicking Request Review. · Source: www.searchenginejournal.com

    Restore from a backup only if you know it predates the infection, and only after the entry point is closed. Otherwise you have reinstalled the same hole. Our guide to malware removal that does not come back covers the file and database checks in detail.

    Where security work causes its own problems

    Security fixes break sites too. Updates can conflict with a theme or with each other, and owners who have been burned delay the next update, which widens the exposure window. Scanner “repair” options restore the repository copy of a modified file, which also wipes legitimate customizations. Copy the file before you accept a repair. Blanket permission changes can leave WordPress unable to write uploads or run updates.

    A security plugin is a useful layer if you configure it with care. It does not do your updates for you, and a clean scan does not prove the site is clean.

    When to stop and get help

    Hand the job to someone experienced if the site keeps getting reinfected after cleanup, if a store’s customer data may be exposed, or if several sites in one hosting account are infected. Do the same if you cannot find the entry point. A one-site cleanup is often manageable. Recurring infections are a forensic job.

    When a host tells you that you are hacked and offers its own security add-on in the same message, get an independent diagnosis before you pay. Moving to a new host does not close the entry point either. To stop it happening again, put updates, backups and access reviews in a written routine. Our guide to what a care plan should include sets out what that routine covers.

    Frequently asked questions

    Is WordPress secure?

    Core has very few disclosed vulnerabilities: Patchstack counted 7 in 2024, against thousands in plugins. How secure a site is depends on how well it is maintained: how fast it gets updates, how many extensions it runs, and who can log in.

    Do I need a security plugin?

    WordPress’s own guidance is mostly configuration and habit: updates, strong passwords, 2FA, login limits, correct permissions, HTTPS and backups. A security plugin adds alerts, scanning and login protection. It helps if you set it up carefully, but it does not replace those habits.

    Are deactivated plugins a security risk?

    They can be. Deactivating a plugin stops it running inside WordPress, but its files stay on the server. If you don’t need it, delete it.

    Can I just restore a backup after a hack?

    Only from a backup you know predates the infection, and only after you close the entry point and change every credential. If you restore and skip those steps, attackers can walk back in the same way.

    Does shared hosting affect my site’s security?

    Yes. WordPress’s hacked-site FAQ warns that on shared hosting a compromise can reach beyond one site. If one site in the account is infected, check every other site in it during cleanup.

    Why does Google still flag my site after I cleaned it?

    Google’s sample URLs may not list every affected page, so the infection may still be live somewhere you did not check. Fix the whole site, test it, and then request a review in the Security issues report.

  • How to fix a 503 error on WordPress

    Key takeaways

    • Where the 503 appears is your best first clue. A whole-site failure, an admin-only failure, a checkout-only failure and a one-page failure point to different causes.
    • “Briefly unavailable for scheduled maintenance” is a leftover .maintenance file. Delete it from the site root once you know the update has stopped, then run the update again.
    • Kinsta’s docs say each PHP thread handles one request at a time, and that raising memory per thread leaves fewer threads. Asking for more memory can make a capacity 503 worse.
    • Log errors to wp-content/debug.log with WP_DEBUG_DISPLAY set to false, and switch debugging off once you have found the cause.
    • Google treats a short 503 as temporary. If 503s go on for more than about two days, Google may start dropping URLs from its index.

    A customer sends you a screenshot that says “503 Service Unavailable”. The domain still resolves and your hosting account still exists, so the site hasn’t vanished. Something between the visitor and the finished page couldn’t answer when they asked.

    That is all a 503 tells you. WooCommerce’s documentation on response codes describes it as the server being temporarily unable to handle the request. It doesn’t say which part failed. Usually the web server, the host or a proxy sends the response, even when WordPress code caused the trouble. So the job is to find which layer sent it, then fix that layer. If you see a bare 500 instead, that is a different failure, covered in our guide to fixing a server error 500.

    Where does the 503 appear, and what does it say?

    Spend two minutes on this before you touch a file. The same status code comes from very different places, and the pattern usually tells you which one. Open the site in a private window so you see what a logged-out visitor sees. Then check the homepage, a normal post, /wp-admin and, on a store, the cart and checkout.

    What you seeMost likely layerFirst move
    “Briefly unavailable for scheduled maintenance. Check back in a minute.”A leftover .maintenance file from an interrupted updateDelete the file, then rerun the update
    The whole site fails right after a plugin updateThat pluginDisable it by renaming its folder
    Public pages load, /wp-admin failsUncached PHP work hitting a limit, a security lockout, or a plugin’s admin-side taskCheck host resource usage and any security plugin
    Cart, checkout or logged-in pages fail, cached pages are fineExhausted PHP workers, or a route-specific faultAsk the host for PHP worker usage at that time
    Saving many product variations or opening many orders failsmod_security or a server request limitAsk the host to check firewall rules for that request
    A page branded by a security plugin, such as WordfenceA login lockoutWait, or adjust the lockout settings
    “cloudflare” or “cloudflare-nginx” in the error pageCloudflare generated the responseFollow Cloudflare’s 503 steps
    Only one page failsA block or element on that pageCheck what is on that page

    Write down the time you first saw it and what changed beforehand: an update, a new plugin, a campaign that sent traffic, an email from your host. Logs are only useful if you know which minutes to read.

    WordPress 503 maintenance message shown in a browser
    The standard scheduled maintenance notification appears when an automated update leaves a maintenance file behind rather than because of a true server outage. · Source: www.wpoven.com

    What causes a WordPress 503, and how do you fix each one?

    No one has measured how often each cause happens, so this order comes from WordPress.org support threads and host documentation, not from a dataset. Plugin behaviour and host capacity show up far more often than anything else.

    A plugin update, or a plugin doing heavy work

    This is the most reported trigger, especially when the 503 starts within minutes of an update. In one WordPress.org thread, a user lost 12 client sites at once and traced the failure to WP-Optimize 3.2.22. Other users in the thread removed the plugin to get their sites back. Take reports like this as a pattern, not proof. In other threads, the plugin’s own support team disputed whether their plugin was to blame.

    The fix is to disable the suspect and see whether the site recovers. If you can’t reach the dashboard, connect over SFTP or open your host’s file manager. Go to wp-content/plugins and rename the plugin’s folder, for example wp-optimize to wp-optimize-off. WordPress deactivates a plugin when it can’t find the plugin’s files. If you have no suspect, rename the whole plugins folder, confirm the site loads, then restore the plugins one at a time. Our guide to fixing a WordPress fatal error walks through the same folder method in detail.

    Once the site is back, decide what to do with the plugin. Rolling back to an older version brings the site back but may reopen security holes the update closed. Replacing the plugin, or waiting for a fixed release, is often the safer choice.

    PHP workers or host limits ran out

    Every uncached request needs a PHP process to build the page. Kinsta’s documentation says each PHP thread handles one request at a time. When all the threads are busy, new requests time out or get a 503 or 504. Cached pages skip PHP, which is why the homepage can load while /wp-admin, the cart and checkout fail. Those pages can’t be served from cache, so they use up the workers first.

    You can’t see this from inside WordPress. Look at your host’s resource dashboard for CPU, memory, I/O and process limits at the time of the failure. Then ask the host directly: were PHP workers or entry processes maxed out at that time, and which requests were slow? The fix might be caching more pages, fixing a slow query or a plugin that makes runaway requests, or a bigger plan. Only take the bigger plan once the logs show capacity is the actual limit.

    The site is stuck in maintenance mode

    During an update, WordPress creates a file named .maintenance in the site root. WordPress’s Advanced Administration Handbook explains that if the update is interrupted, the file stays behind and the maintenance message keeps showing. Make sure the update has really stopped by waiting a few minutes first. Then delete .maintenance over SFTP or in the file manager, and run the update again from Dashboard, then Updates. Dot-files are often hidden, so you may need to turn on “show hidden files” in your file manager.

    If you delete the file while an update is still running, the site can end up half-updated. That is worse than the message.

    A security plugin or server firewall blocked the request

    A 503 on the login screen with a security plugin’s branding is usually a brute-force lockout, not an outage. Check how the plugin detects visitor IP addresses, since behind a proxy everyone can look like the same visitor. Also check whether it locks out invalid usernames immediately. Renaming the plugin’s folder gets you in, but it also switches off your protection. In one reported case, the lockout came back once the plugin was restored.

    Server firewalls can do the same. WooCommerce’s documentation says mod_security blocking requests can cause 503 errors when saving large amounts of data, such as many product variations, and that your host can configure or disable the rule. Ask the host to allow the legitimate request. If you switch any firewall off to test, switch it back on afterwards.

    Cloudflare or another proxy sent the 503

    Cloudflare’s support docs say that if the 503 page contains “cloudflare” or “cloudflare-nginx”, Cloudflare generated the response. If it doesn’t, the 503 came from your origin server and you should investigate there: overload, exhausted connections, maintenance mode. Even a Cloudflare-generated 503 only tells you which layer answered, not why. A quick way to see the headers is curl -I https://yoursite.com from a terminal. Look at the status line and the server header.

    One element on one page

    When only one URL fails, look at what is on it. Forum cases include a Contact Form 7 block with no form selected, and a WooCommerce product-category element on a front page. Each was fixed at that page: selecting a form in one case, swapping the element in the other. Broad fixes miss problems like these. In one WordPress.org thread, a store owner ran a full conflict test, raised PHP memory, cleared caches and reinstalled WooCommerce. The cart still returned 503s. The cause turned out to be requests to an old /cart/ URL being caught by a temporary must-use plugin.

    How do you read the logs without exposing them?

    Your host’s server and PHP error logs are the first place to look, and reading them changes nothing on the live site. If PHP errors are involved, WordPress can also write its own log. Add these lines to wp-config.php above the line that says “That’s all, stop editing”:

    define( 'WP_DEBUG', true );
    define( 'WP_DEBUG_LOG', true );
    define( 'WP_DEBUG_DISPLAY', false );

    WordPress’s debugging handbook explains that this writes errors to wp-content/debug.log instead of printing them on the page. Keep display off on a live site. Errors shown in the browser can reveal file paths, query fragments and sometimes data. Reproduce the 503, read the entries with matching timestamps, then set WP_DEBUG back to false and delete the log. WooCommerce gives the same advice: switch debugging off once the problem is diagnosed.

    wp-config.php debug settings for diagnosing a WordPress 503 error
    Defining WP_DEBUG_LOG inside wp-config.php routes PHP errors directly into a private log file instead of exposing them on your live pages. · Source: www.inmotionhosting.com

    A memory error such as “Allowed memory size of 536870912 bytes exhausted” names the request that hit the limit. It doesn’t always show what caused it. Follow the file path in the error back to the plugin or block it names.

    What does a conflict test miss?

    The standard test, as WooCommerce’s conflict guide describes it, goes like this. Take a backup and use staging if you can. Switch to a default theme and deactivate plugins except WooCommerce and the extensions involved. Reproduce the problem, then reactivate plugins one at a time. It is the right method, and it has blind spots.

    • Must-use plugins and drop-ins. WooCommerce notes that host-installed MU-plugins and drop-ins may not be deactivatable but can still cause conflicts. Look in wp-content/mu-plugins yourself.
    • Caching. A page cache or CDN can keep serving the old result, so purge caches between tests.
    • Live stores. Turning off plugins on a store taking orders can break payments and emails. Use staging, or pick a quiet hour and keep the test short.

    Before any rollback or restore, confirm you can actually get back. A backup job that reported success is not the same as a backup that restores. Our explainer on what a backup plugin covers explains the difference.

    WordPress’s Recovery Mode, available since version 5.2, helps when a plugin or theme causes a fatal PHP error. It emails the administrator a link and pauses the faulty extension for that session. It is built for fatal errors, so don’t expect it to catch a 503 caused by exhausted workers or a firewall rule.

    Why more memory often isn’t the fix

    “Increase PHP memory” and “upgrade your plan” are the most common advice in 503 threads. Sometimes they are right. A host raising PHP limits has fixed an orders page, and moving hosts has ended 503s caused by a plan that was too small. But Kinsta’s documentation points out the catch on its platform: raising the memory for each PHP thread leaves fewer threads. If the problem is how many requests can run at once, more memory per request means fewer requests served.

    In an r/webdev thread, one commenter called buying more RAM without finding the cause “a sales pitch not a resolution”. That is the right instinct. Get the log line or the worker graph first, then decide what to buy.

    Restarting PHP, switching PHP versions back and forth, or having the host restart the server often brings the site back for an hour. That is a symptom going quiet, not a fix. If the 503 comes back on a pattern, such as every five minutes or after a few minutes logged in, the pattern itself is evidence to give the host.

    How long can a 503 stay up before search engines notice?

    Google’s Search Central guidance treats a 503 as temporary, and for planned downtime that is the right signal. For a deliberate shutdown of a day or two, Google recommends returning 503 with a Retry-After header. It also says not to return 503 for robots.txt and not to use 404, 410 or noindex as a temporary signal. Google’s crawl troubleshooting page adds that if 503s go on for more than about two days, Google may start dropping URLs from its index. A 503 is a way to buy a day, not a way to sit out a broken site.

    Search Console report showing 503 server errors on a WordPress site
    Tracking 5xx server errors in Google Search Console highlights the crawl failure spikes that can eventually cause search engines to drop affected URLs from the index. · Source: servebolt.com

    When to stop and get help

    Stop changing things if any of these is true:

    • the logs point at the server, PHP workers or a firewall rule
    • the 503 keeps returning after a restart
    • you have disabled the obvious plugin and nothing changed
    • you are about to restore a backup on a store that is taking orders

    Each extra guess on a live site adds a change someone will have to undo later.

    Send your host a short note they can act on:

    1. The failing URLs, and whether they fail for logged-out visitors, logged-in users or both.
    2. The exact times, with your timezone.
    3. The exact message, and whether the page mentions Cloudflare.
    4. What changed just before.
    5. Any matching log lines.
    6. What you already tried and ruled out.

    Ask specifically about PHP worker usage, slow requests and firewall rules at those times. A specific ticket gets someone to check the logs. A vague one gets a suggestion to upgrade.

    If you’d rather not dig through logs and file managers yourself, the SiteSelf page on WordPress bug fixes explains how the agent works through errors like this one, using hosting (SSH) access for log and file work, and reports what it changed and what it checked.

    Frequently asked questions

    Is a 503 error my fault or my host’s?

    It can be either. The host or web server sends the 503, but a plugin, a slow query or an unconfigured block can be what pushed it there. The scope table above, plus your host’s resource graph for the time of the failure, usually settles which.

    Why does wp-admin show a 503 while the public site works?

    Public pages are often cached and skip PHP, while every admin request runs PHP. If workers are exhausted, a plugin is running heavy admin tasks, or a security plugin has locked you out, the dashboard fails first. Check host limits and your security plugin before anything else.

    How do I fix a 503 if I can’t log in at all?

    Use SFTP or your host’s file manager. Rename the suspect plugin’s folder in wp-content/plugins, or rename the whole plugins folder if you have no suspect. If that doesn’t help, ask your host to check the server logs, because the cause may sit outside WordPress.

    Should I use a maintenance plugin that returns 503 on purpose?

    For planned work, yes. A deliberate 503 tells search engines the downtime is temporary. Keep it short, keep robots.txt reachable, and switch it off when the work is done, since a maintenance page left on is a self-inflicted outage.

    What does “Error 503 backend fetch failed” mean?

    That wording comes from Varnish, a caching proxy some hosts put in front of WordPress. Varnish asked your server for the page and didn’t get a usable answer in time. Treat it like any origin-side 503: check host resources and logs, and ask the host whether Varnish or PHP was the bottleneck.