Blog

  • Changing the domain name of a WordPress site safely

    Key takeaways

    • Get the new domain reaching your server over valid HTTPS before you edit the WordPress Address and Site Address. Doing it the other way round is the classic lockout.
    • Replace old URLs with WP-CLI’s search-replace or Better Search Replace, run a dry run first and skip the guid column. A raw SQL REPLACE() corrupts serialized plugin and theme settings.
    • Redirect every old URL to its matching new URL with a single-hop 301. Google says to keep redirects for at least a year. Keep the old domain registered after that.
    • On WooCommerce, a new domain can put WooPayments into Safe Mode and switch Subscriptions to staging behaviour, which turns off automatic renewals.
    • Search Engine Journal’s study of 892 domain migrations found an average of 523 days to win back estimated organic traffic. Expect a dip even when every step is right.

    Under Settings → General, WordPress has two fields: WordPress Address (URL) and Site Address (URL). Change them and the site answers on the new domain within seconds. The old domain is still in your post content, theme options, plugin settings, inbound links, Google’s index and, on a store, your payment connection.

    So a domain change is a sequence of separate jobs, and each one can fail on its own. The order below is the one WordPress’s own migration handbook and Google’s site-move guidance support. Before you start, have a backup of files and database that you have actually restored somewhere, and keep it until the new domain has been running cleanly for weeks.

    Is this a domain change, a host move, or both?

    A domain-only change leaves the files and database on the same server. You point the new domain at the server and update what WordPress stores. A host move copies files and the database to a new server. The handbook notes that if you keep the same domain, you can usually move hosts without touching the site URLs at all.

    Doing both at once adds problems a domain change alone never has: database credentials and $table_prefix in wp-config.php, a different PHP version, missing files. If you can, split the work. Move hosts first, confirm everything works, then change the domain. Leave the permalink structure and the design alone while you do either one. When three things change together and traffic drops, you can’t tell which one caused it.

    What has to be ready before you touch WordPress

    Three things, in this order.

    • The new domain reaches your server. Add it at your host as an alias, add-on or primary domain, then point DNS at the server. If email runs on the domain, change only the A or CNAME records. Kinsta’s migration docs say the same: switching nameservers can drop your MX records, and the mail goes with them.
    • HTTPS works on the new domain. Issue the certificate for both new-domain.com and www.new-domain.com. WooCommerce’s SSL docs warn that switching a site to HTTPS before the certificate is valid can make it inaccessible.
    • The old domain keeps a valid certificate. An HTTPS visitor has to finish the secure connection before your server can send them a redirect. An expired certificate on the old domain means a browser warning in place of a redirect.

    Test it by opening https://new-domain.com. If the browser accepts the certificate and you land on the old domain, that is the right result at this stage. It proves the request reached your WordPress install, which is still redirecting to the address it has stored.

    How to change the domain, step by step

    1. Update the two addresses. In Settings → General, set both fields to https://new-domain.com. Leave them different only if WordPress core sits in a subdirectory on purpose. Saving logs you out because login cookies belong to a domain, so log in again at new-domain.com/wp-admin. If the fields are greyed out, WP_HOME or WP_SITEURL is defined in wp-config.php. The wp-config handbook page explains that these constants override the dashboard but never update the database. Edit them too, or remove them once the database holds the new values.
    2. Replace the old URLs stored in the database. See the next section. This is the step people skip most often.
    3. Refresh permalinks and caches. Open Settings → Permalinks and click Save without changing anything. If you have custom rules in .htaccess, check they survived. Then clear every cache: the caching plugin, the host’s server cache, the CDN and any object cache. A homepage that loads while posts return 404 almost always means stale rewrite rules or a cache. Our guide to permalinks that stop working covers that case.
    4. Redirect the old domain, page to page. See the redirects section below.
    5. Tell Google. Verify both domains in Search Console. Once the redirects are live, submit Change of Address from the old property. Then submit the new sitemap and check that robots.txt and Settings → Reading are not blocking search engines.
    6. Test as a visitor. In a private window, open a post, an archive, a media-heavy page and your contact form. Submit the form and confirm the email arrives. Open the browser console and look for mixed-content warnings and redirect loops.

    Why a find-and-replace in phpMyAdmin breaks settings

    Plugins and themes save settings as PHP-serialized data, and that format records the length of every string. Run a raw SQL REPLACE() and swap old-domain.com for a name of a different length, and the recorded lengths no longer match. PHP can’t read the value, so the widget, theme option or plugin setting silently falls back to its default.

    The handbook recommends a tool that rewrites the lengths correctly. With command-line access, use WP-CLI’s search-replace:

    wp search-replace 'https://old-domain.com' 'https://new-domain.com' --skip-columns=guid --dry-run
    wp search-replace 'https://old-domain.com' 'https://new-domain.com' --skip-columns=guid

    Read the dry run’s table counts before you run the real thing. Repeat for http:// and www forms if your site still has them. Always include the scheme in the search string. A bare old-domain.com also rewrites info@old-domain.com in your forms and notification settings. Skip guid because WordPress says post GUIDs should never change. On multisite, WP-CLI only touches the current site’s tables unless you add --network. The handbook calls multisite domain changes “more complicated” and asks for a manual review of the network tables. Our multisite setup guide explains which domain values live where.

    Without SSH, use Better Search Replace. It handles serialized data, lets you pick tables and offers a dry run. Page builders often keep their own generated CSS with absolute URLs, so regenerate those files from the builder’s tools screen afterwards. Then search the page source on the live site for the old domain. A clean report from the tool tells you what it processed, which is not the same as every URL a visitor sees.

    Why redirects decide the SEO outcome

    Every bookmark, backlink and search result points at the old domain. Google’s site-move documentation asks for server-side 301 or 308 redirects from each old URL to its matching new URL, in one hop. Keep them for at least a year. Sending every old URL to the homepage is the classic mistake: Google can treat those as soft 404s, and visitors lose the page they asked for.

    If your paths stay the same, one rule on the old domain handles it. On Apache, put it at the top of .htaccess, above the WordPress block:

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^(www\.)?old-domain\.com$ [NC]
    RewriteRule ^(.*)$ https://new-domain.com/$1 [R=301,L]

    This keeps the path, so old-domain.com/services/ lands on new-domain.com/services/. Test the HTTP, HTTPS, www and non-www versions of a few deep URLs and check that each one takes a single hop. Update any existing redirect rules that still point at the old domain, or they will turn into chains. On Nginx or a managed host, use the host’s redirect tool. Our guides to htaccess 301 redirects and how 301s affect SEO go further.

    Keep renewing the old domain after the year is up. The redirects stop working the day the registration lapses, and someone else can buy the domain and its backlinks.

    What changes on a WooCommerce store

    Payments notice the new URL. WooCommerce’s WooPayments Safe Mode docs say a new domain, a clone, or two URLs pointing at one install can trigger Safe Mode. Choose “Transfer your connection” to keep your account and history. “Create a fresh connection” starts over without the history. Payments can carry on in Safe Mode, but dispute and refund updates may not arrive reliably.

    WooCommerce Subscriptions compares the current URL with the one stored at activation. When they differ, it switches to staging behaviour and turns off automatic payments and subscription emails. Confirm the live status after the move. If an old copy of the site is still running, shut it down. The same docs warn that a duplicate can keep processing real renewals. Then place a test order, and check refunds and renewal settings as well as checkout.

    What a correct result looks like

    The admin stays on the new domain after you log in again. Searching the page source of a few pages finds no internal references to the old domain. Every old deep link arrives at its matching page in one 301. The form email arrives. Search Console shows the new sitemap being read. On a store, WooPayments shows no Safe Mode notice and Subscriptions reports itself as live.

    Expect search traffic to wobble anyway. Google calls temporary fluctuation normal and says a small or medium site can take a few weeks or more to settle. Search Engine Journal’s study of 892 domain migrations found an average of 523 days to win back estimated organic traffic, and 17% had not recovered after 1,000 days. Those figures come from third-party traffic estimates across all kinds of sites, so treat them as a reason to get the redirects right, not as a forecast for your site.

    If something went wrong

    Match the symptom to the cause before you change anything else.

    • Locked out, or the site sends you to the wrong place. You probably changed the URLs before the new domain resolved. Set them back with wp option update home and wp option update siteurl, or edit the home and siteurl rows of wp_options in phpMyAdmin. Defining WP_HOME and WP_SITEURL also gets you in, as a temporary fix. Our login troubleshooting guide covers the rest.
    • ERR_TOO_MANY_REDIRECTS. Usually the two URL fields disagree on http versus https or www, or .htaccess, the host and a CDN are each forcing a different version.
    • Redirects back to the old domain. A constant in wp-config.php, a cached redirect, or stored URLs the replace missed.
    • “Error establishing a database connection” or a white screen. This almost always means a host move happened at the same time. Check the credentials and $table_prefix in wp-config.php.
    • The browser can’t find the domain at all. That is DNS, not WordPress. See our guide to DNS_PROBE_FINISHED_BAD_CONFIG.

    Stop and restore the backup if the admin stays unreachable, errors appear across the site, or settings look corrupted and you can’t say why. On a store, write down every order placed since the backup before you restore over it. If you would rather hand off the WordPress side, SiteSelf can run the site changes through chat: the search-replace and redirects with hosting access, then a fetch of the changed pages to check them. The DNS, registrar and Search Console steps stay with you.

    Frequently asked questions

    Will changing my domain break my email?

    It can. Email follows the domain’s MX records, not WordPress. If you change only the A or CNAME record that points the website at your host, mail keeps flowing. Problems start when someone moves the nameservers and the MX records don’t come across.

    Can I change the domain and the URL structure at the same time?

    You can, but every old URL then needs its own mapping instead of a single path-preserving rule. Diagnosing a traffic drop also gets harder. Change the domain first, let it settle, then restructure if you still need to.

    Does Change of Address cover HTTPS or www changes?

    No. Google’s help page says not to use the tool for moving from HTTP to HTTPS or between www and non-www on the same domain. Those changes only need redirects and correct canonical tags.

    Is a traffic drop after the move proof that something failed?

    Not on its own, since Google expects some fluctuation. A large or lasting drop with old URLs showing as 404 in Search Console points to missing or broken redirects. Check the redirect and indexing status of the pages that lost traffic before you rewrite their content.

    Why use WP-CLI when Settings → General already changed the domain?

    Those two fields only change where WordPress says the site lives. Links in posts, image URLs, widget settings and plugin options keep the old domain until a serialization-aware search-replace rewrites them.

  • How to edit text in WordPress, wherever it lives

    Key takeaways

    • Most failed text edits happen in the wrong place. The words belong to a template, a synced pattern, a builder widget, a WooCommerce field or a theme setting, not to the page you opened.
    • If you edit a template, template part or synced pattern, the change shows on every page that uses it. Detach a synced pattern when you only want to change one page.
    • W3Techs detects Elementor on 31.5% of WordPress sites in its November 2026 data. Edit those pages in the builder and don’t switch between the builder and the block editor.
    • “Updating failed. The response is not a valid JSON response” means the save never happened. Re-save permalinks, check Site Health, then ask your host whether something is blocking /wp-json/.
    • If your edit saved but the old text still shows, you are looking at a cached copy. Clear the browser, plugin, host, CDN and builder caches in that order. Google can take days to weeks to update its snippet.

    A price changed yesterday, the Saturday hours are wrong, or there’s a typo in the homepage headline. Typing the fix takes ten seconds. Most of the time goes into finding where WordPress keeps that sentence. On a plain block editor page the steps are short. On a site with a page builder, a block theme, WooCommerce or a commercial theme, the same visible sentence could be stored in one of six places.

    Start with the basic steps. Then use the table further down to track text that isn’t where you expected. For the wider picture of how pages are put together, see our guide to editing pages in WordPress safely.

    How do you edit text on a normal WordPress page?

    Open the page, click the text, type, and press Save or Update. WordPress keeps text inside blocks, and the Paragraph block holds ordinary body text. Here are the steps in full:

    1. Open the right item. Go to Pages > All Pages (or Posts > All Posts), hover over the title and click Edit. Check the status column first, so you don’t edit an old draft or a duplicate called “Home (copy)”.
    2. Select the block. Click the sentence. A small toolbar appears above it, showing which block you selected. On long pages, open List View from the top toolbar and jump straight to the block.
    3. Edit the words. Type the change. Ctrl+Z (Cmd+Z on a Mac) undoes a mistake.
    4. Format with the right tool. Bold, italic and links are in the block toolbar. Size, colour and spacing are in the Settings sidebar, opened from the panel icon at the top right. If you want a heading, use a Heading block. Large bold text is not a heading to a screen reader or a search engine.
    5. Save or publish on purpose. Save draft keeps the change private. Publish or Update makes it live. Preview shows roughly how the page will look.
    6. Check the live page. Open the public URL in a private window. Read the edited sentence and the text around it, then click any link you touched.

    It worked if the new wording shows on the live page, the layout around it is unchanged, and links still go where they should. If the page opened but the sentence isn’t in the editor, the text lives somewhere else. Use the next section to find it.

    The text isn’t in the editor. Where does it live?

    It belongs to something other than the page. WordPress.org’s FAQ on changes that don’t appear lists editing in the wrong location as one of the usual causes, alongside caching. Match what you see to the table below.

    What you seeWhere the text livesWhere to edit it
    The editor is nearly empty, or shows an “Edit with Elementor” style buttonA page builder widgetOpen the page in that builder
    The same text appears on every page (header, footer, contact strip)A template part or theme settingAppearance > Editor on block themes; Appearance > Customize or Widgets on classic themes
    Editing one copy changes the text on other pagesA synced patternEdit the pattern, or detach it for this page only
    Homepage text isn’t in the page chosen under Settings > ReadingA Front Page or Home templateAppearance > Editor > Templates
    The page body shows only [woocommerce_checkout] or another shortcodeOutput from a pluginThe plugin’s settings or the theme’s Customizer options
    Product wordingA product fieldProducts > All Products > Edit
    None of the aboveTheme options or a hard-coded theme fileThe theme’s settings panel, the theme’s support team, or a child theme

    Templates and synced patterns change every page that uses them

    Headers, footers and some page sections on block themes come from templates and template parts. WordPress.org’s Site Editor Pages documentation says template blocks stay locked while you edit a page, until you choose to enable template editing. That lock is there for a reason. Once you edit the template, the change shows on every page built from it.

    The homepage often catches people out. WordPress.org’s guide to the Site Editor explains that a Front Page template can take priority over the page you picked in Settings > Reading. If you changed the setting and nothing moved, the template is winning. Our guides to editing your WordPress homepage and changing footer text safely cover both cases step by step.

    Synced patterns, once called reusable blocks, are shared in the same way. WordPress.org’s synced patterns documentation says that editing one updates it everywhere it is used. If you want to change it on one page only, choose Detach pattern. The detached copy is now ordinary content and won’t receive future changes to the shared pattern. Detach only when that is what you want.

    Page builder text has to be edited in the builder

    W3Techs detects Elementor on 31.5% of WordPress sites in its November 2026 figures. That means many readers are not editing text in the block editor at all. In Elementor, text sits in the Text Editor widget. Open the page with the builder, click the widget, edit it in the left panel or directly on the canvas, then click Update inside the builder. Divi text modules and Beaver Builder modules work the same way.

    Don’t switch editors. Builders store their content separately from normal post content, so editing in the ordinary WordPress screen can leave the builder version untouched. A wordpress.org support thread from 2024 followed exactly that problem on a Beaver Builder site: the edits had been made in the WordPress editor, and a builder cache made the confusion worse. Volunteers advised sticking to one editor for each piece of content.

    WooCommerce text is split across several places

    Each product has two text fields. WooCommerce’s Product Editor documentation lists the product description (usually shown in a tab below the product) separately from the short description (usually shown next to the price). If you edit one, the other stays as it was. Where those fields appear on the page is set by the Single Product template.

    Checkout and shop pages are harder. The checkout page body often contains nothing but a shortcode, and any extra text may come from the theme’s Customizer options. An r/woocommerce thread from 2025 found that a shop page description was generated by the theme. The poster fixed it by editing a theme file, and replies pointed out that the next theme update would wipe that change. A child theme override keeps the edit through updates.

    Why won’t WordPress save my text?

    If you see a red notice in the editor, the problem is not caching. The save failed. These are the common causes and what to try for each.

    “Updating failed. The response is not a valid JSON response.” The block editor saves through the REST API at /wp-json/, and something interrupted that request. The fixes that keep coming up in wordpress.org support threads are:

    • Open Settings > Permalinks and click Save without changing anything.
    • Check Tools > Site Health for REST API errors.
    • Make sure the WordPress Address and Site Address under Settings > General match.
    • Ask your host whether a firewall or ModSecurity rule is blocking /wp-json/.

    A plugin or theme conflict. WordPress.org’s troubleshooting FAQ names plugins competing over JavaScript as a cause of editor problems. Test on a staging copy, not on the live site that visitors use. The Health Check & Troubleshooting plugin turns plugins off for your session only, but its directory listing currently warns that it hasn’t been tested with the latest three major WordPress releases. Use staging if your host offers it. Switching to the Classic Editor can get the page saved, but the conflict is still there.

    “This block contains unexpected or invalid content.” WordPress.org’s block error page says this usually comes from pasted or hand-edited HTML, or from a plugin or theme conflict. Try Attempt Block Recovery first. Convert to HTML and Convert to Classic Block will also make the error go away, but they change the block, so check the result. Our guide to editing WordPress in HTML explains when raw markup is worth the risk.

    No Edit link at all. Your user role doesn’t allow it. Pages need the edit_pages capability. Authors can edit only their own posts, while Editors can edit everyone’s. Ask an administrator for the smallest role that covers the job.

    Saved, but the live page still shows the old text

    You are looking at a stored copy. The edit saved, but one of the cache layers between WordPress and your browser is still serving the old version. Clear them in this order, and check the page in a private window after each one:

    1. Confirm the page actually shows Published, not Draft or Scheduled.
    2. Clear your browser cache, or simply use a private window.
    3. Purge your caching plugin.
    4. Purge the host’s page cache from the hosting dashboard.
    5. Purge the CDN (Cloudflare or your host’s own).
    6. On builder pages, clear the builder’s cache or regenerate its CSS.

    Clearing one layer can leave another still serving the old page. WP Engine’s cache documentation also notes that a full purge can slow the site for a short time while pages are cached again. Clear what you need, not everything, every time. Don’t keep re-editing the page while you wait. That adds revisions without changing anything. Our guide to pages that won’t update goes through each layer in detail.

    If Google still shows the old wording, that is a separate, slower problem. Google’s recrawl documentation says crawling can take days to weeks, and asking repeatedly doesn’t speed it up. Request indexing once with URL Inspection in Search Console, then leave it.

    How do you undo a text edit?

    Use revisions. WordPress.org’s revisions documentation describes a record of each saved draft and published update. The comparison screen marks what was added, kept and removed. Open the Revisions link in the page settings, drag the slider to the version you want, click Restore, then check the live page.

    There are two things to watch. Builders keep their own history, so the WordPress revision list may not include a builder edit. And if someone else edited the page after you, compare before restoring. Restoring your version would overwrite their newer work.

    When should you stop and get help?

    Stop when finding the text turns into experimenting on the live site. The warning signs keep repeating in support threads: switching themes to see what happens, turning off plugins while customers are shopping, editing a parent theme file, or copying a hard-coded sentence over the old one. Hand it off in these cases:

    • You inherited the site and can’t tell which builder or theme generates the page.
    • The text comes from the theme and there’s no setting for it.
    • The JSON error survives the checklist above. That usually needs the host.
    • The fix means changing a theme file, and there’s no child theme.

    When you hand it off, give the page URL, the exact current sentence, the replacement, and whether it should go live or stay a draft. If you’d rather send that in chat than track down the template yourself, SiteSelf’s website edits page explains how the agent makes text changes on your existing site and reports what it checked. It refuses pages owned by Elementor, Divi or Beaver Builder and tells you why.

    Frequently asked questions

    Do I need to know code to edit text in WordPress?

    Not for ordinary content. Blocks, builders and product fields are all edited visually. Edit as HTML and the Code editor are there if you need them, but hand-edited markup is the most common source of block validation errors. Only use them when the visual controls can’t do the job.

    Should I use the block editor or the Classic Editor?

    Use whichever editor the page was built with. The block editor is the default. The Classic Editor plugin brings back the older single text box with Visual and Text tabs. A page made of blocks may not open cleanly in the Classic Editor, so don’t switch just to make one edit.

    Why can’t I select or change a block?

    It’s probably locked, part of a synced pattern, or part of a template. Look for an unlock option in the block’s toolbar menu, an edit option for the pattern, or the Edit template control. Whatever you edit through a pattern or template changes every place it appears.

    How do I change the size, font or colour of text?

    Select the block and open the Settings sidebar. Typography and colour controls are there if your theme allows them. For a change across the whole site, use global styles under Appearance > Editor on block themes, or the Customizer on classic themes. Changing a heading’s level just to make it smaller breaks the page outline.

    Can I edit text by typing directly on the live site?

    No. Edits happen in the dashboard, the Site Editor or your builder. When you’re logged in, the admin bar on the live page has an Edit link that takes you to the right editor for that page.

    Google still shows my old wording. Did the edit fail?

    Not if the live page in a private window shows the new text. Google updates its copy when it next crawls the page, which can take days to weeks. Request indexing once with URL Inspection in Search Console, then wait.

  • How to switch off automatic updates in WordPress

    Key takeaways

    • To stop one plugin or theme, use its Disable auto-updates link under Plugins or Appearance → Themes. You need WordPress 5.5 or later.
    • WP_AUTO_UPDATE_CORE only affects core. AUTOMATIC_UPDATER_DISABLED turns off the whole background updater, and WordPress’s handbook discourages it.
    • If updates keep happening after you turned them off, look for a host updater or a file in wp-content/mu-plugins before you change anything else.
    • Returning false from auto_update_plugin also blocks the security updates WordPress.org pushes for actively exploited flaws.
    • Updates that never run usually come from a cron, loopback, permissions or disk space problem. Changing a setting won’t fix any of those. Tools → Site Health is where to look first.

    A plugin updates overnight. In the morning the checkout buttons are in the wrong place, or the site shows a critical error. The obvious response is to switch off automatic updates and approve everything by hand from now on.

    That works if you pick the right control, and if someone really does apply security fixes afterwards. WordPress has at least four separate update controls. Your host may run a fifth that ignores all of them. Most “I turned it off and it still updated” threads come from changing a setting that doesn’t govern the update the person wanted to stop. If an update has already failed or left the site half-updated, fix that first with our guide to failed WordPress updates. Then come back here and decide on a policy.

    Which switch stops which update

    Each control covers one kind of update. Pick the one that matches what you want to stop.

    What you want to stopControlWhere
    One plugin or one theme“Disable auto-updates” linkPlugins → Installed Plugins, or Appearance → Themes
    Major core releases onlydefine( 'WP_AUTO_UPDATE_CORE', 'minor' );wp-config.php
    All core updatesdefine( 'WP_AUTO_UPDATE_CORE', false );wp-config.php
    All plugins or all themesauto_update_plugin / auto_update_theme filtersA must-use plugin
    The whole background updaterdefine( 'AUTOMATIC_UPDATER_DISABLED', true );wp-config.php

    Start at the top of the table. The further down you go, the more you switch off, and the more likely you are to block a security fix you would have wanted.

    How to stop one plugin or theme from updating itself

    If one plugin broke something, turn off auto-updates for that plugin and leave the rest alone. WordPress.org’s documentation says these per-item controls need WordPress 5.5 or later. If you aren’t sure which version you run, check your WordPress version first.

    1. Go to Plugins → Installed Plugins.
    2. In the Automatic Updates column, click Disable auto-updates next to the plugin.
    3. For a theme, go to Appearance → Themes, open the theme’s details and click Disable auto-updates. If you use a child theme, the parent theme is the one that receives updates.

    To bulk-change plugins, tick several and pick Disable Auto-updates from the Bulk actions menu. On the command line, WP-CLI does the same with wp plugin auto-updates disable plugin-slug (available since WP-CLI 2.5.0) and wp theme auto-updates disable theme-slug.

    The link column should now say “Enable auto-updates” for that item. One limit to keep in mind: this toggle doesn’t stop your host’s updater, and it doesn’t stop a security update WordPress.org decides to push.

    How to stop major core releases but keep security fixes

    Core has its own constant. Open wp-config.php and add one of these lines above the line that reads /* That's all, stop editing! */:

    // Keep minor and security releases, skip major versions
    define( 'WP_AUTO_UPDATE_CORE', 'minor' );
    
    // Or: turn off all automatic core updates
    define( 'WP_AUTO_UPDATE_CORE', false );

    WordPress’s Developer Handbook says this constant overrides the core auto-update setting on the Updates screen. It has no effect on plugins or themes. People mix this up often enough that a WordPress.org moderator had to explain in a 2025 support thread that WP_AUTO_UPDATE_CORE covers core only, while AUTOMATIC_UPDATER_DISABLED covers everything.

    The 'minor' value is the setting most sites should use. Minor releases carry the security and maintenance fixes, and they are the ones you least want waiting on someone’s calendar.

    Edit this file carefully. A missing semicolon or a stray quote takes the whole site down. Keep a copy of the original file so you can put it back in seconds. Editing wp-config.php needs file access through your host’s file manager, SFTP or SSH.

    How to switch off all automatic updates, and what that costs

    One line turns off the whole background updater:

    define( 'AUTOMATIC_UPDATER_DISABLED', true );

    WordPress’s handbook calls this “generally discouraged”, because minor and security updates are what keep a site secure. Treat it as a policy decision, not a fix. The site stays exactly as it is until someone logs in and updates it. If nobody owns that job, the site falls further behind every week.

    To turn off plugin or theme auto-updates across the site but leave core alone, use filters. The handbook says filters belong in a must-use plugin, not in wp-config.php, where they can conflict with WP-CLI. Create wp-content/mu-plugins/update-policy.php:

    <?php
    /**
     * Plugin Name: Update policy
     * Description: Site update rules. Owner and date: write them here.
     */
    
    // Stop auto-updates for one plugin only
    add_filter( 'auto_update_plugin', function ( $update, $item ) {
        if ( isset( $item->slug ) && 'woocommerce' === $item->slug ) {
            return false;
        }
        return $update;
    }, 10, 2 );
    
    // Or stop all theme auto-updates
    // add_filter( 'auto_update_theme', '__return_false' );

    Know what returning false does. The handbook says it also blocks plugin and theme updates pushed by the WordPress.org security team. Don’t put update rules in your theme’s functions.php either. A theme switch or update can remove them without anyone noticing.

    Why updates still happen after you switched them off

    Usually something other than your setting is in charge. Check these in order.

    A forced security update

    WordPress.org can push an update for a critical vulnerability even when your toggles are off. In a 2024 WordPress.org thread, a site owner reported plugins updating with auto-updates disabled. The replies explained that security updates can be forced, and a moderator advised against overriding them when a flaw is being actively exploited. If the surprise update was a security release, the system did what it was built to do.

    Your host runs its own updater

    Managed hosts often update plugins from their own dashboard, outside WordPress. Some do it with a must-use plugin, which keeps running when you deactivate everything else. A GitHub issue logged in October 2026 shows Hostinger’s Smart Auto Updates MU plugin (v1.0.8) registering automatic_updater_disabled as true and auto_update_plugin as false. That is the opposite problem: settings switched off by the host, not by you.

    In a 2023 WordPress.org case, Site Health warned that background updates weren’t working because the automatic_updater_disabled filter was enabled. The owner’s wp-config.php didn’t contain it. The source was a “Disable Auto Updates” MU plugin the host had installed. The owner waited days for it to be removed.

    An update-management plugin

    Plugins that manage updates keep their own rules. Running one next to a host updater gives you two policies that disagree. Choose one system and turn off the other.

    To find which layer is in control:

    1. Check the item’s toggle on the Plugins or Themes screen.
    2. Look in your host’s control panel for anything labelled automatic or plugin updates.
    3. Open wp-content/mu-plugins/, or Tools → Site Health → Info → Must Use Plugins.
    4. Check for an update-management plugin in your plugin list.
    5. Search wp-config.php for the two constants above. Old sites often still have them, and nobody remembers why.

    If it’s still unclear, ask the host directly whether it updates plugins or core itself.

    When updates aren’t running at all

    Sometimes nobody switched anything off and updates still don’t happen. WordPress.org’s documentation says plugin and theme auto-updates rely on WP-Cron and run twice a day. If the scheduler or the file system is broken, no setting will help.

    Open Tools → Site Health and read the Status tab. The WordPress.org Health Check handbook lists the checks that matter here: failed scheduled events, background updates and loopback requests. Then work through the causes:

    • Cron. If DISABLE_WP_CRON is set in wp-config.php, a real server cron job has to replace it. Without one, scheduled updates never run.
    • Permissions. If WordPress asks for FTP credentials, it can’t write files as the web server user. Ask the host to fix ownership. Don’t loosen permissions across the site.
    • Disk space. A full disk stops updates from unpacking. Old backup archives are a common cause.
    • A leftover .maintenance file. If the site says “Briefly unavailable for scheduled maintenance”, WordPress.org’s troubleshooting FAQ says to delete .maintenance from the WordPress root. Deleting it brings the site back. It doesn’t finish the update, so run the update again.

    If an update broke the site, fix that one thing

    Switching everything off hides the symptom and leaves the cause in place. Find the component first. WooCommerce’s self-service guide gives the standard routine: switch to a default theme, deactivate everything except WooCommerce and the extensions involved, then reactivate them one at a time.

    Often the cause is narrow. In an October 2026 WordPress.org review, a site owner said a form plugin’s auto-update took their site down because the new version required PHP 8.3 and the server ran PHP 8.0. Turning off every update wouldn’t have fixed that. Upgrading PHP, or holding back that one plugin until the server could be upgraded, would have.

    Roll back only the plugin that broke, and only until a fix ships. The Developer Handbook warns that older code can bring back security holes and cause database version problems. When a fixed version is out, turn that plugin’s auto-updates back on. Rolling back one plugin also keeps every order and edit made since your last backup. A full restore from backup throws those away.

    Stores need extra care. WooCommerce’s update guide says some releases need a separate database update after the files update, and you can follow its progress under Scheduled Actions. The guide also says to back up the database and wp-content, test on staging, then check product pages, cart, checkout, payment, shipping, tax and email. It suggests a monthly cadence for most stores, with security fixes applied sooner.

    The policy most practitioners settle on

    WordPress.org threads and Reddit discussions keep landing on the same compromise:

    • Keep minor core releases automatic, along with your security and backup plugins.
    • Turn off auto-updates only for the plugins that can cost you money when they change: payments, checkout, page builders, heavily customised features.
    • Update those by hand on a named day. Take a backup first, use staging if your host offers it, and update one at a time, never with “Update all”.
    • After each update, load the homepage, submit a form and run a test checkout.
    • Write down what is switched off, where, and who owns the manual updates.

    WordPress.org has also started delaying some releases on its side. The Plugins Team’s phased release rollout, announced in August 2025, delays automatic updates by 24 hours for plugins that opt in. You can still update by hand during that window.

    If nobody on your team wants to own the manual queue, SiteSelf handles plugin updates on request through chat, then reports what changed and what it checked.

    Frequently asked questions

    How do I turn automatic updates back on?

    Reverse whatever you changed. Click “Enable auto-updates” on the item, delete the constant from wp-config.php, or delete the filter from your MU plugin. Then check Site Health. If it still says background updates are disabled, something else is setting the filter, usually a host MU plugin.

    Why can’t I see the auto-update links on my Plugins screen?

    Check that you run WordPress 5.5 or later. If you do, WordPress.org’s documentation says a host or a plugin may have turned the feature off. Look in wp-content/mu-plugins and in Site Health → Info → Must Use Plugins.

    Why do update notices still show after I turned off auto-updates?

    Stopping automatic installs and hiding update notices are separate things. Turning off auto-updates means WordPress waits for you to click Update. It still tells you an update exists, and you want it to.

    How often do WordPress auto-updates run?

    WordPress.org’s documentation says plugin and theme auto-updates run twice a day by default, through WP-Cron. If WP-Cron is disabled and no server cron replaces it, they don’t run at all.

    Do premium plugins and WooCommerce extensions follow the same toggle?

    The toggle only applies to updates WordPress can find. WooCommerce’s update guide says Marketplace extensions update only when the store is connected to a WooCommerce.com account. Third-party extensions follow their vendor’s own update method. Check those separately, because they fall behind without any warning.

  • WordPress tags vs categories and when to use each

    Key takeaways

    • Only categories can have parent and child terms. Every post ends up in at least one category, because WordPress files it under the default category (set in Settings > Writing) if you pick none.
    • A tag is worth creating only if it will be used on several posts across different categories. A tag used on one post creates an archive page with almost nothing on it.
    • Google has no rule about indexing category or tag pages. Judge each archive on whether it’s useful, and use noindex to keep it out of results. Blocking it in robots.txt doesn’t do that.
    • Deleting a category never deletes its posts. WordPress moves them to the default category, but the old archive URL still needs a redirect.
    • In WooCommerce, use product categories for departments, product tags for labels that span departments, and attributes for anything shoppers filter by.

    Most WordPress sites don’t get a messy taxonomy all at once. It happens one post at a time. Someone adds a tag for a word that appears in an article, then another, and a few years later the site has hundreds of tags used once and a category list nobody can scan. WordPress never shows an error, so nobody notices until an SEO audit or a Search Console report turns up a long list of nearly empty archive pages.

    The difference between the two is simple. Categories are your site’s main sections. Tags are optional labels that connect posts across those sections. The difficult part is that every term you create also becomes a page, and that is what this article covers. It sits alongside our step-by-step guide to doing SEO on WordPress.

    What actually separates a category from a tag

    Categories can be hierarchical and tags can’t. WordPress’s Theme Handbook describes both as taxonomies, which are ways of grouping posts, but only categories can have parent and child terms. Everything else follows from that one structural difference.

    CategoriesTags
    StructureHierarchical: a parent such as Services with children such as Design and MaintenanceFlat, no parents
    RequiredEffectively yes: a post with no category goes into the default categoryNo, entirely optional
    JobSays where a post belongsSays what else the post is about
    In the block editorA checkbox list, which encourages picking an existing termA text field, which makes a new term one keystroke away
    Archive URL (default)/category/services/design//tag/gluten-free/
    Healthy numberA short list that rarely changesGrows slowly, and each tag is used on many posts

    That editor row explains a lot of messy sites. Picking from a category list nudges you to reuse what’s already there. Typing in a tag field makes it just as easy to create a new tag as to reuse an old one, so you end up with “email”, “emails” and “email marketing” as three separate archives.

    Learn WordPress compares categories to a book’s table of contents and tags to its index. That comparison works. The table of contents has a few entries and every chapter is in it. The index is long, specific, and each entry is worth having only because it points to more than one page.

    When a subject should be a category, and when a tag

    Use a category when the subject is a permanent section of the site that a visitor might browse on purpose, the kind of thing you would put in a menu. Use a tag when the subject keeps coming up across several sections and a reader of one of those posts would want the others.

    Take a bakery that publishes recipes and business news. “Recipes” and “News” are categories. “Gluten free” is a good tag, because it connects a bread recipe with the announcement of a gluten-free range. Readers can follow their dietary need across both sections. A tag for this spring’s sale is a bad one: nothing will be added to it, so anyone who clicks it reaches a dead end.

    Before you create a term, run these checks:

    • Will it be used on several posts? If not, leave it out. Single-use tags are the clearest sign of a taxonomy going wrong.
    • Does it already exist under another spelling? Search Posts > Tags for singular, plural and synonym forms first.
    • Does it repeat a category? WordPress.com’s support guide advises against giving a category and a tag the same name. You would just get two archives listing the same posts.
    • Is it a format, not a subject? “Tips” and “guide” describe the kind of article. They don’t tell a reader what it’s about.

    WordPress allows more than one category per post, but one is the sensible default. A post filed under four categories has no clear home, and every archive it appears in gets a little less distinct. Use child categories when a real hierarchy exists, not to squeeze in extra labels.

    Tags are not keywords. Agency developers on r/Wordpress keep describing the same pattern: clients treat the tag box like the old meta keywords field and type in every phrase they want to rank for. One 2014 thread mentions a site with 20,000 tags. No ranking benefit comes from the label itself. Any benefit comes from the archive page being worth visiting.

    Why every new tag is also a new page

    WordPress creates an archive page for every category and tag, listing the posts assigned to it. That turns a filing decision into a navigation decision and a search decision. A tag on one post creates a page that only repeats that post’s excerpt. A site with 400 of those has 400 thin pages that crawlers can find.

    Think of each archive as a page you are recommending to visitors. Would you link to it from the sidebar of a good article? If yes, it’s earning its place. If you would be embarrassed to link it, the tag probably shouldn’t exist.

    The archive is also separate from your real landing pages. A Design service page explains and sells the service. A Design category archive is a date-ordered list of posts. Don’t let the archive replace the service page in your menu just because they share a word. If you want tag and category archives to connect visitors to your best pages, our guide to adding internal links in WordPress covers the editor side.

    Should category and tag archives appear in Google?

    Decide archive by archive. Don’t decide by taxonomy type. Google publishes no rule about WordPress categories or tags. Yoast’s settings documentation points out that useful taxonomy pages can bring in visitors. A common rule of thumb in practitioner forums is to noindex all tags and index all categories. That’s a reasonable starting point, but it’s a heuristic. Google doesn’t require it.

    Keep an archive indexable when it’s distinct and useful: it has enough posts to browse, a clear heading and, ideally, a short introduction in the term description. Keep it out of search results when it’s thin, empty or an exact overlap with another archive. In Yoast SEO, go to Yoast SEO > Settings > Categories & tags, choose the taxonomy, turn off its search visibility and save. Yoast also lets you noindex individual terms, so you can keep a strong tag archive indexed and drop the weak ones.

    Use the right tool to keep a page out of Google:

    • noindex keeps a page out of search results. Google’s documentation says the page must stay crawlable, because Google has to load the page to see the noindex instruction.
    • robots.txt controls crawling, not indexing. Blocking /tag/ there can leave URLs showing in results and hides your noindex from Google.
    • Redirects or rel=”canonical” are how Google says to merge duplicates. Its canonicalization guide says Google picks a canonical URL when a site has duplicate content, and it lists redirects and canonical tags as the ways to tell it which one you prefer.

    Check your settings before you write copy for archives. On r/woocommerce, one store owner wrote unique text for their tag pages and only later found they had set tag archives to noindex in Yoast. If you suspect tag pages are competing with your main pages, use Search Console’s Performance report: filter to the tag URLs and see which queries they share with your posts before you decide anything.

    If you would rather have someone else make the archive indexing changes, write the redirects and check the result, SiteSelf does that kind of SEO settings and redirect work on request through chat.

    How to clean up a messy taxonomy without breaking links

    Audit first and delete last. Renaming a term’s slug or deleting a term changes or removes an archive URL. Bookmarks, backlinks and Google’s index still point at the old address. Take a backup before you start.

    1. Export the lists. In Posts > Categories and Posts > Tags, record each term’s name, slug and post count.
    2. Flag the suspects. These are single-use tags, near-duplicates, and tags that copy a category. A low count is a reason to look closer. It doesn’t automatically mean delete.
    3. Decide each one. Keep it, merge it into another term, promote it to a category, convert it, or retire it.
    4. Merge or convert in bulk. WordPress’s Categories and Tags Converter (Tools > Import) converts selected terms from one taxonomy to the other. The free Term Management Tools plugin adds Merge, Set Parent and Change Taxonomy to the bulk actions on the term screens.
    5. Redirect what moved. Send each retired archive URL to its closest replacement with a 301. Don’t send unrelated archives to the homepage. See how a 301 redirect affects SEO for the details.
    6. Fix dependencies. Update menus, links inside posts, and any block or template query that names the old term.
    7. Test. Load old and new archive URLs while logged out, then watch Search Console for new 404s.

    Deleting categories needs one extra check. WordPress’s documentation says deleting a category doesn’t delete its posts. It moves them to the default category, which itself can’t be deleted. So set a sensible default in Settings > Writing first. Otherwise the cleanup quietly fills “Uncategorized”.

    A cleanup only lasts if there’s a rule behind it. Practitioners who train clients report that verbal training doesn’t stick. A written one-page policy does better: the approved category list, what each one covers, and “search before you create a tag”. Some agencies go further and turn off tags for clients who keep misusing them.

    How WooCommerce product tags differ

    WooCommerce has separate taxonomies for products and doesn’t use the post categories and tags. Its documentation describes three tools. Product categories are hierarchical departments such as Dresses or Shoes. Product tags are flat labels that cut across departments, such as “summer” or “gift idea”. Attributes are properties like size, colour or material, which shoppers filter by and which drive variations.

    The common mistakes are using tags as main departments and using tags for business logic. A tag can say “Tuesday delivery”, but it won’t enforce a delivery day or an order cutoff. That needs a plugin built for it. Normally a product keeps a single URL however many categories it has, unless your product permalink base includes the category.

    Frequently asked questions

    Can tags have a hierarchy?

    No. Only categories support parent and child terms. If you need nested subjects, use child categories. If the built-in pair doesn’t fit, as with recipes grouped by meal and by dietary need, register a custom taxonomy for each grouping.

    Do I have to use tags at all?

    No. Tags are optional, and plenty of well-run sites use categories only. Use tags if you’ll apply them consistently across sections and show them to readers. Otherwise they only add archives.

    Do tags help SEO?

    Not by themselves. The label carries no ranking value. A tag archive can bring in visitors if it’s a useful collection with real content, and a thin one only gives crawlers more pages to process.

    Why can’t I see the category and tag boxes in the editor?

    In the block editor they’re in the right-hand sidebar under the Post tab, often in collapsed panels. Check the editor’s Preferences to make sure the panels are enabled. If they’re still missing with a default theme and no plugins active, the install itself may be modified, which is worth raising with your host.

    Can I change the slug of a category without losing traffic?

    Yes, if you add a 301 redirect from the old archive URL to the new one when you make the change. Changing only the display name leaves the URL alone. Our guide to what a WordPress slug is covers where to edit each one.

    Can Pages have categories and tags?

    Not by default. Categories and tags apply to posts. A plugin or a few lines of code can add them to Pages, but first ask whether a page hierarchy (parent and child pages) already does the job.

  • Chatbot vs live chat on a WordPress site

    Key takeaways

    • In Comm100’s 2025 benchmark, chatbots handled 73.8% of chats in 2024 but resolved only 45.8%. The resolved share barely moved from the year before.
    • Handing a chat from the bot to a person is a setting, usually with separate options for staffed and offline hours. Turning on AI does not mean a person sees the questions the bot could not answer.
    • The WooCommerce AI Assistant is an admin tool that shoppers never see. The storefront chatbot is a separate product, the AI Support Assistant.
    • When a widget shows for the admin but not for visitors, the usual causes are cache and JavaScript delay or defer settings. Check those before the theme or the host.

    Most small sites that add a chat widget find out within a month what they actually needed. Either the same five questions come in every day, or every question is different and needs someone who knows the business. A chatbot is good at the first case and live chat is good at the second. Neither one works if nobody looks after it.

    So the useful question is not which one is better. It is which requests software can answer safely, who answers the rest, and how fast that person can take over. Sometimes the honest answer is that visitors only need a reliable way to reach you. In that case a contact form in WordPress may do more than either kind of chat.

    What actually separates a chatbot from live chat

    With a chatbot, software writes the replies. With live chat, a person types back in real time, usually from a dashboard or a phone app. Most of the confusion comes from treating “chatbot” as one thing, because there are two very different kinds.

    A scripted bot follows a decision tree: buttons, fixed questions and fixed answers. It cannot go off script, which makes it predictable and limited. An AI bot writes its own answers, ideally from a knowledge base made of your pages, posts, products and FAQs. It can handle questions nobody planned for. That is its strength and its risk, because it can also answer confidently when it has no idea.

    Many WordPress chat plugins now sell both modes in one widget: a bot that answers first and a person behind it. That setup is called hybrid, and it is the pattern most practitioners recommend. There is also a third pattern that often gets counted as live chat. Contact-button launchers show floating icons that open WhatsApp, Messenger or a phone call. That is a shortcut to another channel, not a chat service.

    Before you install anything, check where the conversations live. Many plugins sold as “WordPress chatbots” just place a widget for an external service. The conversations, training and settings sit on the vendor’s servers, not in your WordPress database.

    WooCommerce stores have one more trap. WooCommerce’s documentation describes the AI Assistant as an admin tool that does not appear on the storefront. The customer-facing chatbot is the separate AI Support Assistant. You have to enable it and give it an AI provider, a knowledge base and product information.

    Which questions belong to a bot and which to a person

    Decide by request, not by product. Bots do well with routine, documented, low-stakes questions that come up again and again. People are needed when the answer takes judgment, depends on a specific account, involves money, or comes from someone who is upset.

    RequestBetter first responderWhy
    Opening hours, shipping policy, returns windowBotThe answer is already written on your site
    Order status lookupBot, if it can read ordersOne fact, a clear finish, no judgment
    Inquiry outside business hoursBot that collects name, contact and job detailsNobody is there to answer, but the lead is still worth keeping
    “Will this work for my situation?”Bot first, person on buying intentPricing and fit questions are where sales are won or lost
    Refund, wrong charge, complaintPersonNeeds account access, a decision and a believable apology
    Anything the bot answered wrong once alreadyPersonA second guess costs more than a short wait

    Practitioners on Reddit and wordpress.org agree on one point: the setup most likely to disappoint is a bot that is supposed to replace people completely. It goes wrong as soon as a visitor has a real problem with an order or an account.

    Bots handle more chats than they resolve

    The Comm100 Live Chat Benchmark Report 2025 looked at accounts that use AI chatbots. In those accounts, bots handled 62.7% of chats in 2023 and 73.8% in 2024. The share the bots actually resolved stayed flat: 46.0%, then 45.8%.

    That gap matters more than any other statistic in this debate. Vendors usually advertise “handled” or “deflection” figures. A bot can take part in three quarters of conversations and still finish fewer than half. The rest either reach a person or end without an answer. Keep the source in mind, though. Comm100 sells chat software, and its data comes from its own customers, who mostly run staffed support teams rather than one-person WordPress sites.

    Why customer preference surveys seem to disagree

    The surveys measure different things, so they are not really in conflict. Salesforce’s State of the AI Connected Customer research, a YouGov survey of 15,015 consumers in 2024, found that 30% would use an AI agent instead of a person to get faster service, and 35% would do so to avoid repeating themselves. Tidio’s 2025 study of 1,300 people, Helpful or Hopeless?, found that about 30% would still wait for a human even with a bot available right away, and more than 11% would pay extra to skip the bot.

    Both are vendor studies, and Tidio recruited its respondents through Amazon Mechanical Turk and Hotjar, which is a weaker sample. The practical lesson is the same either way: preference depends on the task and the wait. Someone checking a delivery date wants speed. Someone who was charged twice wants a person.

    Handoff only happens if someone configured it

    Turning on AI in a chat tool does not mean a person will see the questions the bot could not answer. In hybrid tools, what happens after a failed answer is a setting. The usual options are to transfer the chat to an agent, keep it with the bot, or turn it into a ticket or email. Offline hours often have their own setting. Check both, because the defaults may not match what you assume.

    A bot that runs overnight does not solve problems overnight. At best, it collects the details so someone can reply in the morning. Tell the visitor that plainly, and give a time they can expect a reply.

    A good handoff has four parts:

    • The bot says it does not know instead of guessing.
    • The conversation carries over, so the visitor does not have to explain twice.
    • The “talk to a person” option is visible from the start, not hidden behind three failed answers.
    • Pricing questions and clear buying intent go to a person.

    A fallback line can be as simple as: “I can’t sort out a billing problem here. I’ve saved your question and order number, and someone will reply by email by 10 a.m. tomorrow.”

    What chat costs is mostly staff time

    Chat tools charge in several different ways, so comparing price tags directly tells you little:

    • Per agent seat each month. The bill grows with your team.
    • Bundles of conversations. The bill grows with your traffic, including spikes you did not plan for.
    • Free core with a paid AI add-on.
    • A plugin licence plus your own AI API key. The model provider bills you separately for usage.

    The bigger cost is people. Live chat needs someone covering the hours the widget promises. A bot needs someone to write, check and update the content it answers from, and to read the conversations where it went wrong. None of the research behind this article compares the total cost of the two. “Bots are cheaper” is an assumption, not a finding.

    Where chat goes wrong after it is installed

    Live chat that nobody answers

    Practitioners say this is worse than having no chat. It tells visitors nobody is there, and you lose the lead. If you cannot cover normal business hours, even shared between a few people, hide the widget when you are offline or switch to a form.

    A bot that guesses or loops

    The common complaints are bots that guess, send the wrong help article, or keep asking “Did that solve it?” Train the bot only on content you control, set clear limits on what it answers, and judge it by conversations resolved, not conversations handled. A commenter in r/woocommerce warned that a bot that cannot find the right answer in your content is more frustrating than a slow reply.

    Too few chats to matter

    Small-business threads on Reddit argue both ways. Some site owners report almost no chats after months. Others say a simple capture flow brought in evening and weekend inquiries they would have missed. The deciding factors are traffic, how often the same question comes back, and whether a short flow is enough. Long flows lose people.

    More leads, worse leads

    Agencies report that bots can bring in more leads than forms, but more of them are unqualified and take time to sort through. One or two qualifying questions based on what your business actually does will filter better than an open text box.

    Widgets that get in the way

    Google’s guidance on interstitials and dialogs recommends banners over large dialogs, so do not auto-open a full-screen chat. Google renders JavaScript and indexes the rendered HTML. An answer that exists only inside a chat conversation is not page content, so keep the important answers on the page as well. For accessibility, WCAG 2.2’s Focus Not Obscured criterion says an open chat window must not completely hide the control that has keyboard focus. W3C’s suggested fixes are to let content reflow, place the window in unused space, or let Escape close it.

    Why the widget shows for you but not for visitors

    Usually the cause is caching or JavaScript optimization. Logged-in admins normally skip the page cache, so you see the widget while visitors get an older copy of the page, or a script that loads in the wrong order. An MxChat thread on wordpress.org started exactly like this: the bot appeared for the admin but not for normal visitors. Work through these checks in order:

    1. Connection. Confirm the plugin is active and the account or site ID is saved. Use one install method only, either the plugin or pasted code, never both.
    2. Display rules. Check desktop and mobile settings, page exclusions, and any option that hides the widget when no agent is online.
    3. A clean test. Open a new private window, not one that was already open, and load the page logged out.
    4. Each cache layer. Purge the caching plugin, then the host’s server cache, then the CDN. On some hosts, the server purge does not clear the CDN. Why a page is not updating walks through each layer.
    5. Script optimization. Turn off delay and defer JavaScript for a moment. If the widget comes back, turn the options on again one at a time, exclude the chat script from the one that breaks it, and update the chat plugin. Do not leave all optimization off for good.
    6. The theme. The theme must call wp_footer() before </body>. That is how WordPress prints footer scripts, and many widgets rely on it. A console error like e(...).live is not a function means outdated jQuery code. Updating the theme fixes that. Reinstalling the chat plugin does not.
    7. Conflicts. The Health Check plugin’s Troubleshooting Mode turns off plugins and switches the theme only for your logged-in session, so visitors to a live store are not affected.
    8. Content Security Policy. If the site sends a CSP header, add the chat vendor’s domains to script-src and frame-src. Do not remove the policy.
    9. Works on staging, missing on live. Compare the page source on both, then ask the host about differences in PHP settings.

    If none of that finds it, the broader guide to WordPress plugins that are not working covers debug logs and conflict testing. If you would rather hand the problem off, SiteSelf’s WordPress bug-fix work traces it on your live site and reports what it changed. Plugin settings work through the connector plugin. Theme and script fixes need hosting access.

    How to decide for your own site

    Start with last month’s questions, from your inbox, phone notes and form entries. Sort them into routine and judgment calls. Then name who can answer, and during which hours.

    If you are unsure, have a person handle chat for a few hours a day before building a bot. You will learn what visitors actually ask, and that becomes the bot’s first knowledge base. Automate only the questions that keep coming back and already have written answers. Set up handoff for both staffed and offline hours. Then, for the first few weeks, read the conversations the bot did not resolve. Those tell you what to add to your content, and which questions should go straight to a person.

    Frequently asked questions

    Can a chatbot replace live chat completely?

    Not reliably. Billing disputes, account-specific problems, exceptions and upset customers need a person. Comm100’s figures show bots resolving under half of what they handle. A bot with a clear route to a person is the realistic setup.

    Will a chat widget slow down my WordPress site?

    It adds third-party JavaScript, so it can. There is no current, independent benchmark comparing widgets, and older forum reports no longer describe how vendors load their scripts today. Test your own pages in PageSpeed Insights with the widget on and off.

    Does a chat widget hurt SEO?

    Not by itself. The risks are narrower. Content that exists only inside chat is not indexed as page content, and auto-opening dialogs that cover the page go against Google’s guidance on intrusive dialogs. Keep answers on the page and let visitors open the chat themselves.

    Should I use the plugin or paste the vendor’s code?

    Either works, but never both. Running the plugin and pasted code at once loads the widget twice and causes display problems. The plugin is easier to remove later. Pasted code depends on the theme calling wp_footer(), or on a code snippets plugin that adds it for you.

    Why don’t shoppers see the WooCommerce AI Assistant?

    It is built for store admins and does not appear on the storefront. The customer-facing option is the AI Support Assistant. You enable it separately and configure it with an AI provider, a knowledge base and product information.

    Is chat worth it on a low-traffic site?

    Sometimes not. If visitors send a handful of different questions a month, a clear FAQ, a contact form and a visible phone number may serve them better. Chat pays off when the same questions keep coming back, or when after-hours inquiries would otherwise be lost.

  • Landing page design best practices for WordPress

    Key takeaways

    • Pick one goal and repeat its button at the top, after the persuasive content and at the bottom. A second, different goal competes with the first.
    • Unbounce’s 2024 benchmark found pages written at a 5th to 7th grade level converted at 11.1%, against 5.3% for professional-level copy. That is a correlation, not proof that simpler copy causes the lift.
    • Don’t lazy-load the hero image. It is usually the largest element on the page, and Google counts a Largest Contentful Paint of 2.5 seconds or less as good.
    • In a block theme, a Front Page template overrides Settings > Reading. That is why some homepage changes appear to do nothing.
    • A checkout that looks right in the editor proves nothing until the page is assigned under WooCommerce > Settings > Advanced and you have placed a test order on the storefront.

    You pay for the traffic. The page looks polished. The leads don’t come. When practitioners audit pages like this, they rarely blame the color palette. They find one of three problems: visitors can’t tell what the offer is, nothing nearby gives them a reason to trust it, or the page is broken in a way nobody saw from the editor.

    The first two are design problems. The third is mostly a WordPress problem, and it is the one most best-practice lists leave out. This article covers all three. If you haven’t built the page yet, start with how to build a landing page in WordPress and come back once you have a draft.

    Why one goal beats one button

    A landing page asks the visitor to take one action. Book a consultation, start a trial, or buy the bundle. If it also offers the newsletter, the blog and a careers link, each one is a decision the visitor has to make before they act.

    “One goal” doesn’t mean one button. WordPress.com’s product landing page guide recommends putting a call to action at the top, another after the persuasive content and another at the bottom. That is the same goal three times, placed where people make up their minds. Two different goals on one page compete with each other.

    Write the goal down before you touch the editor: “A qualified patient requests a consultation.” That sentence tells you what to measure. Count completed requests, not clicks on a button that opens a calendar.

    What the first screen has to answer

    Before anyone scrolls, the first screen should say what this is, who it’s for and what to do next. In practice that means four things:

    • a headline that names the outcome or the service
    • a supporting line with the detail that qualifies the visitor, such as location, price range or availability
    • an image of the actual product or result, not a mood photo
    • a button that describes what happens when it’s clicked

    “Check availability” and “Request a quote” are different promises. Choose the label that matches where the button goes. If a button says “Check availability” and opens a general enquiry form, change the label or the destination. “Learn more” says nothing at all.

    The headline also has to continue whatever brought the visitor in. If the ad said “emergency roof repair in Leeds”, that phrase belongs at the top of the page, not three sections down below a general company introduction. Practitioners call this message match. In community threads it’s one of the most common explanations for a page that converts badly.

    In the block editor, check the Cover or Group block that holds the hero. A large minimum height, heavy padding or vertical centering can push the button below the first screen on a phone, even when it fits on a laptop.

    How simple should the copy be?

    Simpler than you think, and as long as the offer needs. Unbounce’s 2024 Conversion Benchmark Report covered more than 41,000 landing pages. Pages written at a 5th to 7th grade reading level converted at 11.1%, compared with 5.3% for professional-level copy. Difficult words, reading time and word count all correlated negatively with conversion.

    These are correlations on Unbounce-hosted pages. They aren’t proof that cutting words causes the lift. A newsletter signup needs a headline and a field. An unfamiliar service at a high price needs proof, details and an FAQ that answers the objections people actually raise. Cut words that don’t explain the offer, and keep the ones that do.

    The same report puts the median conversion rate across industries at 6.6%, with industry medians ranging from 3.8% for SaaS to 12.3% for events and entertainment. Compare yourself with your own industry and offer, not with the overall figure.

    Where proof and forms belong

    Specific proof works better than general praise. “They explained our VAT position in one call and onboarding took a week” tells a prospect something. “Great service” doesn’t. Put proof next to the place people hesitate, usually beside the button or the form. A testimonials section at the very bottom doesn’t do that job. Use names, photos and logos only when you have permission.

    A form should ask only for what you need to qualify the lead and reply. Keep a field if its answer changes how you follow up. Remove it if it’s there because the template had it. The W3C’s forms tutorial says every control needs a real label, so a placeholder that disappears as the visitor types isn’t enough. Error messages should name the field and say how to fix it.

    Then send a real test enquiry from your phone. Check that the right inbox receives it, that the visitor sees a useful confirmation, and that spam protection doesn’t silently reject real submissions. A form that looks perfect but loses enquiries is broken.

    Trust also depends on what you forget to remove. Auditors regularly find Lorem ipsum, demo pages left in the sitemap and template phone numbers still linked from the call button on live pages. Read the published page from top to bottom before any traffic arrives.

    The same thinking applies to navigation. Remove the journeys that compete with the goal. Keep the information people need before they trust you: contact details, policies and the cart on a shop. Stripping the header and footer completely suits a short paid campaign better than an unfamiliar professional service.

    Design for the phone, then check the desktop

    In Unbounce’s dataset, 83% of visits came from mobile, while desktop converted 8% better on average. Most of your visitors are probably on a phone, and the phone is where the friction is. Design for it first.

    Page builders make this harder than it looks. Elementor’s responsive settings cascade from desktop to tablet to mobile, so a margin set for desktop carries down unless you override it. “Hide on mobile” fixes one screen by removing content from another, and Google indexes the mobile version of your page. Our guide to making a mobile-friendly website covers the theme and builder settings in detail.

    Two accessibility checks catch a lot of mobile breakage. WCAG 2.2 requires a contrast ratio of 4.5:1 for normal text and 3:1 for large text. It also requires content to reflow at a width of 320 CSS pixels without losing information or function. Test on a real phone with the keyboard open, and watch for a sticky bar or cookie banner covering the button.

    Why the hero image decides your load time

    On most landing pages the hero image is the largest element on the first screen, so it sets your Largest Contentful Paint. Google’s Core Web Vitals treat LCP of 2.5 seconds or less as good, along with INP of 200 milliseconds or less and CLS of 0.1 or less, measured at the 75th percentile of real visits.

    The most common self-inflicted delay is a “lazy-load all images” setting in an optimization plugin. web.dev’s LCP guide explains that lazy-loading the LCP image delays the moment the browser starts fetching it. Turn off lazy loading for the hero and keep it for images further down. Put the hero in the page HTML as a real image rather than a CSS background, give every image a width and height so the button doesn’t jump while the page loads, and compress the file. Our guide to optimizing pictures in WordPress covers formats and sizes.

    Speed shows up in results. Portent’s 2022 study found that a B2B site loading in one second converted three times better than one loading in five seconds. That is an association across a limited set of sites, but it points the same way as everything else.

    Measure the live, cached page, not your staging copy. Staging often runs without caching and looks worse than production. Run PageSpeed Insights more than once, and remember that purging the cache slows the site for a while as pages rebuild.

    WordPress checks that catch pages that look finished

    A page can be well designed and still not work. These checks come from official documentation. Each one fails without warning.

    CheckWhereWhat goes wrong
    Which template is servedAppearance > Editor > TemplatesIn a block theme, a Front Page template is used for the front page whatever Settings > Reading says.
    Header and footerElementor page settingsCanvas removes the theme header and footer. Full Width keeps them. Check the published page, not the editor.
    Old Elementor tutorialsElementor ProElementor’s separate Landing Page feature is deprecated and unsupported as of Pro 3.27. Build on a regular page instead.
    IndexingSEO plugin settings, robots.txtnoindex keeps a page out of Google. Blocking the page in robots.txt can stop Google from seeing that noindex tag.
    CheckoutWooCommerce > Settings > AdvancedA custom checkout page that isn’t assigned here won’t work as checkout, however good it looks.
    Shared templatesSite EditorEditing a shared template, including WooCommerce’s Single Product template, changes every page that uses it.

    Run the checks in this order: confirm which page and template WordPress is actually serving, look at it at phone width while logged out, submit the form or place a test order on the storefront, then measure the live page. Logged-in admins often see different banners and a fresher cache than visitors do. Website layout and design on WordPress explains how global styles and templates affect individual pages.

    If you’d rather describe the change in chat and have it made on the live site, SiteSelf handles design changes on existing WordPress sites, though it refuses pages owned by Elementor, Divi or Beaver Builder and tells you why.

    When A/B testing is worth it

    Test after the basics are right, not instead of them. A clearer headline won’t help much if the form drops submissions. Once the offer, the first screen and the plumbing are sound, test one thing at a time: the headline, the button or the hero image.

    Many small sites don’t have the traffic for a meaningful test. In an Unbounce and Ascend2 survey of 264 marketers at businesses with 500 or fewer employees, reported by MarketingProfs, 41% named low traffic as their biggest testing challenge. With limited traffic, don’t declare a winner after a handful of enquiries. Look at form errors, the questions customers ask, session recordings used with proper consent, and whether the traffic was ever a good match for the offer.

    Pages also decay after launch. Offers expire, prices change, forms stop reaching anyone and mobile layouts drift after updates. Put a date in the calendar to reread the page and resubmit the form.

    Frequently asked questions

    Do I need a page builder plugin for a landing page?

    No. The block editor and a suitable template can produce a clean, fast landing page. Builders add visual controls and ready-made layouts, and they also add weight and their own settings to maintain. Our article on whether you need a landing page builder walks through the tradeoff.

    What is a good landing page conversion rate?

    Unbounce’s 2024 median across industries was 6.6%, with industry medians from 3.8% to 12.3%. Your rate depends on your traffic, your offer and what you count as a conversion. Compare yourself with your own past results and your industry, not one headline number.

    Should I remove the header and footer?

    Remove what competes with the goal. Keep contact details, legal links and anything a cautious buyer would look for. In Elementor, Canvas removes both the header and footer, and Full Width keeps them, so pick the one that matches what you actually want to keep.

    Can my landing page be my homepage?

    Yes. Set it under Settings > Reading. If you use a block theme with a Front Page template, edit or remove that template, or your choice won’t take effect. Our guide to editing your homepage covers both cases.

    Is Elementor bad for landing page speed?

    It depends on the page. Heavy addons, nested sections and unoptimized hero images add weight, but a lean Elementor page can still pass Core Web Vitals. Measure your actual live page in PageSpeed Insights instead of going by the builder’s reputation.

    How many form fields should I use?

    No authoritative number exists. Ask for what you need to qualify the lead and reply, and drop the rest. Practitioners report gains from removing even one field, but those are single anecdotes, not rules.

  • Problems with WordPress today and how to fix them

    Key takeaways

    • Self-hosted WordPress has no central server that can go down. If your site fails, the cause is your site, your host, your domain or your network.
    • Plugin and theme incompatibility after an update is the most common trigger. Some conflicts only appear when two specific plugins are active together, so disabling everything at once can hide the cause.
    • Patchstack counted 11,334 new WordPress ecosystem vulnerabilities in 2025. 91% were in plugins and 46% had no developer fix at disclosure.
    • Read the error log before you raise the memory limit, change PHP or restore a backup. Each of those can hide the real cause or overwrite new orders.
    • On a stuck WooCommerce checkout, check WooCommerce > Orders before you retry, because the order may already exist. A staging copy can still charge real payments.

    When a WordPress site breaks today, WordPress itself is rarely the cause. The cause is usually one plugin, one theme, the PHP version, a cache or the host, and each of these fails in its own way. Patchstack’s report on 2025 found 91% of new WordPress vulnerabilities in plugins. Everyday breakage follows the same pattern: the trouble is in the layers around core.

    This matters because your first move decides how long the fix takes. Find the failing request or component before you change any settings. Our guide to fixing WordPress issues without guessing covers the method in depth. This page matches today’s common symptoms to the first safe step for each.

    Is WordPress down, or is it just your site?

    It is almost always just your site. Self-hosted WordPress has no central server that can go down for everyone. WordPress.com is a separate hosted service with its own status page, and that page tells you nothing about a site on your own hosting.

    Rule out the cheap explanations before you touch plugins:

    • Load the site on mobile data instead of your office Wi-Fi.
    • Confirm the domain hasn’t expired and the hosting bill is paid.
    • Check your host’s status page.

    Each of these can produce the same blank page or timeout as a broken plugin, and no amount of plugin testing will fix them.

    Which problems turn up most, and what to do first

    Nobody publishes a reliable count of which WordPress problems are most common. The table below follows the order that WordPress.org’s documentation, WooCommerce’s docs and the support forums consistently point to. Find your symptom before you change anything.

    SymptomUsual causeFirst safe step
    Something broke right after an updatePlugin or theme incompatibilityRoll back or disable that one component, on staging if you can
    “There has been a critical error on this website”PHP fatal error in a plugin, theme or custom codeRecovery Mode email, or the error log
    White screen or 500 errorPHP fatal error, .htaccess or memoryRead the error log
    “Allowed memory size … exhausted”The process named in the errorFix that process before you raise the limit
    Changes not showingA cache layer still serving the old copyPurge every layer and test in a private window
    Checkout stuck on a spinnerA failed background requestBrowser Network tab, then check Orders
    “Error establishing a database connection”Wrong wp-config.php details, or the database serverCheck the credentials, then ask the host
    Every post 404s, homepage loadsStale rewrite rulesSave Settings > Permalinks

    The site broke after an update

    This is the problem people hit most often. WordPress.org’s Recovery Mode documentation says fatal errors often come from an incompatible or faulty plugin, theme or custom code, and updates are when those incompatibilities show up. An update can break the whole site, only wp-admin, or a single feature such as checkout, a form or a layout.

    Start with what changed. If one plugin updated this morning and checkout broke this afternoon, roll back or deactivate that plugin first. If nothing obvious changed, run a conflict test the way WooCommerce documents it:

    1. Switch to a default theme.
    2. Disable all plugins.
    3. Turn them back on one at a time, and repeat the exact action that failed after each one.

    The common trap is disabling everything and calling the site fixed. Some conflicts only happen when two specific plugins run together. A blanket disable brings the site back but hides which pair caused the problem.

    One store owner on the WordPress.org forums handled this well. They updated a cookie consent plugin and a few others on staging, and guest checkout stopped working. Testing showed the consent plugin was blocking a WooCommerce script. A settings exception worked around it until the plugin’s author released a fix. The live store never saw the failure.

    If WordPress said the update itself failed, that’s a different problem. See why WordPress updating failed.

    “There has been a critical error” means PHP stopped

    This message means a PHP fatal error, almost always from a plugin, theme or code snippet. WordPress emails the admin address a Recovery Mode link, which pauses the failing component for your login session only. Visitors still see the error until you deactivate or fix that component. WordPress’s documentation calls deactivation a temporary fix, not the real one.

    The email often never arrives, especially when the admin address is an inbox nobody reads anymore. In that case, open your host’s file manager or connect over SFTP and rename the suspect plugin’s folder in wp-content/plugins. WordPress then treats that plugin as deactivated. The error log names the file that failed, which tells you which folder to rename. Our guide on how to fix a WordPress fatal error shows how to read that log.

    A white screen or a bare 500 is often the same failure with error display turned off. WordPress’s common-errors handbook lists .htaccess, plugins, the theme and memory limits as causes of a 500. The log tells you which one it is. See fixing a server error 500 on WordPress.

    Memory errors: fix the process, not the limit

    When the log shows “Allowed memory size of … bytes exhausted”, visitors usually see a critical error, a blank page or a 500. Kinsta’s documentation advises fixing the process named in the error rather than simply raising the limit. Raising WP_MEMORY_LIMIT in wp-config.php only helps when the limit really is the problem. Your host may also enforce a lower ceiling than WordPress requests, so the edit can do nothing at all.

    If the error names a plugin file, that plugin is your first suspect. Before you edit anything, ask your host what memory limit your plan actually allows.

    Changes not showing usually means a cache is still serving the old page

    A WordPress site can have five caches: a caching plugin, the host’s server cache, an object cache, a CDN and the browser. Clearing one doesn’t clear the others. Purge each layer you have, then check the page in a private window.

    Stores have a second cache problem. WooCommerce’s documentation says the Cart, Checkout and My Account pages usually need to be excluded from page caching because their content is specific to each shopper’s session. If they get cached, those pages can display incorrectly or stop working.

    A stuck checkout spinner means a request failed

    WooCommerce’s documentation says the spinner alone doesn’t tell you the cause. To find it:

    1. Open your browser’s developer tools and go to the Network tab.
    2. Filter by Fetch/XHR.
    3. Place a test order and find the request that failed.

    The failed request points to the layer at fault:

    • 403: a firewall, security rule or authorization check rejected the request.
    • 500: a PHP fatal error or server failure. Check the error log.
    • HTML or a redirect where JSON should be: a cache, security layer, proxy, redirect or PHP warning changed the response.

    The same document gives three warnings:

    • Check WooCommerce > Orders before you retry “Place order”. The order may already exist.
    • A staging copy can still charge real payments, send email and fire webhooks unless you turn those connections off.
    • Don’t switch between the Checkout block and classic checkout as a first step. The switch can hide the original incompatibility.

    “Error establishing a database connection”

    WordPress’s handbook gives two kinds of cause:

    • A wrong database name, user, password or host in wp-config.php.
    • A problem at the host, such as a database server that is down or over its quota.

    If you haven’t changed the credentials and the error comes and goes, suspect the database server.

    Extreme cases exist. One site on the WordPress.org forums had intermittent connection errors on shared hosting. Replies traced them to a wp_options table that had grown to about 32 GB, which caused table locking. The right fix in a case like that has three parts: find the plugin writing the data, back up, and have the host look at the database. A cleanup plugin that removes the data but leaves the plugin writing it only buys a few weeks.

    Every post 404s but the homepage loads

    This usually means the rewrite rules are stale. Go to Settings > Permalinks and click Save Changes without changing anything. That rebuilds the rules.

    If that doesn’t help, check two things. The server may not have Apache’s mod_rewrite module enabled, which WordPress.org’s troubleshooting FAQ lists as a cause. Or a page and a custom post type may share a slug. If you aren’t comfortable editing .htaccess, ask your host.

    Why the plugin security problem keeps getting bigger

    Patchstack counted 11,334 new vulnerabilities in the WordPress ecosystem in 2025, 42% more than in 2024:

    • 91% were in plugins and 9% in themes. Only six were in core, all low priority.
    • 46% had no fix from the developer by the time they were made public.

    Treat these numbers with care. Patchstack sells security products. Other security companies count vulnerabilities differently and get different totals. Some of the growth comes from more researchers looking. A vulnerability count is not a count of hacked sites. What every source agrees on is that the risk is in plugins, so an up-to-date core does not mean an up-to-date site.

    Site owners feel this too. In WordPress.org’s 2023 Annual Survey, the top frustration was “too many plugins (finding the right one)” at 18.6%. Security followed at 16.4%, slow performance at 16.2%, and maintenance and updates at 12.3%.

    The practical response is routine work:

    • Delete plugins you don’t use.
    • Keep the rest updated.
    • If a plugin has a publicly known flaw and no fix, deactivate or replace it.

    If you suspect a hack, WordPress security issues and how to fix them explains how to tell a compromise from an ordinary error.

    Which quick fixes make things worse

    Each of these feels like progress and often isn’t:

    • Raising the memory limit before reading the log. It hides a faulty plugin, and the host may ignore the new value anyway.
    • Clearing one cache and assuming the job is done. The CDN or server cache can still serve the old page.
    • Disabling the security plugin to see if it helps. Confirm that it blocked the request first. Otherwise you have removed protection and learned nothing.
    • Disabling plugins on a live store at a busy hour. Customers lose the features those plugins provide while you test.
    • Changing PHP because the site is slow. A PHP change is a compatibility project, not a speed fix. Test it on staging.
    • Restoring a full backup first. A restore overwrites every order, form entry and edit made since the backup was taken. Rolling back one plugin keeps them. If you do need a restore, how to restore a WordPress site from backup covers what to protect first.
    • Changing several things at once. If the site comes back, you won’t know which change fixed it.

    When to stop and get help

    Stop doing it yourself in any of these situations:

    • You are locked out of both wp-admin and your hosting files.
    • A live checkout is failing and you have no staging copy you can safely test payments on.
    • There are signs of a compromise: redirects you didn’t add, admin users you don’t recognise, or browser warnings.
    • Database errors continue even though the credentials are correct.

    Whoever takes the job needs the same information either way:

    • the URL;
    • the exact action that fails;
    • when it last worked;
    • what changed in between;
    • the relevant lines from the error log.

    Get the scope and any extra charges in writing before work starts. “Investigation” means different things to different providers.

    If you’d rather describe the symptom in chat than trace it yourself, SiteSelf’s agent can do WordPress troubleshooting and bug fixes on your existing site, using hosting access for file and code work, and reports what it changed and checked.

    Frequently asked questions

    How do I find which plugin is causing the problem?

    Disable all plugins, then turn them back on one at a time, repeating the exact action that failed after each one. Switch to a default theme too if the problem survives. Do this on staging for a store, because disabling plugins on the live site removes features customers rely on.

    Does updating WordPress fix every security issue?

    No. Core updates cover core. Plugins and themes update separately. PHP is updated on the server by your host. A dashboard that says everything is up to date tells you nothing about the PHP version running your site.

    Should I turn on automatic plugin updates?

    For well-maintained plugins on a simple site, auto-updates close security holes faster than you would by hand. On stores and sites with custom layouts, an update can break checkout or a template without warning, so test those updates on staging first. Either way, keep a backup you know you can restore.

    Why did my site suddenly slow down?

    “Slow” is a symptom with several possible causes: a plugin, large images, the host, caching, the theme, external scripts or the database. Measure the page with PageSpeed Insights before you change anything or pay for optimisation. Turning plugins off doesn’t always reveal the cause.

    Can two plugins that work fine on their own break the site together?

    Yes. Some conflicts only appear when two specific plugins, or a plugin and a theme, are active at the same time. That’s why the conflict test turns plugins back on one at a time instead of judging each plugin alone.

    Can my host fix it?

    Hosts handle server problems: database outages, memory ceilings, PHP versions and missing server modules. Most won’t debug a plugin conflict, and some charge for investigation. Ask your host to confirm your account’s limits and check the server logs, then take that information to whoever fixes the site.

  • Creating landing pages on WordPress, step by step

    Key takeaways

    • Build on Pages > Add New. Elementor’s separate Landing Page feature is deprecated as of Elementor Pro 3.27, and those legacy pages can’t be picked as the homepage.
    • Pick the layout on purpose. Elementor’s Canvas removes the header, footer and sidebars, and Full Width keeps the header and footer. Editing a shared template changes every page that uses it.
    • A form passes only when a test entry reaches the inbox. Every field needs a visible label whose for value matches the input’s id, as the W3C’s accessibility tutorials describe.
    • Unbounce’s 6.6% median conversion rate covers many platforms and industries. Compare against your own baseline, split by device and traffic source.
    • Near-identical pages for each city or keyword can fall under Google’s doorway abuse policy. Each page needs its own reason to exist.

    WordPress has no landing-page content type. A landing page is an ordinary Page with one job: get a visitor from an ad, an email or a post to take one action. You don’t need a special plugin, and you shouldn’t use the special feature some older tutorials describe. Elementor’s separate Landing Page feature is deprecated as of Elementor Pro 3.27.

    The build is the easy part. Practitioners on Reddit and the WordPress.org forums keep naming the same hard parts: the copy, the scope, mobile behaviour, testing the form, and keeping the page in step with the offer once it’s live. This guide covers the whole job, from the goal to the launch checks. If you’re still choosing a tool, our guide to building a landing page in WordPress compares the block editor with page builders.

    What should you decide before opening the editor?

    Decide on one action and write it down in a single sentence. For example: “This page helps homeowners in our area request an interior painting quote.” If you can’t write that sentence, the page will try to do three things and none of them well.

    Add three facts to the sentence. Where do visitors come from? What does the ad or email promise? What does your team need from the visitor to reply properly? Those answers decide the headline, the form fields and the slug.

    Also decide what counts as a good result. A quote request from outside your service area is still a completed form, but it isn’t work. Track qualified enquiries next to raw submissions. Otherwise a page can look successful while it fills your inbox with leads you can’t serve.

    What do you need before you start?

    • Access: an Editor or Administrator account. To set the page as the homepage, change a template or install a form plugin, you need Administrator.
    • Copy: a headline, three or four benefits, one or two pieces of real proof, and answers to the questions that hold buyers back. Write the copy before you build. Writing it during the build is what turns a three-hour page into a three-day page.
    • Images: one hero photo of real work, sized for the web.
    • A form tool your site already uses, if it has one.

    How to create the landing page

    1. Create the page. Go to Pages, then Add New. Give the page a title and set a short slug that uses the words from the ad, such as interior-painting-quote. If you change the slug after the campaign starts, every link already sent out breaks unless you add a redirect.
    2. Choose the layout for this page only. This is the setting behind most “my menu disappeared” and “why is the header still there” questions, and it depends on your theme:
      • In a block theme, assign a custom template (Learn WordPress builds one without header navigation).
      • In a classic theme, pick the blank or full-width template if the theme provides one.
      • In Elementor, open Page Settings, then Page Layout. Canvas removes the header, footer and sidebars. Full Width keeps the header and footer. Elementor’s Single Page templates apply only to pages on the Default layout.
      Don’t edit a shared template to change one page. The WordPress Theme Handbook warns that a template change affects every page that uses it.
    3. Write the hero to match the ad. An ad about interior painting should land on a headline about interior painting, not “Transform your space.” Say who the page is for, what they get and what to do next. Put the button beside that text. Use the same button wording (“Get a quote”) here and on the form’s submit button.
    4. Add benefits, proof and objections. The Learn WordPress landing page lesson lists a hero with a call to action, benefits and social proof as the core sections. Place proof near the button, not three screens below it. A named review that mentions the type of job beats an anonymous compliment. Add an FAQ only for real hesitations, and put another button after it.
    5. Build a short, accessible form. For every field, ask whether it changes what your team does next. If it doesn’t, cut it. Give every field a visible label. Placeholder text alone disappears as soon as someone types. The W3C’s guidance on labeling form controls says an explicit label’s for value must match the input’s id. Error messages should say what to fix. Our guide to adding a contact form in WordPress covers the plugin side.
    6. Prepare the images. Compress the hero and check how it crops on a phone. Give informative images short alt text that says what they show. Give decorative images an empty alt="". Don’t leave the attribute out.
    7. Publish, then decide about the homepage. A campaign page can live at its own URL. If it really should replace the homepage, go to Settings, then Reading, choose “A static page” and select it as the Homepage. The Homepage and the Posts page can’t be the same page. In a block theme, check Appearance, then Editor, then Templates, because a Front Page template there can override the Reading setting.

    Selling one product? On a WooCommerce store, add the Single Product block to the page and choose the product. WooCommerce’s documentation says the block displays the product’s image, title, price and add-to-cart controls. A page that only looks like a product page can’t take payment. Keep Cart, Checkout and My Account as separate assigned pages. WooCommerce warns that combining them breaks redirects and payment gateways.

    What does a correct result look like?

    Test the live URL, not the editor preview, while logged out and on a real phone. Logged-in views often skip the cache, so you may see a version your visitors don’t. The page passes when:

    • The first screen shows the offer and the button without zooming, and no popup or cookie banner covers them.
    • The button scrolls to the form, and nothing sticky, such as a header or chat widget, hides the form after the jump.
    • A test submission shows a confirmation and arrives in the right inbox. A success message on screen isn’t proof the email was delivered.
    • Submitting with a required field left empty shows an error that says what to fix.
    • The browser tab shows your real site name, not the default “My WordPress Blog” that practitioners on X keep finding on launch day.
    • The exact URL from the ad, tracking parameters included, opens the page.

    What to do if it did not work

    Most broken landing pages are a setting, not a bug. Start with the symptom:

    SymptomUsual causeFix
    New page shows a 404A cached 404, or rewrite rules that need refreshingPurge every cache layer: plugin, host and CDN. If all pages 404 but the homepage loads, open Settings, then Permalinks, and click Save Changes without changing anything.
    Visitors see an old versionOnly one cache layer was clearedPurge every layer and check in a private window. See why a WordPress page isn’t updating.
    Menu missing, or header still showingWrong layout (Canvas or Full Width)Change the layout on this page only.
    Homepage still shows postsReading setting not saved, or a block theme Front Page templateCheck both.
    Page missing from the Homepage dropdownIt was built with Elementor’s legacy Landing Page typeSave the design as a template, insert it into a regular Page, then assign that Page.
    Elementor editor won’t loadPlugin conflict or PHP memoryTry Elementor’s Safe Mode, deactivate plugins one at a time, and check the memory limit (Elementor recommends at least 256 MB).

    Don’t change the site-wide permalink structure to fix one page. WP Engine’s support docs warn that this can cause 404s across an established site. If the editor error is misleading, check the PHP error log as well as the browser console. In one WordPress.org support thread, “elementor is not defined” turned out to be the host’s 128 MB memory cap. When a fix needs server access or the cause stays hidden after these steps, ask your host or a developer.

    Should you make a version for every city or keyword?

    Only if each version has something real to offer that the others don’t. Google’s spam policies describe doorway abuse as pages that are substantially similar, target similar queries or locations, and funnel users to one destination. Swapping the city name in an otherwise identical page fits that description. One commenter on r/marketing gave a sensible rule: reuse a template when the use cases really are alike, and write separate pages when they differ.

    Paid-traffic variants are different. Pages for an ad test are usually kept out of search anyway. If you run two near-copies, point a rel="canonical" at the main one or redirect the loser when the test ends.

    How do you tell if the page is working?

    Use your own numbers first. Unbounce reports a 6.6% median conversion rate from its Q4 2024 data across about 41,000 pages. That covers many industries and builders, and none of the data is specific to WordPress. A quote request, a sign-up and a purchase are different decisions, so a benchmark is context, not a target.

    Record visits, form starts, submissions and qualified enquiries, split by device and by traffic source. Mobile falling while desktop holds points to layout, overlays or loading. People starting the form and not finishing points to fields or errors. Lots of traffic from one source with weak leads points to the ad’s promise. Change one thing at a time. On a low-traffic site, fix confirmed faults and clear confusing copy, and call untested tweaks guesses.

    Then keep the page current. Practitioners on X describe the same decline: the demo gets imported and the text swapped, and then the price goes stale, nobody tests the form again, and the mobile layout slowly breaks as people add sections. Put a date in the calendar to re-test the form and check the offer. If you’d rather describe each change in chat and have it made and checked on your existing site, that’s what SiteSelf’s page and copy edits cover, though pages owned by Elementor, Divi or Beaver Builder are refused, with the reason.

    Frequently asked questions

    Can I create a landing page without a plugin?

    Yes. A regular Page, the block editor and a blank or custom template are enough. Builders save time with templates and ready-made widgets. They also add weight and make it harder to switch tools later.

    Should a landing page hide the site navigation?

    No controlled evidence settles this. A page for paid traffic with one action usually works best without the menu. A page that people find through search, or that needs to build trust, often benefits from keeping it. Match the page to the traffic source and test.

    How long does creating a landing page take?

    Reports on r/Wordpress range from an hour or two to several days. One developer estimated three to four hours for a simple one-pager. Having the copy and images ready matters more than which tool you pick.

    Does a fast landing page rank better?

    Speed helps visitors, especially on phones, but it is one consideration among many. A well-built page still competes with established pages that have links and history. Treat speed as a requirement for the people who arrive, not as a ranking strategy.

    Can I keep my old Elementor landing pages?

    Elementor says existing landing pages are not affected, but it recommends against using the feature going forward. There’s no rush to migrate. Rebuild a legacy page as a regular Page when you next need to change it, or when it has to become the homepage.

  • How to make a mobile friendly website on WordPress

    Key takeaways

    • Google recommends responsive design, meaning one site and one URL that adapts to the screen. Separate mobile themes like WPtouch take the opposite approach.
    • Most sideways scrolling comes from one element with a fixed width, such as a logo, header column or paragraph. Find that element and fix it. Don’t put overflow: hidden on the whole page.
    • Test at 320 CSS pixels wide, the width WCAG 2.2 Reflow uses. Make tap targets at least 24 by 24 CSS pixels, the WCAG AA minimum.
    • Google retired the Mobile-Friendly Test in December 2023. Use a real phone, Search Console URL Inspection and PageSpeed Insights instead.
    • Speed is a separate job. In HTTP Archive’s 2025 Web Almanac, only 45% of WordPress sites passed Core Web Vitals on mobile.

    The usual complaint is “it looks fine on desktop and awful on my phone.” The usual fix is smaller than people expect. Most themes made in the last several years are already responsive. One element, plugin setting or stale cache is breaking them.

    Google indexes and ranks the mobile version of your pages. Its mobile-first indexing guide calls responsive design the easiest setup to build and maintain: one site and one URL, with the layout adapting to the screen. Everything below works toward that. If you already know which CSS rule you need, our guide to CSS media queries for mobile goes deeper.

    What you need before you start

    You need an admin login and a phone. Most fixes can be made in the block editor or with Additional CSS. Classic themes have Additional CSS under Appearance → Customize. Block themes have it in the Styles panel of the Site Editor. Editing theme files needs a child theme or hosting access. Take a backup first, and try larger changes on a staging copy if your host provides one.

    Step by step: making the site work on phones

    1. Write down what is actually broken

    Open your most important pages on a real phone. That means the homepage, a service or product page, the contact form and, for stores, cart and checkout. For each problem, note the page, the screen width and the symptom, for example: “Contact page, 390px, submit button hidden behind sticky bar.” Then open Chrome DevTools, turn on the device toolbar and set the width to 320px. That is the width WCAG 2.2 Reflow uses. Content should read at that width without scrolling in two directions.

    Google retired the Mobile-Friendly Test and the Search Console Mobile Usability report in December 2023. Older guides still send people to them. Use URL Inspection in Search Console to see how Google renders a page.

    2. Confirm the theme is responsive and the viewport tag is there

    View the page source and look for this line in the <head>:

    <meta name="viewport" content="width=device-width, initial-scale=1">

    Current themes almost always include it. Without it, phones draw a desktop-width page and shrink it. With it, fixed-width elements still overflow, so the tag alone isn’t enough. Don’t add maximum-scale=1 or user-scalable=no. W3C mobile accessibility guidance says to avoid them, because they stop people from zooming.

    If the theme has no mobile layout at all, it’s a theme decision. See the section on rebuilding below.

    3. Find the element that is wider than the screen

    Sideways scrolling, or a white strip down the right side, almost always comes from a single element. Paste this into the DevTools console at phone width:

    document.querySelectorAll('*').forEach(el => {
      if (el.offsetWidth > document.documentElement.clientWidth) console.log(el);
    });

    The usual suspects are a logo with a pixel width, a header split into fixed columns, an image or embed with inline sizes, and an animation that slides in from off-screen. Remove the fixed width, or override it at narrow widths:

    img, video { max-width: 100%; height: auto; }
    
    @media (max-width: 600px) {
      .site-logo img { width: 160px; }
      .wide-box { width: auto; }
    }

    Don’t reach for overflow: hidden on the body. In one WordPress.org support thread about an Elementor header, that rule removed the side margin but clipped the mobile menu down to one visible item. If custom CSS has piled up, remove it and add it back one rule at a time until the problem returns.

    4. Use the responsive controls WordPress already has

    In the block editor, select a Columns block and check that “Stack on mobile” is on. WordPress 7.1 adds responsive styles to block themes. You can set a block’s font size, padding and other settings separately for mobile and tablet. Set them per block type under Appearance → Editor → Styles → Blocks, or per block in its Responsive styles view.

    The limits trip people up. Responsive styles only work in block themes. Tablet values don’t carry over to mobile, so set mobile on its own. Some toolbar controls, such as text alignment, still apply at every size. Your theme’s breakpoints may also differ from the defaults. Page builders keep their own per-device settings, and a margin set on desktop may need changing again on mobile.

    5. Check embeds, tables and text inside images

    A responsive page can still hold a video that doesn’t resize. If you control the theme, opt in with add_theme_support( 'responsive-embeds' );. The Block Editor Handbook lists this as an opt-in feature, so it is off by default. Wide tables are one of the exceptions in the Reflow guidance. They can scroll inside their own box while the page stays put:

    .wp-block-table { overflow-x: auto; }

    Text baked into an image shrinks with the image until nobody can read it. Put the words in a Cover block or a heading instead.

    6. Make menus, buttons and forms work with a thumb

    WCAG 2.2 Target Size (Minimum) sets 24 by 24 CSS pixels as the AA minimum for anything people tap, with some exceptions. Treat that as the floor. Bigger and better-spaced is easier. Open and close the menu, then fill in each form with your thumb. Watch for a keyboard or sticky bar covering the submit button, labels that vanish once you start typing, and error messages that appear off-screen. Use type="email" and type="tel" on fields so phones bring up the right keyboard.

    7. Keep the mobile content the same as desktop

    Hiding blocks on mobile is tempting. Google warns that primary content missing from the mobile version, or loaded only after a tap or swipe, may not be indexed. Titles, meta descriptions and structured data should match desktop too. Hide decoration, not prices, contact details or copy. Accordions and tabs are fine as long as the content is in the page.

    Don’t force the desktop layout onto phones either. A WordPress.org volunteer explained the reason to an owner who wanted exactly that: visitors end up zooming and scrolling sideways. Mobile-specific CSS is the better fix.

    8. Test the store pages separately

    A theme can handle blog posts well and still struggle with WooCommerce. WooCommerce’s guide to choosing the right theme says to check every store page, including My Account, cart and checkout. On a phone, choose a product option, change the quantity and get as far as payment.

    9. Clear every cache layer

    “My fix didn’t work” often means “I’m looking at old CSS.” Purge your caching plugin, then your host’s cache, then the CDN, then your browser. Clearing one layer can leave another serving the old version. Our guide on a WordPress page not updating walks through the order.

    10. Treat speed as its own job

    A layout can fit perfectly and still be slow on mobile data. HTTP Archive’s 2025 Web Almanac found that 45% of WordPress sites passed all Core Web Vitals on mobile. Google’s “good” thresholds are LCP within 2.5 seconds, INP below 200 milliseconds and CLS below 0.1.

    Start with images. Resize them to the size they actually display at, use WebP and lazy-load images below the fold. Don’t lazy-load the hero image, because that delays LCP. Then look at third-party scripts and heavy plugins. Our guide to optimizing pictures in WordPress covers the image side.

    What a correct result looks like

    At 320px and on your own phone, nothing scrolls sideways. Text reads without pinching. The menu opens, closes and shows every link. Forms submit and show their errors next to the right field. The store pages work through to payment. URL Inspection shows Google the same content as desktop. A good PageSpeed score doesn’t prove the menu works, and a poor one doesn’t mean the layout is broken. Check both.

    If it still breaks after the fix

    Suspect an optimisation or plugin setting before you suspect the theme. In one TablePress support thread, horizontal scrolling on mobile stopped working because of SiteGround Optimizer’s “Combine JavaScript Data” setting. Turning it off fixed the problem. On a staging copy, turn off one suspect at a time, such as JS combining, CSS combining or animations, and retest after each. Turning an optimisation off can lower your speed score. Keep that tradeoff in mind instead of switching everything off.

    When the theme isn’t worth retrofitting

    Sometimes the theme stacks everything into one column that looks wrong, or it has no mobile layout at all. At that point you are fighting the theme with overrides. Nobody has good data on when rebuilding beats retrofitting. A useful test: if most of your fix list is “override the theme’s layout,” the theme is the problem. If it’s a handful of elements, fix the elements.

    When to stop and get help

    Stop if the fix needs theme files and you have no backup, if checkout is affected, or if you have been turning plugins on and off on the live site for an hour. If you’d rather describe the problem, for example “the menu on the contact page is cut off on phones,” and have someone make the edit and check it, SiteSelf handles website edits through chat. Pages owned by Elementor, Divi or Beaver Builder are refused, and you are told why.

    Frequently asked questions

    Is there a plugin that makes WordPress mobile friendly?

    Not in the sense people hope for. Your theme and CSS decide whether the site is responsive. Plugins like WPtouch serve a separate mobile theme to phones. That is the opposite of the responsive approach Google recommends, and it needs careful cache setup. Mobile menu plugins can fix the menu, but nothing else on the page.

    Do I need a separate mobile version of my site?

    Generally no. Google recommends responsive design because separate mobile setups add ways to fail: redirects to the wrong page, missing content and metadata that doesn’t match. Edits made on desktop also get missed on the mobile copy.

    Is a resized desktop browser good enough for testing?

    It’s good for finding layout overflow quickly. It won’t show the keyboard covering a button, how a tap feels or how the page behaves on mobile data. Check the important pages on at least one real phone before calling them done.

    What text size should I use on mobile?

    No standard sets a single number. Many themes use 16px body text as a sensible default. The test that matters is whether text reflows at 320px and when zoomed without forcing sideways scrolling.

    Will fixing mobile break my desktop layout?

    Not if you put the changes inside media queries for narrow widths, or use the mobile settings in your blocks. Changes made outside a media query apply everywhere. That’s why you should check desktop again after each fix.

  • 504 HTTP code on WordPress and how to fix it

    Key takeaways

    • Each layer has its own limit: nginx, a host proxy, PHP, PHP-FPM, the CDN. In one WordPress.org thread, nginx allowed 300 seconds and the request still died at 60.
    • The action may have finished anyway. A menu save that returned a 504 had saved, and a checkout that timed out still sent its order email, so check before you retry.
    • On a store, look up the payment in your gateway’s records and in WooCommerce → Status → Logs before telling a customer to try again.
    • Raise a timeout only at the layer the logs point to. One user fixed a bulk image job by raising a cPanel proxy timeout from 300 to 1,200 seconds.
    • If many unrelated URLs time out together, look at PHP worker capacity before blaming one plugin.

    A 504 Gateway Timeout means a server that passes requests along, such as nginx, your host’s proxy or a CDN, waited for the server behind it and gave up. RFC 9110, the HTTP standard, defines it like that: a gateway or proxy did not get a timely response from an upstream server it needed. On a WordPress site, that upstream is almost always PHP running WordPress, and behind PHP sits the database or a remote service.

    So the code tells you where the waiting stopped. It doesn’t tell you what was slow. The most common mistake is to raise a timeout before working out which layer gave up and what work was taking so long. If you are seeing 503s as well, our explainer on what a 503 response code means covers the code that looks the most like this one.

    How is a 504 different from a 502 or 503?

    All three are server-side errors, but each one blames a different part of the chain. The table shows where each one sends you first.

    CodeWhat happenedWhere to look first
    502 Bad GatewayThe upstream answered, but the answer was broken or unusablePHP error log, crashed PHP processes
    503 Service UnavailableThe server said it can’t take the request right nowMaintenance mode, overload, resource limits
    504 Gateway TimeoutThe upstream didn’t answer before the gateway’s limit ran outWhich request hung, and which layer ended it
    524 (Cloudflare only)Cloudflare’s own timeout waiting for your originYour origin server, not Cloudflare

    The error page won’t tell you whether your host, a plugin, the database or a payment API was slow. It can also look different depending on who generated it: “504 Gateway Time-out (nginx)”, “Update failed: 504 Gateway Timeout” in the admin, an import plugin’s error line, or a checkout that spins and then fails.

    Why the action may have worked even though you saw an error

    A 504 means the gateway stopped waiting. PHP may keep going after that. In one WordPress.org thread, a menu save returned a 504 after about a minute, but the menu had been updated. In a WooCommerce thread, checkout hung for 60 seconds and showed “Gateway Timeout”, and the order email still arrived.

    That changes what you do next. Don’t refresh a heavy request over and over. Every retry can start another copy of the same slow work, take another PHP worker and make the queue longer. Check what happened first: did the post save, did the import write rows, did the payment go through.

    Step one: find the exact request that timed out

    Most of the diagnosis comes before you change a single setting. Collect these facts while the error is fresh:

    1. Write down the URL, the action and the time. “Saving the main menu at 14:32”, not “the admin is broken”.
    2. Open the browser’s Network panel (right-click, Inspect, Network), repeat the action once and find the red 504 row. Note the request URL, such as /wp-admin/admin-ajax.php, /wp-json/... or ?wc-api=..., and how long it ran before failing.
    3. Work out the scope. One action or many URLs? Admin only, or the front end too? Every time, or only some of the time?
    4. Look at the duration. If failures keep stopping at about the same number of seconds, that number is a configured limit. It points you to the layer that set it.
    5. Get the logs for that timestamp. You need the access log, the error log, the PHP error log and, if you can get it, the database slow-query log. On shared or managed hosting, ask support to match your URL and time against their logs and tell you which component returned the 504.

    Kinsta’s server-errors documentation recommends the same thing: match the time and URL of the failure to the access and error logs. If you want PHP errors from WordPress too, turn on private logging in wp-config.php above the “stop editing” line:

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

    Errors then go to wp-content/debug.log and visitors don’t see them. WordPress’s debugging handbook says these tools are meant for local or staging sites, so turn them off when you are done. In one Stack Overflow case, reinstalling and deactivating plugins did nothing, and the debug log showed the exact line that was breaking.

    What usually causes a WordPress 504, and the fix for each

    Nobody publishes data on how often each cause happens. The order below follows how often each one turns up as the confirmed answer in WordPress.org, Stack Overflow and Reddit threads. That partly reflects which fixes are easy to report, so treat it as a place to start, not a ranking.

    A plugin doing too much work in one request

    This is the usual cause when the 504 hits one action, especially in wp-admin, and the rest of the site works. Admin requests skip the page cache and run admin-only plugin code, so a slow hook shows up there first. In the Nav Menu Roles thread, deactivating the plugin turned a save that timed out after about a minute into a two-second save.

    Scale can make this worse. A plugin that is harmless on 500 posts can rewrite every post on every dashboard load when you have tens of thousands. One detailed 2026 write-up described a post-ordering plugin doing exactly that. The 504 looked like a failed login.

    Fix: use the Health Check plugin’s troubleshooting mode. WordPress’s support handbook explains that it turns off plugins and switches to a default theme for your logged-in session only, so visitors keep seeing the normal site. Turn plugins back on one at a time until the 504 comes back. Then update, configure, replace or report the plugin. Turning it off for good is a workaround, not a fix.

    A long job running inside a browser request

    Imports, backups, migrations, security scans and bulk image optimization all try to do minutes of work inside one web request. Messages like “Import Error 504 Gateway Time-out” come from this.

    Fix: make the work smaller or move it out of the browser. Kinsta recommends WP-CLI or scripts for imports, exports and bulk operations. Use the plugin’s batch or chunk settings if it has them. For Duplicator, its documentation suggests directory filters, a different database build method or the DupArchive engine, which has a 500 MB limit in the free Lite version. Duplicator’s Max Build Time limits only the plugin’s own build. It does not lift your host’s limits.

    A slow external service

    Some plugins call out to SMTP servers, payment gateways, shipping APIs or licence servers while the page waits. If that service is slow, the whole request waits with it. In the WooCommerce checkout thread, turning off the SMTP plugin made checkout work but stopped all order emails. Trying other SMTP plugins didn’t help. Switching from the SMTP server to a mail API service fixed it.

    Fix: find which remote call is hanging and replace it, cache its result or give it a shorter deadline. Turning off the feature only hides the symptom.

    PHP workers are all busy

    If many unrelated URLs return 504 at the same moment, think capacity before you think plugin. Kinsta’s documentation explains that requests can queue while they wait for a free PHP thread, then time out. Requests that visitors have already abandoned can still be holding workers.

    Fix: find out what is filling the workers, such as uncached traffic, a bot or one slow endpoint called over and over. In one thread, restarting PHP-FPM brought a site back after renaming the plugins folder did not. That restart is a host or server task, and it clears the jam without explaining it. More workers need more memory, so a plan upgrade without a diagnosis can cost more and change nothing. One store on a 6-core, 12 GB plan still had 504s.

    The limit was raised at the wrong layer

    Every layer between the visitor and the database has its own clock, and whichever runs out first sends the error. In one WordPress.org thread, a scan of about 150,000 files kept dying at about 60 seconds. Nginx was set to 300 seconds, and raising PHP’s max_execution_time made no difference. Duplicator’s documentation makes the same point: if PHP limits are already high and the problem continues, the web server’s timeout may be the one cutting the request off.

    LayerSettingWho usually changes it
    PHPmax_execution_timeYou (php.ini or host panel), if the host allows it
    PHP-FPMPool and request time limitsHost or server admin
    Nginxproxy_read_timeout, fastcgi_read_timeoutHost or server admin
    Host proxy (for example cPanel’s)Proxy timeoutHost
    CDNOrigin response timeoutCDN plan and settings

    The nginx documentation gives proxy_read_timeout a default of 60 seconds. It measures the gap between two reads from the upstream, not the total time the response takes. Hosts often change these values, so a repeating 60-second failure is a clue, not proof.

    Fix: raise a limit only at the layer the logs point to, and only for work that really needs the time. In one thread, a bulk image job failed at 60.081 seconds and worked once the cPanel proxy timeout went from 300 to 1,200. Raising limits everywhere just lets slow work hold workers for longer.

    A CDN in front of the site

    A CDN can have a shorter timeout than your origin server. Cloudflare reports its own timeout as 524, not 504, and its “Host Error” page points at your server. A CDN won’t fix a slow origin. It only caches pages for anonymous visitors, which is why the homepage can load fine while wp-admin and checkout time out.

    A 504 at checkout: check the payment before anything else

    On a WooCommerce store, a checkout that times out can still have charged the customer. One WordPress.org case with Stripe and PayPal shows exactly that: the payment went through, but the request back to the store returned 504 and the thank-you page never loaded. If the customer tries again, you can end up charging them twice.

    WooCommerce’s troubleshooting guide for orders gives the order of checks. Open the order and read its status and notes. Search the payment gateway’s own records for the transaction. Read the gateway log under WooCommerce → Status → Logs. If the gateway shows a charge but the order is still pending, check the webhook or callback setup and match the two up before you ship anything. Only then tell the customer what to do.

    When to stop and get help

    Stop guessing once you have the URL, the time and a scope, but no logs. At that point the fix sits with whoever can see the server: your host for proxy, PHP-FPM and resource limits, or a developer for plugin code and slow queries. Send them the request, the timestamp, the duration and what you have already ruled out. If a store migration or plugin update stalls partway, don’t mark steps as complete by hand to get past the timeout. Keep the backup and get help.

    If you’d rather hand over the whole job, SiteSelf’s WordPress troubleshooting and bug fixes work starts from the error on your live site: with hosting (SSH) access it reads the logs, makes the fix, fetches the page again and tells you in chat what changed. For other errors, the guide to why WordPress is not loading sorts problems by what you see on screen.

    Frequently asked questions

    Is a 504 my host’s fault or my site’s?

    The code alone can’t tell you, and in public threads the answer goes both ways. Some 504s come from a plugin’s admin code, others from a crowded server. The logs decide it, so ask your host to match your URL and timestamp against them before you change plans or blame anyone.

    Why does the 504 still happen after I raised max_execution_time?

    Another layer is probably ending the request first, such as nginx, the host’s proxy or PHP-FPM. If the error still arrives at the same number of seconds after your change, you changed the wrong clock. Ask the host which component returned the 504.

    Why does it happen only in wp-admin?

    Admin pages skip the page cache and run plugin code that never runs for visitors. A fast cached homepage doesn’t mean the server behind it is healthy. Test with Health Check’s troubleshooting mode to find which plugin’s admin code is slow.

    Will a CDN or better hosting fix a 504?

    A CDN caches pages for anonymous visitors. It doesn’t make slow PHP faster, so admin pages and checkout still time out. Bigger hosting helps when the logs show the server is out of capacity, and does nothing for a plugin stuck in a loop.

    Will moving away from WordPress stop the timeouts?

    Not on its own. Replies in r/webdev made the point that heavy work times out on any framework if it runs inside a web request. The fix is the same anywhere: batch the work, queue it or run it from the command line.

    Is there a fix for a 500 error that hides a 504?

    Some hosts show a generic 500 page while their access log records a 504. If the 500 steps don’t help, ask what the access log recorded for that request. Our guide to fixing a server error 500 covers the real 500 cases.