Blog

  • How to upgrade a WordPress theme without breaking it

    Key takeaways

    • A theme update replaces the theme’s files, so any edit made directly in them is gone. WordPress’s Updates screen documentation warns about this.
    • A child theme keeps your files from being overwritten. It doesn’t make them compatible with a changed parent. One Neve user had a child theme, cleared every cache, and still saw buttons, menus and spacing change.
    • Back up right before the update, not the night before. Kinsta’s docs note a daily backup can be up to a day old, and on a store, pushing a whole staging database to live can wipe out the orders placed since.
    • Read the error before you retry. ‘Could not create directory’ means permissions or ownership. A 504 timeout may hide an update that actually finished.
    • If the site breaks, roll back first (from your backup, or with WP Rollback for WordPress.org themes) and debug on a staging copy.

    The WordPress.org theme directory put 37,210 theme updates live in 2024. Most went through without anyone noticing. The ones that didn’t usually broke something quietly: a menu that changed shape, a button that lost its style, a checkout field that vanished while the homepage still looked fine.

    Clicking Update is not the risky part. The risk is in four things around it: where your customizations live, whether you have a backup you can restore, whether you tested on a copy first, and whether the server can write the new files. This guide covers each one, then what to do when an update fails or breaks the site.

    Are you updating your theme or replacing it?

    “Upgrade” can mean two different jobs, and they need different plans.

    Updating means installing a newer version of the theme you already use. It’s maintenance. You back up, protect your custom code, test, and click. Most of this article covers that job. For the click-by-click version, see our guide on how to update a WordPress theme.

    Switching means moving to a different theme, or redesigning the site. That’s a project. Menus may need reassigning. Content built with a theme’s own builder or custom post types may not carry over. If any URLs change, you also need redirects. A theme update on its own doesn’t change URLs, so it doesn’t need that SEO work.

    What survives a theme update, and what doesn’t

    The update replaces the theme’s folder with the new version. Whether a customization survives depends on where it’s stored.

    Where the customization livesWhat the update does to it
    Edits inside the parent theme’s files (functions.php, style.css, templates)Overwrites them. They’re gone unless you have a backup.
    A child theme’s filesLeaves them alone. They can still break if the parent changed a class, hook or template they rely on.
    Customizer and theme settings in the databaseUsually keeps them. A major redesign of the theme’s options panel may ask you to pick some settings again.
    Site Editor templates (block themes)Keeps them in the database, and they take priority over the theme’s files. One 2025 support thread reports them lost anyway, so back up regardless.
    WooCommerce template overrides in the themeLeaves your old copies in place. They don’t pick up WooCommerce’s newer template changes.

    Two details catch people out. First, if you create a child theme after an update has wiped your edits, the edits don’t come back. Second, the Site Editor rule works in reverse: if you saved a customized template, the theme’s new version of that file won’t show on the front end. That’s why some people update a block theme and see nothing change. Check Appearance → Editor → Templates for a customized copy, and decide whether to keep it, revise it or reset it.

    If you’re not sure where your changes live, our explainer on theme customization that survives updates shows how to find each layer.

    Before you click Update

    What you need: an administrator login for the dashboard. For a stuck update or a permissions fix, you also need file access through your host’s file manager, SFTP or SSH. For a premium theme, you need a valid license.

    1. Write down the current version. Go to Appearance → Themes, open the theme’s details and note the version number. If a child theme is active, note the parent too.
    2. Find edits in the parent theme. If anyone edited the parent’s files directly, through Appearance → Theme File Editor, a file-editor plugin or FTP, move those changes into a child theme or a snippets plugin first. Add only your own code to the child theme. The Child Themes handbook warns that copying the parent’s whole functions.php causes fatal errors from functions declared twice.
    3. Read the changelog. Look for removed features, changed templates and new minimum WordPress or PHP versions.
    4. Take a fresh backup of files and database, and know how to restore it. In one WordPress.org thread, a normal backup restore failed and the host had to rebuild the site. Our explainer on what a backup plugin covers explains why a backup job that “succeeded” can still leave you without a site.
    5. Test on staging if the site sells or is heavily customized. Refresh the staging copy from live first, run the update there, and check it. Then run the same update on live. On a store, don’t push the staging database over the live one. Kinsta’s documentation warns that a full-database push overwrites live orders, comments, form entries and users.

    How to run the update

    For a theme from the WordPress.org directory, go to Dashboard → Updates, tick the theme and click Update Themes. You can also use Appearance → Themes, where an update banner appears on the theme’s card. You don’t need to deactivate a child theme to update its parent.

    Premium themes update through the vendor’s updater, and that only works with an active license. If no update appears, check the license before anything else. Downloading the package from your vendor account and uploading it is a legitimate alternative.

    Update one high-risk thing at a time. If you update the theme, WooCommerce and a page builder together and checkout breaks, you won’t know which one did it. Theme and plugin updates share the same screen and fail in the same ways, so they need the same discipline. If you’d rather not run this routine yourself, SiteSelf handles plugin and theme updates through chat and reports what changed and what it checked.

    What a correct result looks like

    The success message only tells you the files were copied. It doesn’t tell you the site works. Check these on desktop and mobile:

    • The homepage, one post, one page and an archive.
    • The main menu, including dropdowns.
    • Every form, all the way through submission and the email that follows.
    • On a store: a product page, cart, checkout and My Account. Place a test order.
    • The PHP error log, for new warnings or fatal errors.

    Then go back to Appearance → Themes and confirm the version number moved. On WooCommerce, open WooCommerce → Status. The System Status report lists template overrides in your theme and flags any that are out of date.

    What the error message tells you

    Failed updates leave specific messages, and each one points to a different fix. Retrying again and again, or loosening permissions across the board, often makes things worse.

    What you seeWhat it usually meansWhat to do
    “Could not create directory”, or mkdir_failed_ziparchive in Site HealthWordPress can’t write to wp-content because of permissions or file ownershipAsk your host to fix ownership. WordPress’s handbook gives 755 or 750 for directories and 644 or 640 for files. Never set 777.
    A checksum mismatch, or “The package contains no files”The download was blocked, cut short or couldn’t be storedCheck disk space, outbound connections and any security plugin or firewall that might block it
    No update offered for a premium themeAn expired or unregistered license, or the vendor’s updater is blockedRenew or re-enter the license, or download the package manually from your vendor account
    “Update failed: 504 Gateway Timeout”The server stopped waiting. The update may still have finished.Check the installed version before you retry
    “Briefly unavailable for scheduled maintenance. Please check back in a minute.”The update was interrupted and left a .maintenance file in the site rootDelete .maintenance, then check whether the update completed

    The 504 case is real. In one WordPress.org thread about the X theme, the dashboard said the update failed, but the theme had already moved up to 10.6.4. Retrying a finished update just adds confusion.

    Uploading the theme by hand can get you past a permissions error. It doesn’t fix ownership, though, so the same error comes back on the next update. Treat a manual upload as a stopgap and get the host to fix the cause.

    How to recover when the update broke the site

    Get back to a working state first, and debug afterwards.

    1. Roll back. Restore the theme files from your backup. For themes from the WordPress.org directory, the WP Rollback plugin can install a previous version. Restore files before you consider restoring the database: on a store, an older database also brings back an older order list.
    2. Isolate the cause if you can’t log in. Over SFTP or your host’s file manager, rename the theme’s folder in /wp-content/themes/. WordPress falls back to a default theme. If the site comes back, the problem is in the theme or child theme. Our guide to the WordPress white screen walks through this in more detail.
    3. Fix the child theme against the new parent. In one Astra thread, turning the old child theme back on didn’t help. What worked was updating the parent, creating a new child theme and reapplying the styling.
    4. Update stale WooCommerce overrides one file at a time. WooCommerce’s template docs say overrides in your theme need updating separately. Back up the old file, start from the current WooCommerce template and reapply your changes. Deleting the override removes your customization. Keeping the old one means missing WooCommerce’s newer changes.

    Clearing the cache is worth one try, but it rarely fixes a layout broken by an update. In one Neve thread, the user had cleared every cache and still had a broken design.

    When to stop and get help

    Call your host when the error is about permissions, ownership, disk space or downloads. Those are server problems, and the host can see things your dashboard can’t. Call the theme vendor when a premium theme’s updater or license fails, or when the changelog doesn’t explain a change in behavior.

    Get a developer when several WooCommerce templates are outdated, when nobody knows what was edited in the parent theme, or when the site broke and your backup won’t restore. Take the theme version, the exact error text and the time of the update with you. That turns a vague support request into a quick fix.

    Frequently asked questions

    Will updating my theme delete posts, pages or images?

    No. Posts, pages and media are stored apart from the theme, and an update only replaces theme files. If content seems to disappear after an update, the theme usually changed how it shows that content. Check caches, plugins and a default theme before you assume anything was deleted.

    Does a child theme update automatically with its parent?

    No. Updating the parent leaves the child theme’s files untouched. That protects your work, but it also means template overrides in the child theme, including WooCommerce templates, don’t pick up the parent’s changes. Review them after any major parent update.

    Should I turn on automatic theme updates?

    It depends on what a broken page costs you. Updates often include security fixes, which argues for applying them quickly. On a store or a heavily customized site, an unattended update you never tested can break checkout without anyone noticing. A common middle ground is auto-updates for simple sites and staged manual updates for sites that earn money.

    Why does my site look the same after updating a block theme?

    A template you saved in the Site Editor is probably overriding the theme’s new file. Open Appearance → Editor → Templates and look for customized templates. Caching is the other common cause.

    Does updating a theme hurt SEO?

    Not by itself. An update doesn’t change your URLs. A switch or redesign can, and then you need a redirect for every URL that moves.

  • How to fix SSL handshake failed on WordPress

    Key takeaways

    • Cloudflare Error 525 happens only when the SSL/TLS mode is Full or Full (strict). The fault is the certificate, port 443, SNI or cipher setup on your origin server. WordPress is not the cause.
    • Switching Cloudflare to Flexible hides a 525 by dropping encryption between Cloudflare and your server. If the server redirects HTTP to HTTPS, Flexible also causes a redirect loop.
    • cURL error 35 in Site Health or a plugin log means WordPress failed to connect out to another service. Really Simple Security’s advice is to update PHP and cURL first, then ask the host.
    • WooCommerce’s docs say to change the WordPress Address and Site Address to https:// only after the certificate works on the server. Doing it earlier can trigger ssl_error_rx_record_too_long on every page.
    • Most lasting fixes belong to the host or the CDN. Your part is precise evidence: the exact error, the time, who is affected, and what happens with Cloudflare paused.

    A customer sends a screenshot that says “SSL handshake failed.” The site loads fine on your laptop, the certificate dashboard says valid, and nobody has touched the theme. Don’t reinstall the certificate or start deactivating plugins yet. A WordPress site has at least three connections that can fail this way, and each has a different fix and a different person who can fix it.

    An SSL handshake is the negotiation two machines go through before they send each other encrypted data. The protocol is really called TLS now, but the old name stuck. The two sides have to agree on a protocol version and a cipher, and the client has to accept the server’s certificate for the hostname it asked for. All of this happens before WordPress sees the request. So when the handshake fails on page load, a plugin or theme setting is rarely the fix.

    Which connection failed? Start with where the message appeared

    Where the error shows up tells you more than its wording does. Match what you see to one of these rows before you touch anything.

    Where you see itWhat it looks likeConnection that failedWho usually fixes it
    A Cloudflare-branded error page“Error 525: SSL handshake failed”Cloudflare to your serverYour host
    Site Health, a plugin log, a failed payment, licence activation or importcURL error 35WordPress to another serviceYour host, sometimes the remote vendor
    The browser, for every visitorssl_error_rx_record_too_long or a certificate warningBrowser to your serverYour host
    The browser, on one device or network onlyA handshake or certificate error that others don’t seeBrowser to your serverThe visitor’s device or network

    Write down four facts: the exact message and when it happened, whether it hits everyone or one device, whether a CDN or proxy like Cloudflare sits in front of the site, and whether it fails on page load or only on an outbound action such as checkout or email. If the browser can’t find the site at all, that is a DNS problem, not a handshake problem. The guide to fixing DNS_PROBE_FINISHED_BAD_CONFIG errors covers that case.

    Cloudflare Error 525 points at your server, not WordPress

    Cloudflare’s Error 525 documentation defines it as a failed TLS handshake between Cloudflare and your origin server. It can only happen when the zone’s SSL/TLS mode is Full or Full (strict). Cloudflare lists four causes: no valid certificate on the origin, port 443 (or your configured secure port) closed, no SNI support, and no cipher suite both sides share.

    That explains why the padlock can look fine while the site is down. Visitors see Cloudflare’s edge certificate. A 525 is about the certificate on your own server, which visitors never see. On WordPress sites the usual cause is a certificate on that server that expired, went missing after a migration, or was issued for a different hostname.

    1. Test the origin directly, keeping your hostname. With your server’s IP in place of the example address, run curl -v --resolve example.com:443:203.0.113.10 https://example.com/ or openssl s_client -connect 203.0.113.10:443 -servername example.com -showcerts. Check whether the connection completes, the certificate’s dates, the names it covers, and whether the chain verifies (Verify return code: 0 (ok)). Don’t leave out -servername. Without SNI, a shared server can hand back its default certificate and send you down the wrong path.
    2. If there is no valid certificate, install one for the exact hostname. Use a Let’s Encrypt certificate through your host, or a Cloudflare Origin CA certificate. Cloudflare suggests the Origin CA option when the origin has no certificate at all.
    3. If the connection never gets as far as a certificate, ask the host to check that something is listening on port 443, that no firewall is dropping Cloudflare’s requests, and that SNI and cipher settings are in place.
    4. If the error comes and goes, compare the failure times with the origin’s SSL error logs, as Cloudflare recommends. Twenty good responses in a row do not prove the problem is gone.
    5. Once the origin has a valid certificate, set the mode to Full (strict). Full encrypts the connection but does not validate the certificate. Full (strict) validates it and accepts either a public CA certificate or a Cloudflare Origin CA certificate.

    Pausing Cloudflare, or switching the DNS record from proxied to DNS-only, is a good test. If the site loads over HTTPS with the proxy off, the origin is reachable and the problem is in the Cloudflare-to-origin leg. Treat it as a test only. Fix HTTPS at the origin, then turn the proxy back on.

    Why switching to Flexible is the wrong fix

    Cloudflare’s Flexible mode sends traffic from Cloudflare to your server over plain HTTP. The 525 goes away because no handshake is left to fail. The broken certificate is still broken, and the traffic between Cloudflare and your host is now unencrypted. If your server or an SSL plugin redirects HTTP to HTTPS, every request bounces back and forth in a redirect loop that WordPress can’t break. Dropping from Full (strict) to Full lowers security in the same way without repairing anything.

    cURL error 35 means WordPress can’t reach another service

    Here the site loads for visitors. What fails is a request your server makes to somewhere else: a payment gateway, a licence server, an update check, an SMTP relay or a webhook. Common versions of the message include OpenSSL SSL_connect: Connection reset by peer, wrong version number, Peer reports incompatible or unsupported protocol version and gnutls_handshake() failed.

    Really Simple Security’s article on cURL error 35 says the error appears when PHP’s cURL library can’t make the SSL connection. Its first step is updating cURL and PHP, and its second is asking your host. Practitioners add a few more causes: an outdated OpenSSL library or CA bundle, a remote service that requires a newer TLS version than your server offers, and a firewall, mod_security rule or security product that interferes with outbound traffic.

    That last cause can come from a surprising place. In one WordPress.org support thread, email failed on more than ten sites, and the cause turned out to be Norton 360’s outbound email scanning.

    Two checks narrow it down:

    • Site Health. Go to Tools > Site Health. The WordPress support handbook explains that Health Check tests two separate things: whether visitors reach the site securely, and whether WordPress can talk securely to outside services. A failure in the second test confirms an outbound problem.
    • One plugin or all of them. If only one plugin’s feature fails, such as a social login or a single licence activation, while updates and other connections work, the cause is probably that plugin or its vendor’s server. Contact the vendor early. If the remote end is the problem, nothing you change on your own site will fix it.

    Don’t make the error go away by turning off certificate verification, for example by setting sslverify to false or disabling CURLOPT_SSL_VERIFYPEER. Your server would then accept any certificate, including a forged one, on the same connections that carry payments and licence keys.

    When the browser refuses the connection

    Every visitor sees it

    WooCommerce’s documentation for ssl_error_rx_record_too_long describes a browser that expected HTTPS and got unencrypted data back. The listed causes are no certificate, a wrong port setting, a misconfigured Apache VirtualHost for port 443, or WordPress URLs switched to HTTPS before the server could serve HTTPS. That last one can trigger the error on every page request.

    The order matters. Your host gets HTTPS working on the server first. Only then do you change the WordPress Address and Site Address under Settings > General to https://, which is the sequence WooCommerce’s SSL and HTTPS guide gives. If those two fields are greyed out, WordPress.org’s Settings General documentation explains why: WP_HOME or WP_SITEURL is defined in wp-config.php, so you edit them there. The article on securing Apache for WordPress walks through the full HTTPS sequence on an Apache server.

    Only one device or network sees it

    If the site works everywhere except one phone or one office, look at that phone or office. Check that the device’s clock is correct, update the browser, and try a private window with extensions off. Then try mobile data instead of the office Wi-Fi. Antivirus software and corporate networks that inspect TLS traffic can swap in their own certificates or break the negotiation. Turn security software off only for a quick test. If that was the cause, allowlist the site and switch the protection back on.

    Lookalikes that are not handshake failures

    “Not Secure” after installing a certificate. This is mixed content. The page is HTTPS but still loads some images, scripts or stylesheets over http://. WooCommerce’s fix is to change those URLs to HTTPS or to relative paths. A database search-replace does this more cleanly than a plugin that rewrites URLs on every page load.

    Too many redirects. Two layers are forcing HTTPS against each other. WooCommerce’s SSL guide names Easy HTTPS Redirection conflicting with Force SSL as one example. Pick one layer to handle HTTPS and switch off the others.

    An expired-certificate warning. Renew the certificate, then find out why automatic renewal failed. A common reason is a firewall rule that closed port 80, which Let’s Encrypt’s HTTP-01 challenge needs.

    When to stop and hand it to your host

    Stop once the fix involves installing a certificate, changing server or VirtualHost configuration, opening a port, changing a firewall, or upgrading PHP, cURL or OpenSSL. That work belongs to your host or server admin, and a settings change in WordPress can’t stand in for it. Send them a ticket they can act on:

    • the affected hostname and the exact error text, with times and time zone;
    • whether it hits every visitor or one device, and on page load or on an outbound action;
    • your Cloudflare SSL/TLS mode, and whether the site loads with the proxy paused;
    • the output of the curl or openssl test and the Site Health message.

    If you’d rather not run these checks yourself, SiteSelf can take on fixing errors on your WordPress site from a chat request. It uses hosting (SSH) access for server-side work, reports what it found and checked, and does not change settings in your Cloudflare account. Once the site is back, add certificate expiry and renewal checks to your WordPress website care plan so the next expiry doesn’t take the site down first.

    Frequently asked questions

    Do I need a certificate on my server if Cloudflare already gives me one?

    Yes, if you use Full or Full (strict), and you should use Full (strict). Cloudflare’s certificate only covers the connection between visitors and Cloudflare. Your server needs its own certificate for the connection from Cloudflare to the origin, either from a public CA such as Let’s Encrypt or a Cloudflare Origin CA certificate.

    Can an SSL plugin fix a handshake failure?

    No. The handshake happens before WordPress runs, so a plugin can’t repair a missing certificate, a closed port or an outdated OpenSSL. SSL plugins can help with mixed content and redirects. Stacking several of them is a common cause of redirect loops.

    Why does the 525 only happen some of the time?

    Intermittent 525s usually mean something between Cloudflare and the origin drops some connections, such as a firewall, rate limiting or an overloaded server. Note the exact times of failures and ask your host to check the origin’s SSL error logs for those times. Don’t call it fixed after a short run of successful loads.

    Should I leave the Cloudflare proxy turned off?

    Only while you test. Turning the proxy off tells you whether the origin works on its own. It doesn’t fix anything, and you lose whatever Cloudflare was doing for the site. Get HTTPS working at the origin, then turn the proxy back on with Full (strict).

    Is it safe to change the site URLs back to http:// to get the site loading?

    It can get you back into the dashboard, but it is a stopgap. Visitors lose HTTPS, and you will have to redo the switch later in the right order. A better move is to have the host fix the certificate and VirtualHost, then keep the URLs on https://.

  • How to edit the homepage on WordPress without guessing

    Key takeaways

    • Go to Settings → Reading first. If it says “Your latest posts”, you have no Home Page to edit, because a theme template builds the front page.
    • In a block theme, the Front Page template overrides the Page you picked in Reading settings. In a classic theme, a front-page.php file does the same job.
    • On Elementor sites, open the live homepage and click Edit with Elementor. Don’t edit it in the block editor too, and check that you have the right copy, because re-importing starter templates can leave you with two pages called Home.
    • WP Engine’s docs say caching is the most common reason an update doesn’t appear right away. Clear the plugin, host and CDN caches, then check in a private window.
    • In WooCommerce, the Shop page and the homepage are set in different places. The product grid comes from the Product Catalog template, not from the Shop page’s text.

    You change the headline, click Save, open the site in another tab, and the old homepage is still there. WordPress probably did save your edit. It just saved it somewhere visitors never see.

    A WordPress homepage can come from a list of your latest posts, a static Page, a block theme template, a classic theme file, a page builder layout, or a mix of these. The Page called “Home” in your Pages list may not be the one on screen. So the steps below start by finding what actually builds the page. The editing comes after that.

    What controls your homepage? Check before you edit

    It takes about two minutes and three checks. Do them in this order. Each answer tells you where to go next.

    1. Settings → Reading. Look at “Your homepage displays.” If it says A static page, write down the Page picked under Homepage. If it says Your latest posts, there’s no Page to edit. A theme template builds the front page.
    2. Your theme type. Look under Appearance. If you see Editor, you have a block theme. If you see Customize and no Editor, you have a classic theme.
    3. The editor the Page opens in. Go to Pages → All Pages and open the Page you wrote down. If it opens in Elementor, Divi or another builder, or shows an “Edit with…” button, that builder owns the layout.

    Now find your setup below:

    What you foundWhere the homepage is edited
    Static page, block editor, no Front Page templatePages → All Pages → the Page you wrote down
    Block theme with a Front Page templateAppearance → Editor → Templates → Front Page
    Latest posts, block themeAppearance → Editor → Templates → Home (or Blog Home)
    Classic themeThe Page you wrote down, plus Appearance → Customize for theme sections
    Page builderOpen the Page you wrote down and launch that builder

    If you still need to choose a Page as the homepage, our guide to setting a static front page walks through it. The Homepage and the Posts page have to be two different Pages.

    How to edit a static homepage in the block editor

    This is the usual setup. If Reading names a Page and that Page opens in the block editor, here’s how to change it:

    1. Go to Pages → All Pages and open the Page named in Reading settings. Don’t open another Page that also happens to be called Home.
    2. Click the text, image or button you want to change. Each item is its own block. For long pages, the List View button in the top toolbar helps you find the right one.
    3. Use the right-hand sidebar. The Block tab has settings for the item you selected. The Page tab has page-wide settings, including which template the Page uses.
    4. Check button links separately. Changing a button’s text leaves its link where it was.
    5. Click Save and wait for it to finish. Then open the public homepage in a private window.

    Before a bigger rewrite, look at the Revisions panel in the Page sidebar. That’s your way back for text and image changes. For anything that changes the layout, make a backup first or try it on a staging copy. For more on block-level editing, see editing pages without breaking them.

    If you’d rather describe a change like this than make it yourself, SiteSelf can make homepage edits through chat on your live site and report what it changed and checked. One limit: it refuses to work on pages built with Elementor, Divi or Beaver Builder, and tells you so when you ask.

    How to edit a block theme homepage in the Site Editor

    If your theme has a Front Page template, that template is your homepage. WordPress.org’s Site Editor guide says the Front Page template always takes precedence over the Reading setting. So editing the Page you assigned can change nothing at all.

    1. Go to Appearance → Editor → Templates.
    2. Look for Front Page. If there isn’t one and your site shows latest posts, open Home or Blog Home.
    3. Open List View and look at the structure before you change anything. A Query Loop block pulls in posts automatically. A Content block shows whatever is on the Page you assigned.
    4. Edit the template and save. If the header or footer is a template part, saving it changes every page that uses it, not only the homepage.

    Some themes don’t let you use a custom page as the homepage at all. One owner on WordPress.org’s support forum for the Jadro theme tried several pages, cleared the cache, and tested other browsers and devices. Support’s answer was to edit Appearance → Editor → Templates → Front Page, because the theme couldn’t show an assigned custom page. Check how your theme handles the homepage before you build a Page it will ignore.

    The Content block is the link between a template and a Page. In another forum thread, someone inherited a site on the Fotografie Blocks theme and saw Elementor’s message “The content area was not found in your page.” Their Front Page template had a Custom HTML block where the Content block should have been. Once the template had a proper content area and the static Home page was assigned, the problem went away.

    How to edit a classic theme homepage

    Classic themes split the work between two places. The Page you wrote down holds the content. Appearance → Customize holds the theme’s own options: logo, menus, Homepage Settings, and any sections the theme adds, such as a hero banner or featured services. If a section doesn’t show up in the Page editor, look for it in the Customizer.

    For developers, the order is set by WordPress’s Template Hierarchy, as described in the Theme Handbook. If a theme has a front-page.php, WordPress uses it for the front page before any page template, whatever the Reading setting says. Check for that file before you assume the Page controls the output:

    ls wp-content/themes/your-theme/ | grep -E "front-page|home"

    If front-page.php hard-codes the hero text, editors can’t change it in the admin. Moving that text into the Page content or a custom field gives them control again. Our guide on customizing a template safely covers doing this in a child theme.

    How to edit an Elementor or other page builder homepage

    Use the builder that made the page. Open the live homepage, click Edit with Elementor in the admin bar, make your change, then click Publish or Update and wait for it to finish. Starting from the live page means you’re editing the copy visitors actually see.

    Elementor’s help page on changes not appearing online gives two warnings worth following. Don’t switch the same page back and forth between Elementor and the WordPress editor, because that can mess up the content. And don’t turn off structural features like Flexbox Container or Grid to troubleshoot, because that can leave the front end blank.

    Duplicates are the other trap. In a WordPress.org thread about the Astra theme, re-importing a starter template created two Home pages and duplicate Elementor kits. Edits seemed to disappear when the owner switched pages from Elementor’s Recent panel, and deleting pages and re-importing made it worse. The fix that holds up is to check which Page Reading settings name, then open that one from Pages → All Pages. Find the live page before you delete or reset anything.

    On sites you inherit, the builder canvas is sometimes only a frame. Sections can be shortcodes, with the text stored in custom fields or theme files. If a section looks locked or empty in the builder, check for Advanced Custom Fields field groups and shortcodes before you rebuild it.

    Why editing the WooCommerce Shop page didn’t change your homepage

    The Shop page and the homepage are separate settings. WooCommerce’s docs put the Shop page under WooCommerce → Settings → Products. The homepage is still set in Settings → Reading. You can set the Shop page as your homepage, but that’s a choice you make, not the default.

    On block themes, editing the Shop page’s text often leaves the product grid alone. WooCommerce’s docs say the Product Catalog template controls the main Shop page’s layout. You edit it in Appearance → Editor → Templates.

    What a correct result looks like

    An edit is done when a visitor sees it, not when the editor shows it. Check these things against the published page:

    • Open the homepage URL in a private window while logged out. Logged-in users often skip the page cache and see a newer version than visitors do.
    • Look at it on a phone. A desktop layout doesn’t automatically look right on mobile, and large hero images get cropped or slow the page down.
    • Click every button and link you touched, and submit any form on the page.
    • Give new images alt text that says what they show, and keep headings real headings. Don’t style plain text to look like one.

    Search results update on Google’s schedule, not yours. You can use URL Inspection in Search Console to request indexing once. Google’s docs say recrawling can take days to weeks.

    Why your homepage edit isn’t showing, most likely causes first

    Go through these in order. Clearing the cache over and over won’t help if you edited the wrong page.

    You edited the wrong layer or copy

    This is the most common cause. It might be a Page that isn’t assigned, a template that overrides it, a duplicate Home page, or a staging or translated version. Go back to the three checks at the top of this article.

    The change isn’t published

    Preview isn’t publishing, and a draft isn’t live. Builders save drafts too. Check that the Page status says Published. WordPress.com’s support docs also point out that after a theme switch, the old homepage can end up in Pages → Drafts and need to be published and assigned again.

    A cache is serving the old page

    WP Engine’s documentation calls caching the most common reason an update doesn’t appear right away. There are caches at the plugin, server, CDN and browser level. Clear them in that order, then test in a private window. On Elementor sites, also run Elementor → Tools → Clear Files & Data so it rebuilds its CSS. Our guide to layout and design changes covers that step.

    Saving fails with an error

    You might see “Updating failed. The response is not a valid JSON response.” or a 500 Internal Server Error. These come from the server or a plugin conflict, not from the content. Check the server error log. Turn plugins off one at a time on a staging copy, starting with multilingual and optimization plugins. People often suggest raising the PHP memory limit. Sometimes it helps, often it doesn’t.

    When to stop and get help

    Stop and hand it to a developer or your host if any of these happen: the error keeps coming back after you’ve ruled out plugins, the homepage goes blank, or the fix means editing theme files you didn’t write. Don’t keep re-saving because it sometimes works. That makes it harder to tell which version is live. If the site is down, see our page on getting a broken site working.

    Frequently asked questions

    Why isn’t my homepage in the Pages list?

    Either your Reading setting shows latest posts, or your block theme builds the homepage from a template. In both cases, edit it in Appearance → Editor → Templates. If you just switched themes, check Pages → Drafts for the old homepage.

    Can the Homepage and the Posts page be the same Page?

    No. WordPress’s Reading settings need two different Pages. The Posts page only lists your posts, so anything you write on it won’t show.

    Will editing the Front Page template change other pages?

    The template itself only shows on the front page. But template parts inside it, like the header and footer, are shared. Saving one of those changes it on every page that uses it.

    Is it safe for a non-developer to edit homepage text and images?

    For text and image swaps in the block editor, yes. Revisions let you go back to an earlier version. Layout changes, template edits and theme files are where backups and a staging copy start to matter.

    My homepage is blank after editing. What happened?

    In a block theme, the Front Page template may have been emptied. Restore an earlier version from the template’s revisions before you reset it, because resetting wipes your customizations. On Elementor sites, check whether someone turned off Flexbox Container or Grid.

    Why does Google still show my old homepage title?

    Google recrawls pages on its own schedule. Request indexing once in Search Console’s URL Inspection tool, then wait. Google says that can take days to weeks, and sending more requests won’t speed it up.

  • WordPress login is not working? Fix it by symptom

    Key takeaways

    • If you type the right password and land back on wp-login.php, WordPress’s Advanced Administration Handbook points to cookies, mismatched site URLs, mixed HTTP and HTTPS, caching, or redirect rules at a CDN or proxy. Resetting the password won’t fix any of those.
    • Security, CAPTCHA, 2FA and login-hiding plugins cause many lockouts. In resolved WordPress.org threads the culprits included mismatched reCAPTCHA keys in Wordfence and a clash between Wordfence 2FA and Invisible reCaptcha.
    • If you still have dashboard access, use Health Check troubleshooting mode, which turns plugins off for your user only. If you don’t, rename one plugin folder over SFTP rather than switching every plugin off on a live site.
    • DreamHost calls a direct phpMyAdmin password reset ‘no longer recommended’. Try the reset email, WP-CLI or your host first.
    • Duplicator found that nearly 1 in 10 of its migration support tickets were wp-admin lockouts after an otherwise successful move. If the site moved recently, check the URLs first.

    “Login not working” covers about ten different failures. WordPress might reject your password. It might accept it and bounce you back to the form. The login page might be missing, a security plugin might have locked you out, or the site might be crashing before the form even loads. Each of these has a different fix.

    The most common mistake in support threads is resetting the password again and again. That only works when the password was the problem. So start with one question: does WordPress reject your credentials, or does it accept them and then fail? If you aren’t sure you’re even on the right login page, our guide on how to sign in to WordPress covers the default addresses first.

    Which kind of login failure do you have?

    Watch what happens after you click Log In. Each symptom points to a different layer of the site.

    What you seeWhere the problem usually isStart here
    “The password you entered is incorrect” or “unknown username”The account or the passwordBasic checks, then a password reset
    The form reloads or returns to itself, often with reauth=1 in the addressCookies, site URLs, cache, CDN or a pluginThe loop section below
    “Cookies are blocked or not supported by your browser”Authentication cookiesThe loop section below
    “Too many failed attempts”, a greyed-out button, a CAPTCHA that never passesA security or login pluginThe security plugin section below
    /wp-admin returns a 404 or sends you to the homepageA login-hiding plugin, redirect rules or the hostThe hidden login page section below
    “There has been a critical error” or a blank white pageA PHP fatal errorThe fatal error section below
    “Error establishing a database connection”The database or the serverYour host. A password reset can’t help here.

    Run these checks before changing anything

    These checks take two minutes, you can’t break anything with them, and they tell you whether the problem is in your browser or on the site.

    1. Check the username or email. WordPress’s documentation says usernames and passwords are case-sensitive. Your public display name isn’t your username.
    2. Check autofill. A password manager may be filling in an old password, especially if you reset it recently.
    3. Try a private window, then a second browser. If login works there, the cause is your browser’s cookies or an extension. If it fails everywhere and for other admins too, the problem is on the site.
    4. Use the exact address the site normally uses. Same domain, same HTTPS, same www or no www. If you log in at one version and the site lives at another, the browser can drop the cookie.
    5. Stop retrying for 15 minutes if you’ve failed several times. Lockout plugins can extend the block with every new attempt.

    If WordPress rejects your password

    Use the “Lost your password?” link on the login page. If the email never arrives, check spam first. WordPress’s troubleshooting FAQ says site email can fail when the server’s mail setup isn’t configured. The email may also be going to a different address from the one you expect. The admin notification address in Settings and your user account’s email are separate fields, and they don’t have to match.

    Also check that you’re using the right account. WordPress.com and a self-hosted WordPress site have separate logins. Your host, your domain registrar and WooCommerce.com each have their own login as well.

    If the reset email doesn’t work, your hosting account is the fallback. Most hosts let you reset or create WordPress users from their control panel. With SSH and WP-CLI you can do it directly:

    wp user list --fields=ID,user_login,user_email,roles
    wp user update 1 --user_pass='temporary-long-password'

    Log in, then set a proper password from your profile right away, because the temporary one is now in your shell history. Editing user_pass in phpMyAdmin is the last resort. DreamHost’s knowledge base calls that method “no longer recommended”. Old recipes that tell you to paste an MD5 hash are a common source of failed attempts.

    If the reset worked but the old password still seems to apply, the site may have a server object cache. DreamHost documents this on DreamPress Pro, where running wp cache flush over SSH clears the stale data.

    If the right password sends you back to the login form

    This failure has nothing to do with the password. WordPress accepted your credentials but couldn’t set or read its login cookie, or a redirect sent you somewhere else first. WordPress’s Advanced Administration Handbook lists these causes:

    • browser cookies are disabled, or a plugin conflicts with the login
    • the cookie domain doesn’t match the site
    • some URLs use HTTP and others HTTPS
    • a server cache is serving the login page
    • the WP_HOME and WP_SITEURL constants conflict, or the home and siteurl database options don’t match
    • redirect rules at a CDN, proxy, Nginx, Apache or the host

    Check the site URLs first, especially after a move

    Migrations are a common trigger. Duplicator reviewed more than 8,000 of its support tickets and found that nearly 1 in 10 migration tickets were wp-admin lockouts after a successful move, usually from URL mismatches or redirect loops. Read the stored values over SSH:

    wp option get home
    wp option get siteurl
    grep -E "WP_HOME|WP_SITEURL|COOKIE_DOMAIN" wp-config.php

    WordPress’s wp-config documentation explains the two settings. WP_SITEURL is where the core files live and WP_HOME is the public address. Constants in wp-config override the database options. Don’t just set both to the same value. On sites installed in a subdirectory they are meant to be different. If old URLs are left in the content, back up first and preview the fix before running it:

    wp search-replace 'http://old-domain.com' 'https://new-domain.com' --dry-run

    Then look at caches you can’t clear from the browser

    Clearing your browser cache doesn’t touch the host’s page cache, a caching plugin, a CDN, or an object cache in wp-content/object-cache.php. Exclude wp-login.php and any custom login address from page caching, then clear the server cache. In one Reddit case the loop came from a CDN the host had switched on. Turning it off fixed the loop. If someone else controls your DNS or CDN, for example a former developer’s Cloudflare account, changes inside WordPress may not help.

    “Cookies are blocked due to unexpected output”

    This variant means something printed output before WordPress could send its cookie headers. In one resolved WordPress.org thread, the cause was two blank lines at the end of the theme’s functions.php. The poster had already allowed cookies and cleared them, and neither helped. Look for whitespace after a closing ?> in functions.php, wp-config.php or a recently edited plugin file.

    When a security or login plugin is the cause

    Lockout, CAPTCHA, 2FA and login-hiding plugins protect the login page, and they also cause many of the lockouts people report. Two resolved WordPress.org threads show the pattern:

    • A Wordfence user could enter a username and password, but the Login button greyed out. The cause was mismatched reCAPTCHA keys. Updating the keys fixed it.
    • A site running Wordfence 2FA looped back to the form and never showed the code field. Reinstalling Wordfence and redoing the QR code didn’t help. Deactivating a second plugin, Invisible reCaptcha, did.

    Without dashboard access, open your host’s file manager or SFTP, go to wp-content/plugins, and rename the suspect plugin’s folder, for example wordfence to wordfence-off. WordPress deactivates a plugin whose folder it can’t find. Log in, fix the setting that caused the problem, and turn the plugin back on. Don’t leave it off as the fix.

    If the login page itself has disappeared

    Plugins such as WPS Hide Login move the login page on purpose. Their documentation says that while the plugin is active, /wp-login.php and /wp-admin become inaccessible, so guessing the default address won’t work. The custom address is stored as whl_page in the options table, or in sitemeta on multisite:

    wp option get whl_page

    Deleting or renaming the plugin’s folder brings back the default login. A cached 404 or a short redirect loop can follow, so clear the cache before assuming it failed.

    How to find a plugin conflict without breaking the live site

    If you can still reach any admin screen, use the Health Check & Troubleshooting plugin. Its troubleshooting mode turns plugins off and switches to a default theme for your user only. Visitors keep seeing the normal site while you turn plugins back on one at a time.

    If you’re locked out completely, rename folders one at a time, starting with whatever changed most recently. Renaming the whole plugins folder gets you in fastest, but it also switches off forms, checkout and security for every visitor, and it doesn’t tell you which plugin was at fault. Updates are a frequent trigger. In one thread, WPO365 version 42.2 sent /wp-admin to the homepage, and rolling back to 41.3 fixed it. Our guide to fixing WordPress plugins that stop working covers the isolation method in more detail.

    When the login page shows an error instead of a form

    A critical error message or a white screen is a PHP fatal error, not a login problem. WordPress’s Recovery Mode documentation says WordPress can email the admin a special login link after some fatal errors. Through that link you can deactivate the failing plugin or theme. It only works for some fatal errors, so if no email arrives, read the PHP error log before you start guessing. The file path in the error usually names the plugin. Our WordPress white screen guide walks through it.

    “Error establishing a database connection” means WordPress failed before it could show the form. Check the database name, user and password in wp-config.php against your hosting panel, and contact your host if they match.

    Customers can’t log in to a WooCommerce store

    Store customers log in through a different path from admins. WooCommerce’s documentation says the My Account page is set under WooCommerce → Settings → Advanced, and that page needs the [woocommerce_my_account] shortcode to show the sign-in form. For Social Login, WooCommerce lists these causes:

    • wrong provider keys
    • default (plain) permalinks
    • cURL missing on the server
    • cached authentication requests

    Exclude /wc-api/*, the wc-api query argument and wp_woocommerce_session* cookies from caching. Facebook login also fails when iThemes Security’s “Filter Long URL Strings” is on.

    When to stop and get help

    Stop and get help in any of these situations:

    • The fix needs SSH, the database, server logs, DNS or CDN settings, and you don’t have that access.
    • Plugin isolation didn’t identify a cause.
    • You see admin accounts, must-use plugins or redirects that nobody recognises. Treat that as a possible compromise rather than a login bug, and read our guide to WordPress malware removal before changing anything.

    Ask the original developer or agency first, then your host. Also check now who owns the domain, the hosting and the CDN account. A developer who disappears with your registrar login is a bigger problem than any login loop.

    If you’d rather not do this yourself, SiteSelf handles WordPress bug fixes like this one. You describe the symptom in chat. It needs hosting (SSH) access for file, cache and log work, says what it’s about to change and whether it can be undone, and reports what it checked afterwards.

    Frequently asked questions

    Is the login URL /wp-admin or /wp-login.php?

    Both work on a standard install. Visiting /wp-admin while logged out redirects to wp-login.php. If WordPress lives in a subdirectory, the path includes that folder. A login-hiding plugin replaces both with a custom address.

    Login works on my phone but not my laptop. Why?

    If one device works, the site is fine and the problem is local to the other device. Clear that browser’s cookies for your domain, turn off extensions, and check security software or a VPN. A loop that happens on every device and for every admin points back to the site.

    Should I delete .htaccess to fix an admin 404 or 403?

    Rename it, don’t delete it. Renaming lets you test whether a rule in it is the cause and put it back in seconds. Deleting it removes your permalink rules and any security rules your host or plugins added. Once you’re logged in, regenerate the WordPress section by saving Settings → Permalinks.

    Why does my AI tool or app reject my admin password?

    Access through the REST API uses Application Passwords, not your login password. Create one under Users → Profile → Application Passwords and give it to the tool. Retrying the admin password will keep failing however correct it is.

    Does changing the salt keys in wp-config.php fix a login loop?

    Changing the salts logs everyone out, which helps after a suspected compromise. It rarely fixes a loop caused by URLs, caching or a plugin. In one Reddit thread a team changed the salts and turned on debugging without effect, and a login-related plugin turned out to be the cause.

    Is it safe to edit wp-login.php?

    No. WordPress removed old advice that involved changing core files, and core updates overwrite any edits you make there. Every fix in this article works through settings, plugins, wp-config.php or the host.

  • How to fix a server error 500 on WordPress

    Key takeaways

    • Check the host’s PHP error log first. WordPress’s debug.log stays empty when the failure happens before WordPress loads.
    • Plugin and theme conflicts right after an update are the most commonly reported cause. One example: a 500 that appeared only on a WooCommerce product template after an Elementor 3.22.0 update.
    • Every standard fix has a trap: renaming .htaccess wipes custom redirects, WP_MEMORY_LIMIT can’t go above the host’s PHP cap, and WordPress says never to set directories to 777.
    • When the WordPress logs are clean, the cause is usually below WordPress: a full database, a max_allowed_packet limit, upload caps or firewall rules. Send the host the URL and the exact time.
    • Google slows crawling when it gets 5xx responses and can eventually drop URLs that keep returning them, so a 500 that only bots see still costs you.

    The page loaded an hour ago. Now it shows “500 Internal Server Error”, “HTTP ERROR 500” or nothing at all. The message names no file and no plugin, and turning plugins off at random can turn one failing request into a whole-site outage.

    Treat the 500 as a symptom. You fix it in three moves: find the log entry for the failing request, make the one change that entry points to, then confirm the original request works again.

    What a 500 tells you, and what it doesn’t

    A 500 tells you the server hit a problem it couldn’t recover from while building the response. It doesn’t tell you why. WordPress.org’s Advanced Administration Handbook lists several possible causes behind the same message: a corrupted .htaccess file, a plugin or theme problem, PHP running out of memory, and damaged core files. Hosts add permissions, PHP version mismatches, database limits and server configuration.

    Where the error shows up is your first clue. It can take down the whole site, only /wp-admin, or a single action: saving WooCommerce settings, publishing in a page builder, uploading media through async-upload.php, or checkout. If a PHP fatal error is caught by WordPress, you may see “There has been a critical error on this website” instead of a bare 500. If the screen is simply blank, our guide to fixing a WordPress white screen covers that version of the problem.

    Why the log comes before the plugin list

    The log entry is the diagnosis. Everything before it is guessing. WordPress, WooCommerce and the major hosts all give the same order:

    1. Write down the failing URL and the time. Note whether you were logged in and what you clicked.
    2. Reproduce it once. Now you have an exact timestamp to match in the log.
    3. Open the server’s PHP error log. On most hosts it sits in the control panel under a name like “Errors” or “Logs”. If you can’t find it, ask the host for the entries at your timestamp.
    4. On a WooCommerce store, also check WooCommerce → Status → Logs. WooCommerce’s documentation says this log records PHP fatal errors. Look for a log named fatal-errors.
    5. Read the file path and line number. A path inside wp-content/plugins/some-plugin/ tells you which plugin to look at.

    If the host log is out of reach and WordPress still loads far enough to run, turn on WordPress’s own log in 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 );
    @ini_set( 'display_errors', 0 );

    Errors then go to wp-content/debug.log and visitors don’t see them. WordPress’s debugging documentation says these tools are meant for local and staging sites and recommends logging over displaying. Turn the lines off when you’re done, because the log can hold file paths and request data.

    An empty debug.log tells you something too. In one WordPress.org support thread, the 500 happened before WordPress loaded, so WordPress never had the chance to write anything. That points you back to the server log.

    Which fix matches which log line

    What the log showsLikely causeFirst move
    Fatal error in /wp-content/plugins/name/That pluginRename its folder, then roll it back or update it
    Fatal error in /wp-content/themes/name/Theme or a recent code editRevert the edit or switch to a default theme
    “Allowed memory size of … bytes exhausted”PHP memoryRaise the limit, or ask the host to
    “Invalid command” or “Request exceeded the limit of 10 internal redirects” pointing at .htaccessRewrite rulesBack up the file, rename it, regenerate it
    “Permission denied”Permissions or ownershipReset to the host’s recommended values
    Failed opening a file in wp-includesMissing or damaged core fileReplace wp-admin and wp-includes
    Nothing from WordPress at allServer, database or firewallEscalate to the host with URL and time

    Nobody publishes measured data on which cause is most common. Support threads lean toward plugins, and some tutorials name .htaccess first. The sections below follow how often each one comes up in support threads.

    A plugin or theme, usually right after an update

    This is the pattern support forums see most. In one WordPress.org thread, updating Elementor to 3.22.0 produced a 500 only when editing a WooCommerce single-product template. The homepage still edited fine. Deactivating the ReviewX plugin made it go away, and reinstalling it did not.

    If wp-admin works, deactivate the suspect named in the log, or roll it back to the last version that worked. If wp-admin is down, connect over SFTP or the host’s file manager and rename wp-content/plugins/plugin-name to plugin-name-off. WordPress deactivates a plugin whose folder has disappeared. No suspect in the log? Rename the whole plugins folder, then bring plugins back one at a time. Our guide to fixing plugins that stop working walks through that routine.

    On a live store, turning plugins off breaks things for customers. The Troubleshooting plugin gives you a Troubleshooting Mode that disables plugins for your session only. Two cautions. Deactivating a plugin can trigger its own 500 when other plugins depend on it. And having everything switched off is a diagnosis, not a fix. Once you’ve found the culprit, turn the rest back on.

    A broken .htaccess file, on Apache only

    Download a copy of .htaccess from the site root, then rename the file on the server to .htaccess-old. If the site comes back, go to Settings → Permalinks and click Save Changes. WordPress then writes fresh rewrite rules. Copy any custom redirects or security rules back from your saved copy one block at a time, and test after each one.

    This only applies on Apache. On Nginx, WordPress doesn’t read .htaccess, and renaming it changes nothing. If the file keeps breaking after you fix it, something keeps rewriting it. Look at which plugin writes to it, often a security or cache plugin, and fix that.

    PHP memory exhausted

    Only raise memory when the log says “Allowed memory size … exhausted.” WordPress’s wp-config documentation gives the setting as define( 'WP_MEMORY_LIMIT', '128M' );. The host’s PHP memory_limit still caps it, so if your number has no effect, ask the host. A site that already has 512M or more and still runs out usually has a plugin stuck in a loop or loading too much data. Find that plugin rather than raising the limit again.

    File permissions

    WordPress’s permissions documentation gives 755 or 750 for directories and 644 or 640 for files, and says never to set directories to 777. A recursive 777 is a security hole, and it can still leave the wrong user owning the files. Use the values your host documents.

    Damaged core files

    When the log names a missing file in wp-includes or wp-admin, download the same WordPress version your site runs. Then replace those two folders. Leave wp-content and wp-config.php alone, since they hold your site.

    Causes below WordPress

    Some 500s never show up in WordPress logs. In one WordPress.org thread, a 500 that appeared only in wp-admin after a plugin update came from a database write hitting MySQL’s max_allowed_packet limit, not from a plugin bug. In an agency case study, a database on shared hosting had reached its 2 GB cap because one plugin’s logs were never rotated. Clearing the data would only have bought time. Changing the plugin’s logging settings stopped it from coming back.

    Other causes in this group: upload and request-size limits during imports, firewall rules such as ModSecurity rejecting legitimate requests, and underpowered hosting failing on and off under traffic. These are the host’s to confirm.

    How to tell it’s actually fixed

    A homepage that loads proves very little. Retest the exact request that failed. Then check the admin screen your team uses and one real transaction, such as a form submission or a test order. Read the log again for new fatal errors. Clear page and CDN caches separately: a cached error page can outlive the fix, and a cached good page can hide one that’s still broken. Turn debugging off, and write down what you changed and how to undo it.

    Check Google Search Console as well. Google’s crawler documentation says Google slows crawling when it gets 5xx responses and can eventually drop URLs that keep returning server errors. A plugin can return 500s only to bots or scripts, so “it works for me” doesn’t mean Google sees a working page. The URL Inspection live test shows what Google gets.

    When to stop and get help

    Stop when the WordPress logs are clean, when the log points at the database, PHP-FPM or a firewall, or when you can’t reach the files at all. Send the host the failing URL, the exact time you reproduced the error, and what you’ve already ruled out. Ask them to check the server log for that moment, your resource limits, and any firewall rule that matched. Before you restore a backup, read what your backup plugin actually covers, and make sure you aren’t restoring from the same source that broke the site.

    Access is the usual bottleneck. A freelancer with only a wp-admin login can do nothing once wp-admin itself returns 500, so get SFTP or control-panel access before the next incident. If you’d rather hand the diagnosis off, SiteSelf can find and fix site errors through chat. For a 500 that locks you out of wp-admin, it needs hosting (SSH) access, not just its connector plugin.

    Frequently asked questions

    Is a 500 error caused by my browser?

    No. A 500 comes from the server. Clearing your browser cache or trying another device is a cheap way to rule out a stale cached page, but it won’t fix the fault behind the error.

    Why does wp-admin return 500 when the front end works?

    Admin pages run code the public pages don’t, such as settings screens, update checks and database writes. Don’t assume it’s a plugin. In one WordPress.org case the cause was a MySQL max_allowed_packet limit. The log tells you which it is.

    Why does the 500 only happen at checkout?

    Checkout calls payment, shipping and anti-spam code that other pages never load. Check WooCommerce → Status → Logs. Then open the browser’s developer tools, go to the Network tab and run the checkout again. The request marked 500 shows you which endpoint is failing.

    Is “There has been a critical error on this website” the same thing?

    They’re related. That message is WordPress catching a PHP fatal error and showing a friendlier page. WordPress usually emails the admin address a link to a recovery mode, where you can pause the plugin or theme that crashed.

    Should I just switch PHP versions?

    Only when the log shows a compatibility error, such as a function that doesn’t exist in your PHP version. Switching without evidence can create new errors in plugins that haven’t been updated for the newer version.

    Will deleting .htaccess break anything?

    It removes any custom redirects, caching rules and security rules stored in the file. Download a copy first, regenerate the WordPress rules from Settings → Permalinks, then add your custom rules back one block at a time.

  • What an HTTP 405 code means on WordPress and how to fix it

    Key takeaways

    • RFC 9110 requires a 405 response to include an Allow header listing the methods the URL accepts. Read it before you change any setting.
    • On WordPress the refusal can come from the request, a cache answering a POST with static HTML, a firewall or host rule, web-server method settings, or plugin and custom code.
    • Saving Settings > Permalinks flushes rewrite rules, which fixes routing (404-type) problems. It doesn’t change which methods a URL accepts.
    • WordPress’s REST API Handbook advises against disabling the REST API, because the admin depends on it. Find the one rule that blocks the one route.
    • Google doesn’t index URLs that return a 4xx code other than 429, so a public page stuck on 405 will drop out of search.

    Your contact page loads fine, but clicking Submit returns “405 Method Not Allowed”. Or the store looks normal until an integration tries to update a product and gets the same answer. The site isn’t down. One request is being refused, and the code tells you what kind of refusal it is.

    What does a 405 tell you, and what doesn’t it tell you?

    Every web request is a URL plus a method. GET reads. POST submits. PUT and PATCH update, DELETE removes, and OPTIONS asks what is allowed. A 405 means the server reached the URL and recognised the method, but that resource doesn’t accept it. RFC 9110, the HTTP standard, defines the status this way. It also requires the server to send an Allow header that lists the methods the resource does support.

    That narrows the problem down without naming a culprit. On a WordPress site, the refusal can come from the request itself, WordPress routing, a plugin, leftover custom code, a cache, a security layer or the web server’s configuration. The fix depends on which of those said no.

    StatusWhat it meansWhere to look
    404 Not FoundThe URL doesn’t resolve to anythingPermalinks, rewrite rules, the address itself
    403 ForbiddenThe request reached something that refused accessPermissions, security rules, logins
    405 Method Not AllowedThe URL exists but rejects this methodThe method sent versus the Allow header
    501 Not ImplementedThe server doesn’t support the method anywhereServer software and configuration

    The 404 comparison is the one people get wrong most often. Much of the standard WordPress troubleshooting advice is written for 404s, and editing your custom WordPress 404 page won’t touch a method mismatch.

    How do you find the request that is failing?

    Capture the request before you change any setting. If you change settings first, you can lose the evidence and leave the cause where it was.

    1. Open the page in Chrome, Firefox or Edge and press F12. Choose the Network tab.
    2. Repeat the failing action once: submit the form, click Publish, add to cart.
    3. Find the request with status 405. It usually isn’t the page address. Look for admin-ajax.php, something under /wp-json/, or the form’s own handler.
    4. Note four things: the request URL, the method, the response headers (especially Allow) and the time.

    WooCommerce’s guide to troubleshooting AJAX issues uses the same Network-tab method. Then compare the method with the Allow list. If the request sent POST and the header says Allow: GET, HEAD, the request went to a URL that was never meant to take a submission, or something in front of WordPress answered for it.

    If you’re comfortable in a terminal, repeat the exchange outside the browser:

    curl -i -X POST https://example.com/wp-admin/admin-ajax.php

    The -i flag prints the response headers. A bare curl request has no form body, cookies or nonce, so it only shows which layer answers, not whether the real submission would succeed. If Allow is missing, or the response headers name a cache or a firewall, then something other than WordPress probably produced the 405. MDN’s 405 reference covers the header in more detail.

    Two cautions. Don’t keep resubmitting a checkout while you investigate. And don’t “fix” the request by switching POST to GET. A method that is allowed is only correct if it matches what the endpoint is for.

    When is a 405 not a problem at all?

    A browser address bar always sends GET. Paste wp-comments-post.php, admin-ajax.php or a form’s processing script into it, and a 405 or an error page is normal behaviour, because those URLs exist to receive POST. A 405 only matters when it shows up during the real action: the comment form submitting, the editor saving, the integration calling.

    What causes a 405 on a WordPress site?

    Nobody has published figures on which cause is most common, so be wary of any guide that claims to know. The list below runs from cheapest to check to most involved, and leans on cases where someone reached a confirmed fix.

    The request uses the wrong method for that endpoint

    WordPress REST routes are specific to each method. The REST API Handbook’s key concepts page explains that one route maps to separate endpoints by method. The posts route lists posts on GET and creates one on an authenticated POST. A route that accepts POST doesn’t automatically accept PUT or DELETE. Check the documentation for that exact endpoint.

    For WooCommerce integrations, check three things in the WooCommerce REST API documentation. The permalink structure can’t be Plain. The API key needs Write or Read/Write permission to change data. And the integration must not depend on the legacy REST API, which was removed from WooCommerce core in version 9.0. Install the separate WooCommerce Legacy REST API plugin only if the integration really calls the legacy API. It isn’t a general 405 fix. Seeing JSON at /wp-json/ only proves the API index responds. It doesn’t prove the route you need works.

    A cache is answering a POST with a static page

    Forms or add-to-cart buttons that fail only when caching is on point here. The server hands a cached HTML file to a request that is trying to submit data, and a static file can’t accept POST. In one WordPress.org support thread, Gravity Forms and WooCommerce AJAX requests returned 405 on a server running WP Rocket behind WordOps Nginx rules. The owner fixed it by replacing those Nginx rules with the SatelliteWP rocket-nginx configuration, and kept WP Rocket.

    That is one case, not proof that WP Rocket causes 405s. The lesson is narrower: when switching off a cache plugin “fixes” it, the real fault may be the server rules around the plugin. If you can’t change the server rules, exclude the affected URL. In WP Rocket that is Advanced Rules, then Never cache URL(s), one URL or path per line. WP Rocket notes that an excluded page also loses its other optimizations. Keep the exclusion narrow, and remember that a pattern like /(.*) excludes every URL. If your host runs the cache, ask the host to add the exclusion.

    A firewall or security rule is refusing the method

    ModSecurity, a host firewall, Cloudflare rules or a security plugin can return a 405 that looks like a WordPress fault. Typical signs: the block editor or Elementor fails to save, widgets won’t update, or plugin updates fail with “Download failed. Method Not Allowed.” If the same failure appears on several sites on one server at once, the block is almost certainly upstream of WordPress.

    WordPress’s loopback guidance gives a sensible order. Test plugin and theme conflicts first. If that changes nothing, ask the host about firewall or security rules, DNS, SSL and HTTP authentication. If you switch a security layer off to test, do it briefly, on staging where you can, and switch it back on. Leaving protection off is not a fix. The fix is a rule that allows the specific path and method.

    The web server only allows certain methods

    Server software can restrict methods directly. On IIS, the PHP handler in web.config lists the verbs it accepts. In a WordPress.com forum case, a WooCommerce setup-wizard 405 cleared once the handler allowed all verbs (verb="*"). An earlier attempt with a stripped-down web.config broke the site until the inherited handler settings came back. On Apache, look for Limit or LimitExcept blocks. Nginx has its own method rules.

    Edit only the rule that covers the failing path. Don’t paste .htaccess examples into an Nginx or IIS server, because they won’t be read. Our guide to Apache web server security covers which directives belong where.

    A plugin, a theme or leftover custom code

    Plugins can register routes with narrow methods or filter REST requests. Test the way the Manage Plugins documentation describes: deactivate, then reactivate one plugin at a time, then try a default theme. Do this on staging for a live store. Our guide to fixing plugins that aren’t working walks through it.

    On sites with history, also check code a previous developer left behind: snippets in the theme’s functions.php, a must-use plugin, or a filter on rest_pre_dispatch or rest_authentication_errors. “The host says nothing is blocked” doesn’t end the search. Custom code can block PUT and DELETE while GET and POST still work.

    Which popular fixes don’t fix a 405?

    Saving permalinks. Visiting Settings > Permalinks and clicking Save flushes rewrite rules. If .htaccess is writable, WordPress also updates it, according to the Permalinks screen documentation. That repairs broken pretty URLs, which show up as 404s. It’s harmless to try, but it doesn’t change which methods a URL accepts.

    Disabling the REST API. The REST API Handbook’s FAQ warns against it, because WordPress admin features depend on the API. You would swap one broken request for a broken editor.

    Editing core files or turning off auto-updates. Core edits disappear at the next update, and turning off updates leaves known security holes open.

    Deactivating everything on a live store. This tells you a combination fails, not which layer is at fault, and customers see the broken site while you test.

    Why does a 405 on a public page hurt search?

    Google’s documentation on how HTTP status codes affect its crawlers says Google doesn’t index URLs that return a 4xx status other than 429. Indexed URLs that start returning one are removed over time. A 405 on a form endpoint doesn’t matter for search. A 405 on a product or landing page, caused for example by a firewall rule that misfires on GET, takes that page out of Google.

    When should you stop and get help?

    Hand it over when the evidence points outside WordPress (no Allow header, a firewall or cache signature, many sites failing together), when the fix means editing server configuration you can’t easily undo, or when the failing action takes money. Send the host or developer the request URL, method, response headers, timestamp, and a list of what you already tried. That turns a vague ticket into a five-minute log lookup.

    If you would rather not trace it yourself, SiteSelf can diagnose and fix broken site errors on request through chat. Code, server and cache work needs hosting (SSH) access, not just the connector plugin.

    Frequently asked questions

    Is a 405 error caused by the visitor?

    Almost never on a WordPress site. It’s classed as a client error because the method didn’t suit the URL, but the request usually comes from the site’s own form, editor or integration. The fix belongs on the site or the server.

    Why do GET and POST work but PUT and DELETE return 405?

    Something between the client and WordPress is filtering methods: a host or server rule, a security plugin, or custom code hooked into the REST API. In a browser, a cross-origin PUT or DELETE also sends an OPTIONS preflight first, and a server that rejects OPTIONS can produce the failure. Check which of the two requests the Network tab shows failing.

    Elementor or the block editor shows a 405 when I publish. What now?

    Capture the failing save request in the Network tab. It is usually a POST to admin-ajax.php or a REST route. Many forum threads on this end without a confirmed fix, and rolling back plugins or raising memory rarely helps. Ask your host whether ModSecurity or a firewall rule logged that request.

    Site Health says the loopback request failed with a 405. Is that serious?

    It can be, because WordPress uses loopback requests to run WP-Cron and scheduled posts. Follow WordPress’s loopback steps: test plugins and the theme, then ask the host about firewall rules, DNS, SSL and HTTP authentication. If deactivating plugins changes nothing, the cause is likely on the server.

    Should I install the WooCommerce Legacy REST API plugin to fix a 405?

    Only if the integration calls the legacy API. That API was removed from WooCommerce core in version 9.0. For anything else, the plugin adds code without fixing the cause. Check the integration’s documentation or ask its vendor first.

  • How to set a page as the front page in WordPress

    Key takeaways

    • Only published pages appear in the Homepage dropdown. A theme’s “Front Page” template never appears there because it is a template, not a page.
    • The Homepage and the Posts page must be different pages. WordPress ignores the Posts page’s own template and shows the post list there instead.
    • On block themes, the Front Page template draws the homepage in either Reading mode. If it has no Content block, your page’s content won’t show.
    • Clearing your browser cache is not enough. Purge the caching plugin, then the host cache, then the CDN, and test in a private window.
    • The “Discourage search engines” box on the same Reading screen can add noindex,nofollow to every page. Check it at launch.

    Out of the box, WordPress shows your latest posts at the root address. To show a specific page there instead, you change one setting, and it takes about a minute. Most problems people report afterwards have nothing to do with that setting. They come from the theme’s template, a cache, or a page that was never published.

    This guide covers the setting itself, what a working result looks like, and what to check when the homepage won’t change. If you want to change what’s on the homepage rather than which page it is, our guide to editing your WordPress homepage picks up from there.

    What you need before you open Settings > Reading

    You need an administrator account and a published page. WordPress.com’s support docs say only published pages appear in the Homepage dropdown. Drafts, private pages and pages waiting for review won’t be listed. Our guide to adding pages in WordPress explains status and visibility if a page is missing.

    Next, decide whether you want a separate blog. If you publish posts, create a second, empty page called Blog or News and publish it too. This becomes the Posts page. If you never publish posts, you can skip this step. WordPress.org’s Reading screen documentation says a Posts page is optional.

    Make sure you’re working with an actual page. A block theme may already have something called “Front Page” or “Home” under Appearance > Editor > Templates. That is a template, not a page, and it never shows up in the Reading dropdown. Many people design the template for days and then can’t find their “homepage” in Pages. If that’s you, create a real page and assign it.

    How to set a page as the front page

    1. In the dashboard, go to Settings > Reading.
    2. Under “Your homepage displays”, choose “A static page”.
    3. In the Homepage dropdown, pick the page visitors should see at your root address.
    4. If you created a blog page, pick it under Posts page. If not, leave Posts page empty.
    5. Click Save Changes.

    That’s the whole procedure. It matches WordPress.org’s static front page guide, and you don’t need a plugin. Elementor’s help center sends its users to the same Settings > Reading screen. Building a page in a page builder doesn’t change where you assign it.

    Two rules catch people out. First, the Homepage and the Posts page must be different pages. Second, the Posts page only shows your post list. WordPress.org’s Reading settings documentation says WordPress ignores that page’s own template when it shows posts there, and nothing you type into the page appears. If you put your designed homepage in the Posts page slot by mistake, its content disappears.

    What a correct result looks like

    Open your root address, such as example.com/, in a private browser window. Your normal window is logged in, and logged-in users often skip the page cache that visitors get. The private window shows you what a visitor sees.

    • The root address shows the page you picked, with its content and the layout you expect.
    • Menu links to that page now point to the root address. You don’t need to change the page’s slug.
    • If you set a Posts page, its address lists your recent posts.
    • The browser tab shows a real title, not “Home” or the theme’s name.

    If all four look right, you’re done. If not, work through the next section in order.

    Why the homepage didn’t change after you saved

    Saving the setting almost always works. When the root address still looks wrong, something around the setting doesn’t match it. Support docs and forum threads keep naming the same causes. Nobody has measured how often each one happens, so the order below runs from the quickest check to the slowest.

    The setting didn’t save, or the page isn’t published

    Open Settings > Reading again. Check that “A static page” is selected, the right page is in the Homepage dropdown, and Save Changes was clicked. Then check the page’s status under Pages > All Pages.

    A page that was published last month may not be published today. WordPress.com’s troubleshooting guide says a previous homepage can move to Drafts after a theme change. Publish it again, then select it again in Reading.

    A cache is serving the old homepage

    This is a common reason a correct change looks wrong, and you won’t see an error. Clearing your browser cache doesn’t help if the old copy is stored somewhere else. A caching plugin, your host and a CDN can each keep their own copy. Purge them in that order, then test again in a private window.

    Host caches cause the most trouble after a migration. In one WordPress.org support thread, a site cloned to a new host with Duplicator kept showing the default “Hello World!” and “Sample page” content on its homepage, whatever the owner changed in Reading. The fix was clearing a host cache the owner didn’t know was running. If your host’s control panel has a cache tool, use it. If you can’t find one, ask the host.

    A block theme’s Front Page template is in charge

    If you see an Editor item under Appearance, you’re on a block theme. That means the homepage has a layout layer you may not have looked at yet. WordPress.org’s Template Editor documentation says the Front Page template draws the homepage whether Reading is set to latest posts or a static page. WordPress.com’s troubleshooting guide adds that some block themes give that template priority over your Reading choice.

    The usual symptom is a homepage with only the header and footer, or a layout that ignores your page. In a resolved WordPress.org thread on Twenty Twenty-Five, the selected page’s content disappeared as soon as it was set as the static homepage. Removing a Front Page template the user had created brought the content back.

    First decide where the homepage content should live. Then set things up to match:

    • Content lives in the page. Open Appearance > Editor > Templates > Front Page. Add a Content block where the page’s content should appear, and save. Then check that the page is still selected in Settings > Reading. This is the fix WordPress.com documents.
    • Content lives in the template. Edit the Front Page template directly. The assigned page then has no effect on what visitors see, so don’t spend time editing it.
    • The template is beyond repair. Use Reset on the template to restore the theme’s default. Reset throws away your changes. WordPress.com says View Revisions can recover earlier versions.

    Our guide to customizing a WordPress template safely covers the Site Editor side in more detail.

    A classic theme has its own front-page.php

    Classic themes can cause the same problem with a file. WordPress’s Theme Handbook on front page templates says that when a theme has a front-page.php file, WordPress uses it for the front page before any page template. If that file never outputs the selected page’s content, editing the page changes nothing on screen.

    Look in the theme folder with your host’s file manager or SFTP, or ask the theme’s support team whether its front page uses page content. If it doesn’t, the fix is a template in a child theme. That’s developer work.

    A plugin or theme conflict

    This is rarer. WordPress.com’s troubleshooting guide describes the standard test: switch to a default theme for a moment, deactivate plugins, then turn them back on one at a time. Use a staging copy if you have one. Change one thing at a time, or you won’t know which change fixed it.

    What changes if you run a WooCommerce store

    WooCommerce assigns its Shop page separately, under WooCommerce > Settings > Products. WooCommerce’s documentation warns that the Shop page is drawn by a template and may look different from your other pages. You can pick the Shop page as your homepage in Reading. Do it on purpose, and check your theme and extensions afterwards, because a page doing both jobs doesn’t always behave like either one.

    Product category archives aren’t pages, so they never appear in the Homepage dropdown. A better option is a real homepage that points visitors to your main categories. Redirecting the root address to a category archive is not a good substitute.

    Two traps on the same Reading screen

    “Discourage search engines” left on from staging

    Below the homepage options, Settings > Reading has a “Search engine visibility” checkbox. WordPress.org’s documentation says ticking it can add a noindex,nofollow robots tag to the site, while visitors still see it normally. Staging sites often have this box ticked, and the setting goes live with the site at launch. If your new homepage looks right but never shows up in search results, check this box first.

    A redirect is not a homepage setting

    Don’t redirect example.com/ to another address to make a page your homepage. The Reading setting shows the page at the root address. A redirect tells browsers and search engines the address has moved, which isn’t true. Save redirects for URLs that have actually changed, as our guide to redirecting WordPress pages explains.

    When to stop and get help

    Stop when the fix needs code. That includes a classic theme’s front-page.php that ignores your page, a custom template in a child theme, or a host cache with no purge button you can find. Ask your host about server caching before anything else. That one question resolves many “settings ignored” threads.

    On a store, test template changes on a staging copy first, because a broken homepage costs orders. If you’d rather hand the job off, SiteSelf can change the Reading setting from chat through its connector plugin, then fetch the homepage and tell you what it found. That kind of request is what website edits through chat covers.

    Frequently asked questions

    Do I need a plugin to set a static front page?

    No. The feature is built into WordPress under Settings > Reading. Plugins only cover edge cases, such as showing a different front page at certain times of day or using a custom post type as the homepage.

    Can a blog post or a product be my homepage?

    Not with the built-in setting. The Homepage dropdown only lists pages. Small plugins in the WordPress.org directory add this option. Before you rely on one, check when it was last updated. Often the simpler fix is a real page that features the post or product.

    Where do I edit the SEO title for a static homepage?

    In Yoast SEO, you edit it on the page you assigned as the homepage. Yoast’s help docs say the Content type > Homepage settings apply when the homepage shows your latest posts. Other SEO plugins work in a similar way, so check the assigned page first.

    I deleted “Hello World!” and now my homepage says nothing was found. Why?

    Your homepage is probably still set to show your latest posts, and there are no posts left to show. Either publish a post, or switch Settings > Reading to a static page and pick a published page.

    Does a static homepage hurt SEO?

    No. WordPress shows the page directly at the root address, with no redirect. Search engines index whatever is at that address. What does hurt is the “Discourage search engines” box being ticked, or an SEO plugin marking the assigned page noindex.

    Why is my blog page blank after I assigned it as the Posts page?

    Either you have no published posts yet, or a block theme’s Blog Home template has no Query Loop block to list them. Publish a post to test, then open the template under Appearance > Editor > Templates. Text typed into the Posts page itself never shows, by design.

  • How to sign in to your WordPress blog

    Key takeaways

    • WordPress.com accounts and self-hosted site accounts use separate logins. A WordPress.com password does nothing on a self-hosted blog, and that mix-up is a common cause of failed sign-ins.
    • WordPress.org’s troubleshooting guide says the username and password fields are case-sensitive. A password manager entry that no longer matches is a frequent culprit.
    • If WordPress accepts your password and sends you back to the login screen, the cause is cookies, mismatched site URLs, caching or a plugin. Resetting the password again won’t help.
    • A 404 at wp-login.php usually means a plugin such as WPS Hide Login changed the address. Its documentation says the custom address is stored in the whl_page option.
    • Hosting access is the real master key. With it you can rename plugin folders, read site URLs and fix account emails. Without it, every lockout means finding whoever controls the hosting.

    To reach the dashboard of a self-hosted WordPress blog, add /wp-login.php to the end of your domain. That works on most sites. When it doesn’t, the cause is rarely the password, even though the password is what people reset first. Most failed sign-ins come from the wrong account, the wrong address, or a site that accepts your password and then forgets you a moment later.

    This guide starts with finding the right login. Then it works through each symptom in the order people usually hit them. If all you need is a fact about the site, such as its WordPress version, you may not need to log in at all: see finding your WordPress version without logging in.

    Is your blog on WordPress.com or self-hosted?

    Answer this first, because the two use separate accounts. WordPress.com is a hosted service with one account system. It has its own login page, its own password reset and an option to get a login link by email. A self-hosted WordPress site keeps its own user accounts in its own database, and it doesn’t know about your WordPress.com account at all.

    Mixing the two up wastes a lot of time. In one WordPress.org support thread, a site owner reset their password, still got “incorrect password”, and kept trying. A forum moderator pointed out that the WordPress.com login and the self-hosted site’s login are different accounts. They also suggested checking whether a password manager was filling in an old password.

    Here is how to tell which one you have:

    • If the address ends in wordpress.com, it is WordPress.com.
    • If you pay a web host (cPanel, Plesk or a managed WordPress host) and the bills come from them, the site is self-hosted.
    • A custom domain doesn’t settle it, because WordPress.com sites can use custom domains too. Search your email for hosting or billing receipts.

    Where is the login page for a self-hosted blog?

    WordPress’s Advanced Administration Handbook gives the login page as wp-login.php. It also says that visiting /wp-admin/ while logged out redirects you there. They are not the same thing: /wp-admin/ is the dashboard, and wp-login.php is the form that lets you into it.

    1. Type the full address yourself: https://yourdomain.com/wp-login.php. Don’t click through a search result.
    2. If WordPress is installed in a subfolder, include it: https://yourdomain.com/blog/wp-login.php.
    3. Enter the username and password for your account on that site, not your hosting or WordPress.com login.
    4. Leave “Remember Me” unticked on shared computers.
    5. Once you land on the dashboard, bookmark the address you used.

    If you get the dashboard, you’re done. If not, the next section tells you which problem you have.

    What happens after you click Log In tells you the fix

    Write down exactly what you see after you submit the form. Each response points to a different part of the site.

    What you seeMost likely causeWhere to look
    “Incorrect password” or unknown usernameWrong credentials or wrong accountReset, check case, check the password manager
    Back to the login form, no errorCookies, site URLs, cache, pluginPrivate window, URL settings, cache rules
    “Too many redirects”Conflicting redirect rulesWordPress, host panel, CDN, proxy, SSL mode
    404 at wp-login.phpA login-hiding pluginThe plugin’s custom address
    A lockout or CAPTCHA errorA security pluginWait, unlock email, or disable via file access
    403, 500, blank page or database errorThe server or PHPYour host and the error logs

    The password is rejected

    WordPress.org’s troubleshooting guide says the username and password fields are case-sensitive. Check Caps Lock, and type the password by hand once so you know an old saved password isn’t being filled in. Then use “Lost your password?” under the form, enter your username or account email, and follow the link in the message.

    If the email doesn’t arrive, check spam. Make sure you are looking in the inbox actually attached to that WordPress user, which is often the address of whoever set the site up. Don’t request five resets in a row. Each new request makes the earlier links useless, and security plugins may count the attempts against you. WordPress.com’s own help says its reset emails can take a few minutes. It also says that several wrong passwords can block sign-in for a few minutes.

    If the account email is one nobody can open anymore, the fix needs hosting access. With WP-CLI on the server, you can list administrators and set a new email address, then run the normal reset:

    wp user list --role=administrator --fields=ID,user_login,user_email
    wp user update 1 --user_email=you@yourbusiness.com

    Without WP-CLI, the same details are in the users table in phpMyAdmin, which your host’s control panel opens. Take a database backup before you change anything there.

    You log in and land back on the login screen

    If the form reloads with no error, WordPress accepted your password but couldn’t keep you signed in. The handbook lists the usual causes: blocked cookies, a COOKIE_DOMAIN mismatch, mixing http and https, site URLs that disagree, plugin conflicts and server caching. Work through them from cheapest to most invasive:

    1. Try a private window. If you get in, clear that site’s cookies in your normal browser and you’re done.
    2. Check the address you typed against the site’s own settings. Use the same scheme (https or http) and the same host (www or no www) every time. If wp-config.php defines WP_HOME and WP_SITEURL, those values override the database settings. They should match the address you actually use. The handbook warns against blindly making the home and site URLs identical, because some installs keep WordPress in a different folder on purpose.
    3. Exclude the login page from every cache. wp-login.php and logged-in sessions shouldn’t be cached by a plugin, by the host or by a CDN. In one WordPress.org thread, clearing cookies and turning off ad blockers did nothing. Host-level caching can keep running even after you disable the cache plugin.
    4. Test plugins by renaming the folder. Over SFTP or in the host’s file manager, rename wp-content/plugins to plugins-off. If you can now log in, a plugin is the cause. Rename the folder back and reactivate plugins one at a time until the loop returns. Renaming is a test, not a fix.
    5. Check the theme. The error “Cookies are blocked due to unexpected output” means something printed text before WordPress could set its cookie. In one resolved WordPress.org thread, the cause was two blank lines at the end of the theme’s functions.php.

    The browser says “Too many redirects”

    This means two or more rules are sending the browser back and forth. The rules can live in WordPress, in .htaccess, in the hosting panel, in a CDN or proxy, or in the SSL mode setting. This loop typically starts after a domain change or an HTTPS switch. Find the conflicting rule and remove it, then purge every cache. Adding another “force HTTPS” rule is the most common way to make this loop worse.

    wp-login.php returns a 404

    A 404 almost always means someone installed a plugin that moved the login page. WPS Hide Login’s plugin page says the plugin makes wp-login.php and the wp-admin directory inaccessible without renaming core files. If you’ve lost the custom address, the plugin’s documentation says it is stored in the whl_page option in the database, or in sitemeta on a multisite network. Removing the plugin’s folder over SFTP brings back the default address. Reinstall the plugin afterwards if you still want it.

    A security plugin locked you out

    Security features lock out many site owners. Limits on login attempts, CAPTCHAs, cookie-based brute-force settings and forgotten custom URLs are all common causes. In one WordPress.org thread, enabling the cookie-based brute-force feature in All-In-One Security sent the owner’s login to 127.0.0.1. In another, a CAPTCHA showing “Invalid site key” blocked both login and password reset.

    For a temporary lockout, wait it out, use the plugin’s unlock email if it has one, or try another network. If the plugin itself is broken, rename its folder in wp-content/plugins, log in, and fix the setting before you reactivate it. Replies in that CAPTCHA thread warned against turning protection back on until you understand what went wrong. Reactivating too soon locks you out again.

    You see a 403, a 500 or a database error

    A new password does nothing for these. “Error establishing a database connection” means WordPress can’t reach its database. A 403 is usually a firewall or security rule, and a blank page or 500 is usually a PHP failure. Our guide to fixing a WordPress white screen covers the PHP side. For firewall blocks and database errors, contact your host and ask them to check the error logs.

    What if you never had hosting access?

    This is the harder situation, and it is common with sites a developer or agency built. Your login may be an editor account rather than an administrator, or you may have no login at all. In one 2026 r/Wordpress thread, the client didn’t know where the site was hosted. A freelancer traced the DNS to a server running Plesk and found the web firm behind it. It turned out three years of hosting invoices had been going to an inbox nobody read.

    Start by finding the host. A DNS lookup on your domain shows where it points. Your email and card statements show who you pay. Then ask whoever controls that account to create an administrator account in your name. Don’t ask them to send you their password. Practitioners agree on this order: own the domain, the hosting account, the recovery email and one administrator account yourself. Give developers their own accounts that you can delete when the work ends.

    When to stop and get help

    Stop at the database or redirect rules if you don’t have a recent backup, or if you’re editing values you can’t explain. Hand server errors to your host early. If you have hosting access but would rather not rename folders or edit wp-config.php yourself, SiteSelf can do that work through chat with SSH access. It checks the result and reports what it changed, and you can read more on getting broken WordPress sites working. Once you’re back in, review who holds which keys as part of your WordPress care plan.

    Frequently asked questions

    Is /wp-admin the same as /wp-login.php?

    No. /wp-admin/ is the dashboard and wp-login.php is the login form. If you visit /wp-admin/ while logged out, WordPress normally sends you to wp-login.php, so either address gets you to the form on a default install.

    Where do WooCommerce customers sign in?

    Customers sign in on the store’s My Account page, not wp-admin. WooCommerce’s documentation says logged-out visitors to that page see a login form. Customer account options are under WooCommerce, then Settings, then Accounts and Privacy.

    Should I password-protect the whole wp-admin folder?

    Usually not. Many front-end features call admin-ajax.php, which sits inside that folder, and a folder password can break them. Store carts are a commonly reported example. Our article on Apache security for WordPress covers safer ways to set this up.

    Should I give my developer my admin password?

    No. Create a separate account for them with only the role they need, and delete it when the work is done. Never send credentials in plain text. Separate accounts also mean your own two-factor codes don’t have to be passed along.

    Is hiding the login URL worth it?

    It may cut automated login attempts, but nobody has published reliable numbers on how much. It is also one of the most common ways owners lock themselves out. If you use it, save the custom address somewhere your team can find it, and test the recovery route before you rely on it.

    Does signing in work differently on Multisite?

    Each site in the network has its own dashboard, and only a Super Admin can manage the whole network. If you’re not sure how a site you inherited is organised, our guide to WordPress Multisite installation explains the setup.

  • What a WordPress customisable theme really means

    Key takeaways

    • Block themes are edited in Appearance > Editor. WordPress.org’s documentation says the Site Editor is only available with a block theme, so a missing Customize menu is often expected and not a fault.
    • Small styling fixes go in Styles or Additional CSS. Code goes in a child theme. Edits to parent theme files are lost when the theme updates.
    • Additional CSS belongs to the active theme and does not move with you to a new theme. A child theme created later does not take your existing settings with it.
    • When a change does not appear, check in this order: was it saved or published, is a cache serving the old version, and is the CSS loading and winning.
    • In WordPress’s 2023 annual survey, 45% of respondents said the Site Editor met their needs. A theme’s settings can run out, and you should know where that point is before you buy.

    You can customise every WordPress theme. The question is how far you can get without writing code, and whether your change will survive the next update. Most frustration with “customisable” themes comes from mixing up those two things.

    This explainer covers what the word means in practice, how the two WordPress editing models differ, which layer each kind of change belongs in, and how to tell when a theme’s options have run out. If you are still choosing a base, our guide to layout and design on WordPress covers the structural side.

    “Customisable” means options to an owner and code to a developer

    For a developer who writes PHP, CSS and JavaScript, every theme is fully customisable. For an owner who doesn’t, “fully customisable” means the theme has a lot of built-in settings. Those are two very different promises, and theme marketing usually leaves you to work out which one you are getting.

    The gap appears with very specific changes: the colour of the mobile menu, the spacing on one section, the font on a WooCommerce product page. A theme can have hundreds of settings and still not have the one you need. A WordPress.org support thread called “Editing a custom theme” shows how this goes. Someone took over an agency-built site and was installing plugins to make simple changes like padding, because the theme gave them no setting for it.

    When you judge a theme, ignore how many options it has. Ask whether it lets you make the changes you will actually make, in a place that survives an update.

    Which editor you have decides where the settings are

    WordPress has two editing models. Most confusion about customisation starts when a tutorial describes one model and your site uses the other.

    • Block themes are edited at Appearance > Editor, which opens the Site Editor. Styles (colours, typography, layout), templates and template parts such as the header and footer are all there. WordPress.org’s documentation says the Site Editor is only available when a block theme is active.
    • Classic themes use Appearance > Customize, the Customizer, if the theme supports it. Many classic themes also add their own options page.

    To check which one you have, open Appearance in the dashboard. If you see Editor, you have a block theme. If you see Customize, you have a classic theme. Some setups show both, either a hybrid theme or a plugin that brings the Customizer back. If a guide sends you to Appearance > Customize and that menu isn’t there, nothing is broken. Your theme puts those controls in the Site Editor.

    Page builders such as Elementor and Divi add a third layer. When a page builder owns the header or a page, change it in the builder. If you change it in the theme instead, the builder can override your change.

    Put each change in the layer that survives updates

    Where you make a change matters more than which theme you have. WordPress’s Theme Handbook says a child theme lets you modify a theme without editing that theme’s own code. That matters because an update replaces the parent theme’s files, along with any edits you made to them.

    The changeWhere it belongsWhat to watch
    Brand colours, fonts, site-wide spacingStyles in the Site Editor, or the theme’s Customizer optionsOne global colour can change links, buttons and notices across the site
    One spacing fix, a hover state, a narrow overrideAdditional CSS (on block themes, CSS lives under Styles)It is tied to the active theme and stays behind if you switch
    Template markup, PHP, new functionsA child themeParent updates can still rename classes your code depends on
    A redesign the theme fights at every stepA different base themeContent carries over. Layout and theme-specific settings don’t

    There are two catches. First, creating a child theme after you have customised a parent does not automatically copy those customisations across. Settings stored against the parent theme may have to be recreated in the child. Second, the advice in that WordPress.org thread differs for small and large changes. For small changes, find the element with your browser’s inspector and save an override in Additional CSS. For large changes, choose a theme that is already close to what you want. A bare starter theme has almost no styling, so you would be rebuilding the layout from scratch.

    For a full walkthrough of each layer, see theme customization that survives updates.

    Why a saved change often doesn’t show up

    The most common complaint about theme customisation is a change that does nothing. There’s no error message. The page just looks the same. Check these causes in order, starting with the cheapest.

    1. It was previewed, not published

    WordPress.org’s Customizer documentation explains that you can try changes without publishing them. Nothing goes live until you click Publish. The Site Editor has its own Save button. When you live-preview a theme you haven’t activated yet, nothing is kept until you activate and publish it.

    2. A cache is serving the old page

    A site can have caches in several layers: the browser, a caching plugin or the theme’s own optimisation, the host’s server cache, and a CDN. Clearing one layer proves nothing about the others. Open the page in a private window, purge each layer, and regenerate any combined or minified CSS your optimisation plugin creates. Purging won’t fix a change that was never saved, though.

    3. The CSS isn’t loading, or something else beats it

    Right-click the element and choose Inspect. If your rule appears with a line through it, a more specific rule is winning. If it doesn’t appear at all, check the Network tab to see whether your stylesheet loads. In a child theme, the child stylesheet has to load after the parent’s, or the parent’s rules win. Our article on why a font change is not showing walks through this inspection step by step.

    If the site breaks after a change instead of staying the same, you probably have a conflict, not a styling problem. Learn WordPress’s lesson on plugin and theme conflicts recommends this method: back up, work on a staging copy, deactivate plugins and reactivate them one at a time, and use error logs to find the cause. Our guide to plugins that stop working covers the same isolation process.

    What to check before you choose a theme

    A demo shows you what the theme can look like. It doesn’t show you what editing it will feel like six months after launch. Test these things instead.

    • The editing model. A block theme gives you visual control over templates. A classic theme gives you whatever its panels expose. In WordPress’s 2023 annual survey, 45% of respondents said the Site Editor met their needs, so try it before committing.
    • The changes you’ll make most. Open the theme’s documentation and check that the header, footer, mobile menu, content width and archive layout can be edited without code.
    • Your plugins. If you run WooCommerce, a form plugin or a builder, build a real product page or form on a staging copy. A polished demo doesn’t prove compatibility.
    • Maintenance. Look at the update history and the support channel. A plainer theme with clear templates is often cheaper to own than one packed with features.
    • Lock-in. If your layout lives in a page builder, it goes with the builder. Builders are fast to work in. The cost shows up when you want to leave.

    Your site will also never look exactly like the demo, because the demo uses its own images and copy. Import starter content onto a fresh install or a staging copy, not a live site. Installation problems are covered in installing a theme without breaking it.

    Design changes can break what you can’t see

    A change can look right and still make the site harder to use. W3C’s WCAG quick reference sets a minimum contrast ratio of 4.5:1 for normal-sized text. A darker brand colour on a button, or light grey body text, can fall below it. A common CSS reset removes focus outlines, and then keyboard users can’t see where they are on the page. After any colour or navigation change, check contrast, tab through the menu and forms, and make sure links still stand out by more than colour alone.

    WooCommerce stores have one more risk. If your theme overrides WooCommerce templates, WooCommerce’s developer docs explain that WooCommerce sometimes updates its default templates in new releases, and your theme’s copies don’t update with them. WooCommerce’s System Status report, at WooCommerce > Status, lists outdated overrides. To fix one, back up the override, copy in the current template, reapply your changes and test. If you replace the file without reapplying your changes, you lose your customisation.

    WooCommerce System Status listing outdated theme template overrides
    The WooCommerce System Status report flags template overrides that lag behind the active core version, exposing potential hidden display conflicts. · Source: totalwptheme.com

    When the theme’s options run out

    Sooner or later you will want a change that no setting covers. Your options, from simplest to biggest:

    1. Find the element with the browser inspector and add a narrowly targeted rule in Additional CSS.
    2. Put template or PHP changes in a child theme, so the parent can keep updating.
    3. If almost every change is a fight, move to a theme that is closer to what you want, and test the move on staging first.
    4. Hire someone, with a written scope and agreed milestones. Editing a template is a much smaller job than building custom functionality, so describe exactly which one you need.

    If you would rather describe the change than track down the selector, SiteSelf takes requests like this in chat and makes them on your existing theme. Our page on having design changes made for you covers what that includes.

    Whichever route you take, keep a short note of what changed and where: a setting, a CSS rule or a child-theme file. After the next theme or plugin update, that note tells you exactly what to check. Our guide to updating a theme without losing work covers that check.

    Frequently asked questions

    Why can’t I find Appearance > Customize?

    You probably have a block theme. Block themes put their design controls in the Site Editor at Appearance > Editor, under Styles, Templates and Patterns. Nothing is broken.

    What is the most customisable WordPress theme?

    No theme is the most customisable for everyone. It depends on which controls you need and whether you can write CSS. Make a list of the five changes you expect to make most often, and test each candidate theme against that list.

    Can I customise a free theme?

    Yes. Free themes include the Site Editor or Customizer controls, and you can add Additional CSS or a child theme to any of them. Many free themes keep some settings for a paid pro version, so check the documentation to see which options are free.

    Will changing my theme delete my content?

    No. Posts, pages and media stay in the database. Theme-specific settings, Additional CSS, widget placement, menu locations and theme shortcodes may not carry over, so try the switch on a staging copy first.

    Do I need a child theme just to change a colour?

    No. Use Styles or Additional CSS for colours, fonts and spacing. You need a child theme once you are editing template files or adding PHP.

  • What is a slug in WordPress and when to change it

    Key takeaways

    • The slug is one segment of the URL. The permalink is the whole address, and Settings > Permalinks sets the pattern for the whole site.
    • Retitling a published post or an existing WooCommerce product leaves its slug as it was, so the URL stays stable until you change it yourself.
    • A -2 on the end of a slug means something else already has that slug, often an item in Trash or a Media file. You fix it in the dashboard.
    • Saving Settings > Permalinks refreshes rewrite rules. It does not redirect an old URL and it does not fix a real name collision.
    • Slugs help readers more than rankings. Google asks for readable, hyphenated URLs, but leaving a working URL alone usually beats a cleaner one.

    Your page is called “Emergency Plumbing Services” and its address ends in /emergency-plumbing-services/. That last segment is the slug. It looks like a small text field. It is also the public address that bookmarks, emails, ads and search results point to.

    The definition takes one sentence. The trouble starts around it: a stray -2, a page that returns 404 after a rename, or a “quick” permalink change that breaks every link on the site. This article covers what a slug is, how WordPress makes one, and how to change one without losing traffic.

    What is a slug in WordPress, exactly?

    A slug is the readable, URL-friendly name of one item on your site. It is usually the last part of the URL. In example.com/about-us/, the slug is about-us. Posts, pages, WooCommerce products, categories, tags, custom post types and authors all have one.

    Child pages build on their parent’s slug. In example.com/services/consulting/, consulting is the child page’s slug and services is the parent’s. If you change the parent’s slug, the child’s URL changes too.

    The word means other things in WordPress as well. A plugin slug is the folder name a plugin uses in the directory. An author slug is the public name in an author archive URL. This article is about content slugs, the ones you see in the editor. If you are still setting up your site’s structure, our guide to adding pages in WordPress explains why the slug is worth deciding before launch.

    How is a slug different from a permalink?

    The slug names one item. The permalink is that item’s full address. The permalink structure is the site-wide pattern that decides where the slug sits in the address. WordPress’s permalink documentation describes permalinks as the permanent URLs of your posts and pages, and you set the structure under Settings > Permalinks.

    Permalink structureExample URLWhere the slug appears
    Plainexample.com/?p=123Not in the URL at all
    Post nameexample.com/first-post/The whole path
    Day and nameexample.com/2026/10/15/first-post/After the date
    Customexample.com/blog/first-post/After a fixed base

    Keep the difference in mind, because the two changes carry very different risks. Editing one slug changes one URL. Changing the structure changes every post URL on the site at once.

    WordPress permalink settings screen with structure options for the slug
    The WordPress permalink settings determine the global URL architecture, controlling exactly where each post slug appears across the entire site. · Source: www.boldgrid.com

    How does WordPress create a slug?

    WordPress builds the slug from the title when you first save. It lowercases the text, turns spaces into hyphens and strips punctuation and characters that are not allowed in a URL. The core function that does this, sanitize_title(), also converts accented letters to plain ASCII where it can. “Café Menu” becomes cafe-menu.

    Non-Latin titles are where the automatic slug lets people down. Developers often complain that slug tools handle umlauts, apostrophes and Cyrillic badly. If you publish in Chinese, Russian or Hebrew, look at the generated slug before you publish and decide whether you want a transliteration, a translation or the original script.

    One behaviour surprises a lot of people. Once an item is published, changing its title does not change its slug. WooCommerce’s product editor documentation says the same for existing products. That works in your favour: you can retitle a page as often as you like, and its URL stays put until you edit the slug yourself.

    Where do you find and edit a slug?

    Where the field sits depends on the editor and the content type. The job is always the same: open the item, find the URL or slug field, change it, save, then load the new URL.

    • Block editor (posts and pages): open the Settings sidebar with the panel icon at the top right, pick the Post or Page tab, and click the URL or slug field. WordPress.org’s Settings sidebar documentation covers this panel. The label has moved between versions, so look for the URL in that tab.
    • Classic editor: the permalink appears under the title once a draft is saved. Click Edit next to it.
    • Categories and tags: go to Posts > Categories or Posts > Tags and use Quick Edit next to the term. A category slug change moves the archive URL and every link to it.
    • WooCommerce products: use the Edit link next to the product URL, or the slug panel. Product and category bases, such as /product/, are set separately under Settings > Permalinks > Product permalinks.

    Save a draft before you publish, so you can check the slug before any visitor or crawler sees the URL.

    Editing a WordPress slug in the block editor settings sidebar
    Selecting the Page tab in the sidebar reveals the permalink panel where you can inspect and refine your URL slug prior to publishing. · Source: taylorhieber.co

    Why did WordPress add -2 to my slug?

    Something else already uses that slug. WordPress won’t give two items the same address, so it appends a number. The suffix is a symptom, not an error, and the item causing it is usually one you have forgotten about.

    Check these places in order:

    1. Trash. A trashed page still holds its slug. A WordPress.org forum moderator points to trashed posts and leftover imports as the usual culprits.
    2. Media. Uploading pricing.jpg can give the attachment the slug pricing, and then your Pricing page becomes pricing-2.
    3. Drafts and other content types. An old draft, a product or a custom post type item can hold the slug.
    4. Numbers only. A slug made only of digits, like 2026, can get a suffix too, because WordPress may read it as an ID or a date.

    Once you have found the item, delete it permanently or change its slug. Then go back to your page and type the slug you want into the field. WordPress will not rename the -2 page for you when the original goes. Clear your cache and load the URL.

    That same moderator also warns against deleting database rows to clear a hidden conflict. Use the admin screens first. Some cases stay stuck. One WooCommerce store owner on Reddit reported -8 suffixes on variable products coming back after hours of cleanup, and nobody posted a confirmed fix. If you reach that point, it is a job for a developer.

    What happens when you change a published slug?

    The old URL can stop working. Every link pointing at it, from your menu, other sites, old emails or Google’s index, can then land on a 404. A published slug change is a URL migration, however small the edit looks.

    WordPress gives you some cover, but not everywhere. It remembers old post slugs and often redirects them. WPBeginner’s redirect guide says this covers posts but not pages. Plugins and server rules can also get in the way. Don’t trust it. Test the old URL every time.

    To change a live slug safely:

    1. Copy the full old URL, including any parent path or language prefix.
    2. Change the slug and save.
    3. Add a permanent 301 redirect from the exact old URL to the new one. Our guide to redirecting a WordPress page walks through the options.
    4. Load the old URL in a private window. It should go straight to the new page in one hop, with no chain.
    5. Update your menus and the internal links that use the old address.

    Don’t point old URLs at the homepage. Google’s site move guidance says redirects to irrelevant pages may be treated as soft 404s. If nothing replaces the old page, a useful 404 page is the honest answer.

    Changing the whole permalink structure is a much bigger job. In a Rank Math support thread, a user switched structures and found old links sent to the homepage. Support explained that the plugin’s auto-redirect covers changes to individual slugs, not structure changes, and pointed to the Permalink Migration option in the Redirection plugin. On an established site, plan per-URL redirects before you touch that setting.

    If you would rather not do this by hand, SiteSelf can make the slug change, add the 301 and fetch the old URL to confirm it lands on the new page, all from a chat request. That is part of its WordPress SEO and redirect work.

    Do slugs help SEO?

    A little, mostly through clarity. Google’s URL structure guidelines ask for simple, readable URLs, hyphens rather than underscores, and words in your audience’s language. A slug like /wedding-photography/ tells a searcher what is behind the link before they click.

    No source we found measures a ranking gain from the words in a slug. Yoast suggests three to five words, roughly 30 to 50 characters. That is editorial advice, not a measured threshold. Use the main term if it fits naturally, keep the slug close to the page’s title, and stop there.

    The bigger SEO risk is breaking URLs, not choosing imperfect ones. Rewording a working slug to squeeze in a keyword trades a known-good URL for a redirect and a recrawl. Our guide on how to do SEO on WordPress puts slugs alongside the titles, links and content work that make more difference.

    Why does a page return 404 after a slug or permalink change?

    If one old URL is broken, it is missing a redirect. If many pretty URLs break at once, the cause is usually routing. WordPress’s common errors handbook gives the order to work in:

    1. Stale rewrite rules. Open Settings > Permalinks and click Save Changes without changing anything. That rebuilds the rules.
    2. Server rewrite support. On Apache, pretty permalinks need mod_rewrite and a correct .htaccess file. If saving does nothing, ask your host to check both.
    3. Name collisions. A custom post type with the same name as a page causes 404s. Rename the page and its slug, save the structure as Plain, then switch back to your preferred structure and save again.
    4. Plugin rewrite rules. In one WordPress.org report, a links plugin broke every two-segment URL on a site. Saving permalinks did not help, and deactivating the plugin did.

    Saving permalinks again and again will not fix a real collision. Once the save has failed and the host has checked the server, deactivate plugins one at a time on a staging copy. If the cause still won’t show, get a developer.

    WooCommerce product permalinks settings with product and category slug bases
    Configuring distinct URL structures for product categories and individual products prevents base collisions that trigger unexpected 404 errors. · Source: premmerce.com

    Frequently asked questions

    Can a post and a page have the same slug?

    The text can match when the full URLs differ, for example when posts use a date-based structure. Under the Post name structure both would want the same address, so WordPress adds a number to one of them. Pages and custom post types that share a path can also collide and return 404s.

    Is there a maximum slug length?

    No official limit is documented for everyday use, and we would not trust anecdotal numbers. Long slugs are hard to read and share, so keep yours to the few words that describe the page.

    Which permalink structure should I choose?

    Most practitioners recommend Post name, set before you publish real content. Avoid Plain, which gives URLs like ?p=123. If the site already has traffic, keep the structure you have unless you have a redirect plan for every URL.

    Can I change an author slug?

    Not from the standard profile screen. The author slug is stored separately from the display name, and changing it needs a plugin or code. Changing it moves the author archive URL, so redirect the old one.

    Does a descriptive slug help accessibility?

    Not directly. WCAG’s link-purpose guidance is about link text, not URL format. A clear slug won’t fix a “click here” link, and accessible link text doesn’t need any particular slug.

    Should I remove the /product-category/ base in WooCommerce?

    Only if you understand the tradeoff. WooCommerce’s permalink docs say the product and category bases must not conflict, and removing the base raises the risk of collisions in large catalogs. If you shorten it, redirect the old category URLs.