WordPress Troubleshooting Checklist: How to Isolate the Real Root Cause
WordPress Troubleshooting Checklist: Areas to Check First, Commands to Run, and How to Isolate the Real Root Cause
When a WordPress website starts behaving strangely, the biggest mistake is jumping to conclusions too early. A problem that looks like a theme issue may actually be caused by a plugin. A Gutenberg editor issue may be caused by security rules in .htaccess. A broken admin area may look like a CSS problem but actually be a blocked load-styles.php request.
The only reliable way to solve WordPress problems is to troubleshoot in a structured way.
In this guide, I will walk through a practical troubleshooting framework for WordPress sites, especially for problems like:
- wp-admin looks broken after login
- Gutenberg editor formatting like Bold does not work
- public site is fine but admin/edit mode is broken
- changing theme does not help
- disabling browser cache does not solve the issue
- plugin conflicts are suspected
- security plugins or rewrite rules are interfering
This tutorial also includes real commands you can run on a Linux/XAMPP server using terminal and WP-CLI.
Why a structured troubleshooting process matters
WordPress issues often have overlapping symptoms.
For example:
- a theme problem can affect styling
- a plugin problem can affect editing
- a security rule can block admin assets
- a cache rule can make the browser show old broken behavior
- a must-use plugin can keep loading even when all plugins appear disabled
That is why random trial-and-error wastes time. A clear step-by-step process helps you isolate the real culprit faster.
Step 1: Observe the scope of the problem
Before running commands, ask these questions:
1. Is the public website broken, or only wp-admin?
This is the first major split.
- If public site is broken, suspect theme, plugins, permissions, or core issues
- If public site is fine but admin is broken, suspect admin CSS/JS, plugins, security rules, or editor conflicts
2. Is the issue only on one post/page, or everywhere?
Test:
- a brand new post
- a different existing post
- the same post in another browser
If the issue happens only on one post, it may be bad block content or broken markup in that post.
3. Is the issue visual only, or functionality too?
Example:
- toolbar missing but
Cmd+Bstill works → likely UI/CSS issue - toolbar missing and
Cmd+Bdoes not work → likely plugin/editor logic issue
That distinction is very important.
Step 2: Check browser-level issues first
Sometimes the problem is not on the server at all.
Areas to check
- cached CSS/JS
- site storage/local storage
- extensions like Grammarly, ad blockers, dark mode tools
- browser-specific editor corruption
What to do
Open in Incognito
If the issue disappears in Incognito, it is likely:
- browser cache
- extension conflict
- site data corruption
Hard refresh
On Mac:
Cmd + Shift + R
Clear site data in Chrome
- open the website
- click the icon near the address bar
- Site settings
- Clear data
If the issue still happens in Incognito and another browser, then move on to server-side isolation.
Step 3: Check file ownership and permissions
If files were manually copied, edited, or moved as root, permissions and ownership should be verified.
Check WordPress root ownership
cd /opt/lampp/htdocs/devopsschool/blog
ls -lrt
Check ownership of key WordPress folders
stat -c '%U:%G %a %n' wp-admin wp-includes wp-content wp-config.php
Find anything not owned by the correct web user
find . \( ! -user www-data -o ! -group www-data \) -ls | head -50
Find any files touched by root
find . -user root -ls | head -50
Normalize ownership and permissions
chown -R www-data:www-data .
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chmod 640 wp-config.php
What good output usually looks like
- directories:
755 - files:
644 wp-config.php:640is fine- owner/group:
www-data:www-dataor whatever your Apache/PHP user uses
If ownership and permissions are already correct, stop spending time there and move on.
Step 4: Rule out theme issues
Many WordPress problems are blamed on themes too early.
First question
Does the same problem happen with another theme?
List installed themes
wp theme list --allow-root
Activate a default theme
wp theme activate twentytwentyfour --allow-root
or
wp theme activate twentytwentythree --allow-root
What the result means
- if the issue disappears on a default theme, theme or theme-related customization is involved
- if the issue remains across multiple themes, the theme is probably not the main problem
A very important learning here is this:
If the same issue happens with many themes, stop blaming the theme.
Step 5: Check if wp-admin assets are loading correctly
If logged-in admin looks broken but the public site looks fine, this is one of the most important areas to check.
Symptoms
- wp-admin looks like plain HTML
- left menu is unstyled
- post editor looks broken
- buttons or controls are missing
- customizer or editor is visually broken
This usually means WordPress admin CSS/JS is not loading.
Check .htaccess
cd /opt/lampp/htdocs/devopsschool/blog
ls -la .htaccess wp-admin/.htaccess
sed -n '1,200p' .htaccess
[ -f wp-admin/.htaccess ] && sed -n '1,200p' wp-admin/.htaccess
Real-world example
A security plugin had written rules into .htaccess that blocked:
wp-admin/load-styles.phpwp-admin/load-scripts.php
That made wp-admin appear broken even though WordPress core and themes were fine.
Example of a dangerous block
# BEGIN WP CERBER GROOVE
RewriteCond %{REQUEST_URI} ^(.*)wp-admin/+load-scripts\.php$ [OR,NC]
RewriteCond %{REQUEST_URI} ^(.*)wp-admin/+load-styles\.php$ [NC]
RewriteCond %{HTTP_COOKIE} !cerber_groove_x_...
RewriteRule (.*) - [R=403,L]
# END WP CERBER GROOVE
Fix by removing the block
cp .htaccess .htaccess.bak.$(date +%F-%H%M%S)
sed -i '/# BEGIN WP CERBER GROOVE/,/# END WP CERBER GROOVE/d' .htaccess
That kind of rule can break wp-admin even if the public site is fine.
Step 6: Verify WordPress core integrity
If you suspect core files are corrupted, do not guess.
Verify core checksums
wp core verify-checksums --allow-root
What this means
- if verification passes, WordPress core files are likely intact
- if it fails, repair core
Repair core files without touching themes/plugins
wp core download --skip-content --force --allow-root
This is a safe and clean way to restore WordPress core files.
Step 7: Disable all plugins and test again
This is one of the most powerful steps.
If the issue disappears when all plugins are disabled, then you know with high confidence it is a plugin conflict.
Deactivate all plugins
wp plugin deactivate --all --allow-root
Test again
After disabling all plugins:
- open a brand new post
- add a Paragraph block
- type text
- select a word
- test Bold
- test Cmd+B
If the issue disappears, the problem is plugin-related.
Step 8: Do not forget must-use plugins
One common mistake is thinking all plugins are disabled when they are not.
Must-use plugins in wp-content/mu-plugins still load even after normal plugins are deactivated.
Check must-use plugins
ls -la wp-content/mu-plugins/
Disable one temporarily
mv wp-content/mu-plugins/aaa-wp-cerber.php wp-content/mu-plugins/aaa-wp-cerber.php.off
This is extremely important because MU plugins can silently continue affecting admin or editor behavior.
Step 9: Identify the culprit plugin with binary testing
Once you know plugins are the issue, do not reactivate everything randomly.
Use a structured process.
List all plugins
wp plugin list --allow-root
Reactivate in batches
Example batch:
wp plugin activate classic-editor code-block-pro syntax-highlighting-code-block luckywp-table-of-contents pdf-embedder seo-by-rank-math ad-inserter --allow-root
Another batch:
wp plugin activate wpdiscuz youtube-embed-plus yotuwp-easy-youtube-embed simple-author-box simple-banner simple-blog-stats wp-rss-aggregator wp-sitemap-page google-sitemap-generator --allow-root
If one batch causes the issue and another does not, you have narrowed the culprit to one group.
Then activate one by one
wp plugin activate disable-xml-rpc-api --allow-root
wp plugin activate creame-whatsapp-me --allow-root
wp plugin activate limit-login-attempts-reloaded --allow-root
wp plugin activate merpress --allow-root
wp plugin activate plagiarism-checker-by-sst --allow-root
wp plugin activate wp-security-audit-log --allow-root
wp plugin activate wp-fastest-cache --allow-root
wp plugin activate wp-mail-smtp --allow-root
wp plugin activate wp-paypal --allow-root
wp plugin activate wps-hide-login --allow-root
Test after each activation.
This is exactly how the real culprit can be found.
Step 10: Example of a real plugin culprit
In this case, the actual plugin causing the Gutenberg Bold issue was:
plagiarism-checker-by-sst
Symptom
- Bold formatting in Gutenberg did not work
- multiple themes were tested
- admin styling issue was fixed separately
- once all plugins were disabled, Bold started working
- when plugins were reactivated one by one, the issue returned when
plagiarism-checker-by-sstwas enabled
Fix
Keep it disabled:
wp plugin deactivate plagiarism-checker-by-sst --allow-root
This is a classic example of a plugin interfering with Gutenberg rich-text functionality.
Step 11: Check editor-related code in themes and plugins
If the problem looks like a Gutenberg/editor issue, search code for admin/editor hooks.
Search theme/editor hooks
grep -RniE "admin_enqueue_scripts|enqueue_block_editor_assets|enqueue_block_assets|customize_register|admin_head|login_enqueue_scripts|block_editor_settings_all" wp-content/themes
Search plugin/editor hooks
grep -RniE "admin_enqueue_scripts|enqueue_block_editor_assets|wp_enqueue_script|wp_enqueue_style|gutenberg|block_editor|unregisterFormatType|allowedFormats|contenteditable|tinymce|execCommand" wp-content/plugins
Search for suspicious CSS hiding toolbar behavior
grep -RniE "components-toolbar|rich-text|toolbar|display:\s*none|visibility:\s*hidden|opacity:\s*0|pointer-events:\s*none" wp-content
This helps you catch:
- editor CSS pollution
- hidden toolbar buttons
- disabled text formats
- scripts injected into admin screens
Step 12: Use browser DevTools when necessary
When the issue is still unclear, browser tools can show exactly what is happening.
Network tab
Look for:
load-styles.phpload-scripts.php- failed CSS/JS requests
- 403 / 404 / 500 errors
Console tab
Look for red errors involving:
wp.richTextwp.blockEditorformat-library- custom plugin or theme JS files
If CSS is not loading or JS errors appear, that often points directly to the cause.
Step 13: Debug WordPress more safely
Temporarily add these to wp-config.php:
define( 'CONCATENATE_SCRIPTS', false );
define( 'SCRIPT_DEBUG', true );
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
Why this helps
SCRIPT_DEBUGloads non-minified JS/CSSCONCATENATE_SCRIPTScan bypass combined loader issuesWP_DEBUG_LOGcaptures warnings/errors to log files
This is especially useful when admin assets are failing.
Step 14: Suggested troubleshooting order
Here is the order I recommend for real-world WordPress troubleshooting:
1. Observe the scope
- public only?
- admin only?
- single post only?
- browser-specific?
2. Test browser basics
- incognito
- hard refresh
- clear site data
- disable extensions
3. Check permissions and ownership
- owner/group
755dirs644files- no stray root-owned files
4. Switch to a default theme
- confirm whether the issue is theme-related
5. Check .htaccess
- especially security rules affecting wp-admin
6. Verify core
- run
wp core verify-checksums
7. Disable all plugins
- test cleanly
8. Check MU plugins
wp-content/mu-plugins
9. Reactivate plugins in batches
- then one by one
10. Search code
- admin/editor hooks
- CSS hiding controls
- Gutenberg format restrictions
11. Use DevTools
- Network
- Console
This order saves a lot of time.
Final lessons learned
This troubleshooting journey highlights a few important truths:
1. One symptom can hide multiple problems
There may be more than one issue at the same time.
2. Admin-only problems are not always theme problems
If public view is fine, look at admin CSS/JS, plugins, and rewrite rules.
3. Security plugins can leave rules behind
Even after disabling them, their .htaccess changes may remain active.
4. MU plugins are easy to forget
A must-use plugin can continue affecting the site even when all regular plugins are off.
5. Plugin conflicts are often the real culprit
In this case, plagiarism-checker-by-sst was the root cause of the Gutenberg Bold problem.
6. Structured troubleshooting beats guessing
The faster you isolate scope, test variables one by one, and observe results, the faster you find the real cause.
Useful command summary
Theme checks
wp theme list --allow-root
wp theme activate twentytwentyfour --allow-root
Plugin checks
wp plugin list --allow-root
wp plugin deactivate --all --allow-root
wp plugin activate plugin-slug --allow-root
MU plugin checks
ls -la wp-content/mu-plugins/
mv wp-content/mu-plugins/plugin.php wp-content/mu-plugins/plugin.php.off
Core verification
wp core verify-checksums --allow-root
wp core download --skip-content --force --allow-root
Ownership and permissions
stat -c '%U:%G %a %n' wp-admin wp-includes wp-content wp-config.php
find . \( ! -user www-data -o ! -group www-data \) -ls | head -50
chown -R www-data:www-data .
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chmod 640 wp-config.php
.htaccess inspection
sed -n '1,200p' .htaccess
Search theme/plugin hooks
grep -RniE "admin_enqueue_scripts|enqueue_block_editor_assets|enqueue_block_assets|customize_register" wp-content
Conclusion
If you troubleshoot WordPress issues without a checklist, you will often waste hours chasing the wrong cause. But if you follow a structured path — browser, permissions, themes, .htaccess, core, plugins, MU plugins, code hooks, and DevTools — you can isolate even very tricky issues.
In this case, what looked like a theme/editor issue turned out to be a combination of:
- blocked wp-admin asset loading from security rewrite rules
- and a Gutenberg conflict caused by
plagiarism-checker-by-sst
That is exactly why systematic troubleshooting matters.