Solutions to common issues with Guard Dog. If you don't find your issue here, check the FAQ or visit the WordPress.org support forums.
Emergency: Locked Out of Site
Scenario 1: Forgot Custom Login URL
What happened: You enabled custom login URL but forgot what you set it to.
Quick fix via FTP/File Manager:
- Connect to your site via FTP or cPanel File Manager
- Navigate to
/wp-content/plugins/ - Rename
guard-dogfolder toguard-dog-disabled - Access your site via normal
/wp-login.php - Log in to WordPress admin
- Rename folder back to
guard-dog - Go to Guard Dog settings and note/change your login URL
Fix via database:
- Access phpMyAdmin or database tool
- Go to the
wp_optionstable - Find row where
option_name=guard_dog_login_slug - The
option_valueshows your custom login URL - Change it or delete the row to disable custom URL
Fix via wp-config.php:
- Edit
wp-config.phpvia FTP - Add this line before
/* That's all, stop editing! */:define('GUARD_DOG_BYPASS', true); - Access
/wp-login.phpnormally - Log in and fix settings
- Remove the line from wp-config.php after fixing!
Scenario 2: Locked Out by IP Whitelist
What happened: Enabled site-wide blocking or IP whitelist without adding your IP.
Fix via database:
- Access phpMyAdmin
- Go to
wp_optionstable - Find
guard_dog_site_wide_blockingand set value to0 - Or find
guard_dog_ip_whitelistand add your IP - Save changes
Fix via FTP:
- Rename Guard Dog plugin folder to disable it
- Access site normally
- Fix settings
- Rename folder back
Scenario 3: Locked Out by Failed Login Attempts
What happened: Too many failed login attempts, now locked out.
Options:
Wait it out:
- Lockout expires automatically (usually 15-30 minutes)
- Simplest solution if you can wait
Database fix:
- Access phpMyAdmin
- Find table:
wp_guard_dog_login_attempts - Find your IP address in the table
- Delete that row or set
lockout_expiryto past date - You can immediately log in
FTP fix:
- Disable plugin temporarily (rename folder)
- Log in normally
- Re-enable plugin
- Adjust login limiting settings if needed
Scenario 4: Lost 2FA Device and Recovery Codes
What happened: Can't access authenticator app and don't have recovery codes.
Fix via admin assistance:
- Contact another site administrator
- They can disable 2FA on your account
- Then log in with just password and re-setup 2FA
Fix via database:
- Access phpMyAdmin
- Go to
wp_usermetatable - Find your user ID (check
wp_userstable) - Delete rows where:
user_id= your IDmeta_key=_guard_dog_totp_enabled
- This disables 2FA for your account
Fix via FTP:
- Temporarily disable Guard Dog plugin
- Log in with just password
- Re-enable plugin
- Set up 2FA again with new device
Installation & Setup Issues
Plugin Won't Activate
Error: "The plugin does not have a valid header"
Cause: Incomplete plugin files or corrupted download
Fix:
- Deactivate and delete the plugin
- Re-download from WordPress.org
- Upload fresh copy
- Activate
Error: "PHP Fatal error: Cannot redeclare class"
Cause: Plugin files exist in multiple locations
Fix:
- Check
/wp-content/plugins/for duplicate folders - Remove duplicate
guard-dogfolders - Keep only one copy
Error: "This plugin requires PHP 7.4 or higher"
Cause: Your server uses PHP 7.3 or older
Fix:
- Contact your hosting provider
- Request PHP upgrade to 7.4 or higher (8.0+ recommended)
- Most hosts allow this via cPanel
Database Tables Not Created
Symptoms: Plugin active but features don't work, "table doesn't exist" errors
Fix:
- Deactivate Guard Dog
- Reactivate Guard Dog
- Check if tables now exist (via phpMyAdmin)
Manual table creation (advanced):
If deactivate/reactivate doesn't work, check PHP error logs for database errors. You may need to create tables manually or contact hosting support.
Settings Won't Save
Symptoms: Click "Save Changes" but settings don't persist
Possible causes:
-
File permissions issue
- WordPress can't write to database
- Check file ownership and permissions
-
PHP timeout
- Large forms timeout before saving
- Increase
max_execution_timein php.ini
-
Memory limit
- PHP runs out of memory
- Increase
memory_limitin php.ini or wp-config.php
-
Form size limit
- POST data too large
- Increase
post_max_sizein php.ini
-
Caching issue
- Old values cached
- Clear all caches (plugin, object, page cache)
Fix:
- Clear all caches
- Try in different browser (incognito mode)
- Check PHP error logs
- Contact hosting support to increase limits
- Test with other plugins disabled (conflict check)
Feature-Specific Issues
Custom Login URL Issues
Issue: Both URLs show 404
Symptoms: Custom login URL and /wp-login.php both give 404
Fix:
- Go to Settings → Permalinks
- Click "Save Changes" (flushes rewrite rules)
- Test both URLs again
Issue: Redirect loop when accessing custom URL
Cause: Conflicting plugin or theme redirect
Fix:
- Disable other security plugins
- Switch to default WordPress theme temporarily
- Clear .htaccess redirects
- Check for hardcoded redirects in theme
Issue: Custom URL works but other features break
Symptoms: Password reset doesn't work, logout fails, etc.
Cause: Theme or plugin using hardcoded URLs
Fix:
- Contact theme/plugin developer
- Theme should use
wp_login_url()function - Never hardcode
/wp-login.php
CAPTCHA Issues
Issue: CAPTCHA not appearing
Causes & Fixes:
-
JavaScript error:
- Open browser console (F12)
- Look for errors
- Disable conflicting plugins
-
Wrong API keys:
- Verify Site Key and Secret Key
- Check they're from correct provider
- Re-copy from provider dashboard
-
Domain not registered:
- Add your domain in CAPTCHA provider dashboard
- For localhost: add
localhostto allowed domains
-
Ad blocker:
- Disable ad blocker
- Test in incognito mode
- Ad blockers often block CAPTCHA scripts
-
Theme CSS conflict:
- CAPTCHA may be hidden by CSS
- Inspect element to check
- Add custom CSS to position correctly
Issue: CAPTCHA appears but verification always fails
Causes:
-
Wrong Secret Key:
- Secret Key doesn't match Site Key
- Re-copy both keys
-
Domain mismatch:
- Your domain isn't registered with provider
- Register it in provider dashboard
-
Server firewall:
- Server blocking API calls to CAPTCHA provider
- Contact hosting support
-
reCAPTCHA v3 score threshold too strict:
- Lower threshold to 0.3 or 0.4
- Test and gradually increase
Issue: Different CAPTCHA appears on mobile
This is normal – Some providers show different challenges on different devices. Test on actual mobile devices to ensure it works.
Two-Factor Authentication Issues
Issue: "Invalid verification code" error
Causes & Fixes:
-
Time sync issue:
- Phone clock out of sync with server
- Enable automatic time sync on phone
- Check authenticator app time sync setting
-
Code expired:
- Codes change every 30 seconds
- Wait for new code to appear
- Enter immediately
-
Wrong account in app:
- Multiple accounts in authenticator
- Ensure you're using code for correct site
-
Typing error:
- Enter exactly as shown (no spaces)
- Be careful with similar characters (0 vs O)
Issue: QR code won't scan
Fixes:
- Increase screen brightness
- Clean camera lens
- Move closer/farther from screen
- Use manual entry:
- Click "Can't scan?"
- Enter secret key manually in app
Issue: Lost recovery codes
If you can still log in:
- Go to your user profile
- Generate new recovery codes
- Save them securely this time
If you can't log in:
- See Locked Out – Lost 2FA Device above
Issue: Email 2FA codes not arriving
Causes:
-
Email provider not configured:
- Check Settings → Email Provider
- Verify credentials are correct
-
Spam folder:
- Check spam/junk mail
- Add sender to safe list
-
Wrong email address:
- Check user's email in profile
- Verify it's correct
-
Email delivery delay:
- Wait 1-2 minutes
- Check provider dashboard for errors
Fix:
- Configure or verify email provider settings
- Test email sending
- Use app-based 2FA as more reliable alternative
Login Attempt Limiting Issues
Issue: Legitimate users getting locked out frequently
Causes:
- Settings too strict
- Users mistyping passwords
- Shared IP (office/school)
Fixes:
Adjust settings:
- Increase Maximum Retries to 7-10
- Keep lockout duration reasonable (15-30 min)
Whitelist IPs:
- Add office/home IPs to IP Whitelist
- Whitelisted IPs never get locked out
User education:
- Tell users to use password managers
- Reduce typos
Issue: Lockouts not working (bots still trying unlimited attempts)
Causes:
- Feature disabled
- IP on whitelist
- Cache serving old data
Fixes:
- Verify feature is enabled in Login Security settings
- Check IP isn't whitelisted
- Clear all caches
- Check Activity Log to verify lockouts are being recorded
Access Control Issues
Issue: IP whitelist not working
Symptoms: Whitelisted IP still blocked
Causes:
-
Wrong IP format:
- Typo in IP address
- Extra spaces
- Wrong CIDR notation
-
Dynamic IP changed:
- Your IP changed since adding to whitelist
- Check current IP vs. whitelisted IP
-
IPv6 vs IPv4:
- Added IPv4 but server sees IPv6
- Add both versions
-
Behind proxy/CDN:
- WordPress sees proxy IP instead of your actual IP
- Configure reverse proxy settings first (see Reverse Proxy / CDN Issues)
- Then whitelist your real IP, not the proxy IP
Fix:
- First, configure reverse proxy settings if applicable (see Reverse Proxy / CDN Issues)
- Verify your current IP (whatismyipaddress.com)
- Check what Guard Dog detects (Sessions -> Settings -> "Detected IP")
- Whitelist the IP Guard Dog is detecting
- Remove old/wrong entries
Issue: Accidentally enabled site-wide blocking
Symptoms: Entire site shows "Access Denied"
Fix:
- See Locked Out – IP Whitelist above
Activity Log Issues
Issue: Events not being logged
Causes:
-
Event type disabled:
- Check Event Settings
- Enable desired event types
-
Database error:
- Check PHP error logs
- Table may be corrupted
-
Caching:
- Old data being displayed
- Clear caches and refresh
Fix:
- Enable event types in Activity Log settings
- Check PHP error logs for database errors
- Clear caches
Issue: Too many log entries, database growing
Symptoms: Activity log table very large, site slowing down
Fix:
Immediate:
- Go to Settings → Data Management
- Clear logs older than 30 days
- This provides immediate relief
Long-term:
- Enable automatic cleanup (90-day retention)
- Disable verbose event types:
- Uncheck "Post Updated"
- Uncheck "Profile Updated"
- Keep security events only
- Export logs before clearing (for records)
Issue: Can't export logs
Causes:
- Memory limit too low
- Too many entries
- Server timeout
Fix:
- Filter logs to smaller dataset
- Export in batches (by date range)
- Increase PHP memory limit
- Contact hosting support
Temporary User Access Issues
Issue: Access link not working
Symptoms: Clicking link doesn't log user in
Causes:
-
User expired:
- Past expiry date
- Automatically deleted
-
Login limit reached:
- Used all allowed logins
- User deleted
-
Link incomplete:
- Didn't copy full URL
- Missing token parameter
-
User manually deleted:
- Admin deleted the user
- Link no longer valid
Fix:
- Create new temporary user
- Send new access link
- Verify full link is copied
Issue: Can't create temporary user
Error messages:
"Username already exists":
- Choose different username
- Previous temp user may still exist
"Invalid email":
- Use proper email format
- Check for typos
General errors:
- Check PHP error logs
- Verify database tables exist
- Try different browser
Reverse Proxy / CDN Issues
All IP Shift Alerts Show the Same IP Address
Symptoms: Every IP shift alert email shows the same IP address (e.g., a Google Cloud, Cloudflare, or AWS IP), regardless of which user triggered the alert or where they are located.
Root cause: Your site is behind a reverse proxy, CDN, or load balancer, and Guard Dog is detecting the proxy's IP address instead of visitors' real IPs. When some requests arrive without forwarded headers (cache warming, health checks, internal requests), REMOTE_ADDR returns the proxy IP, triggering a false IP shift.
Fix:
- Go to Guard Dog -> Sessions -> Settings
- Scroll to Reverse Proxy / Load Balancer
- Set IP Detection Method for your infrastructure:
- Cloudflare: Select "Cloudflare"
- Kinsta / Google Cloud: Select "X-Forwarded-For"
- WP Engine: Select "X-Forwarded-For"
- AWS ELB / ALB: Select "X-Forwarded-For"
- Nginx reverse proxy: Select "X-Real-IP" or "X-Forwarded-For"
- Add your proxy's IP address(es) to Trusted Proxy IPs
- Save settings
- Verify the Detected IP field shows your real IP, not the proxy IP
How to find your proxy IP: The IP address that appears in every false alert is your proxy's IP. You can also check the Activity Log for an IP that appears across many different users.
Guard Dog Shows Proxy IP Instead of Real Visitor IP
Symptoms: The "Detected IP" field, Activity Log, or session details show your proxy/CDN infrastructure IP for all visitors.
Diagnosis steps:
-
Check current detection: Go to Sessions -> Settings and look at the "Detected IP" row. If it shows an internal/infrastructure IP (like
10.x.x.x,172.x.x.x, or your CDN's IP), configuration is needed. -
Identify your proxy type:
- Check with your hosting provider
- Common setups: Cloudflare (uses
CF-Connecting-IP), Nginx (usesX-Forwarded-FororX-Real-IP), AWS ELB (usesX-Forwarded-For)
-
Configure detection method:
- Set the IP Detection Method to match your proxy type
- Add proxy IPs to Trusted Proxy IPs
- Save and verify with "Detected IP"
-
If "Auto" mode doesn't work: Switch to the specific header for your infrastructure. Auto mode checks all headers but may pick up the wrong one in complex multi-proxy setups.
IP-Based Security Features Not Working Behind Proxy
Symptoms: Login limiting, access control, or IP reputation features aren't working correctly. All visitors appear to have the same IP.
Cause: Without reverse proxy configuration, Guard Dog sees the proxy IP for all visitors, making IP-based features ineffective:
- Login limiting counts all attempts against one IP (the proxy)
- Access control whitelist/blacklist matches the proxy IP, not visitor IPs
- IP reputation checks the proxy's reputation, not the visitor's
Fix:
- Configure reverse proxy settings as described above
- After configuring, verify by checking Activity Log entries – different users should now show different IP addresses
- Review and update any IP whitelist/blacklist entries that may have been set using the proxy IP
Reverse Proxy Settings Not Taking Effect
Symptoms: You configured the reverse proxy settings but Guard Dog still shows the wrong IP.
Check:
-
Correct detection method? Make sure you selected the right method for your proxy. Try different methods if unsure.
-
Proxy IP in trusted list? If you added trusted proxy IPs, make sure the actual proxy IP (
REMOTE_ADDR) is included. The proxy IP is shown in parentheses next to "Detected IP" on the settings page. -
Multiple proxy layers? If your traffic passes through multiple proxies (e.g., Cloudflare -> Nginx -> App), you may need to add all intermediate proxy IPs to the trusted list.
-
Valid IP/CIDR format? Trusted proxy IPs must be valid IPv4/IPv6 addresses or CIDR ranges. Invalid entries are silently ignored during sanitization.
-
Cache cleared? If using page caching, clear the cache after changing settings to ensure the settings page loads fresh.
Fallback: If nothing works, set detection method to "Auto" with an empty trusted proxy list. This reverts to default behavior which checks all common proxy headers.
Performance Issues
Site Running Slow After Installing Guard Dog
Diagnosis:
-
Check Activity Log table size:
SELECT COUNT(*) FROM wp_guard_dog_activity_log;- If > 100,000 rows, clear old logs
-
Disable verbose event logging:
- Turn off post updates, profile updates
- Keep security events only
-
Check failed login attempts table:
SELECT COUNT(*) FROM wp_guard_dog_login_attempts;- Clear old/expired lockouts
Fixes:
- Clear old activity logs
- Reduce events being logged
- Enable automatic cleanup
- Optimize database tables
- Use object caching (Redis/Memcached)
Database Errors
Error: "Table 'wp_guard_dog_activity_log' doesn't exist"
Fix:
- Deactivate Guard Dog
- Reactivate Guard Dog
- Tables should be recreated
If still failing, check:
- Database permissions (can WordPress create tables?)
- PHP error logs for specific error
- Contact hosting support
Error: "Duplicate column" or "Column already exists"
Cause: Database migration issue during update
Fix:
- Note the error message
- Post in support forums with:
- Exact error message
- WordPress version
- PHP version
- Guard Dog version
Compatibility Issues
Conflict with Other Security Plugins
Symptoms:
- Features not working
- Duplicate login forms
- Multiple CAPTCHA challenges
- Errors on login page
Common conflicts:
- Two plugins both modifying login URL
- Multiple 2FA plugins
- Multiple CAPTCHA plugins
- Multiple login limiting features
Fix:
- Identify overlapping features
- Disable one plugin's version of the feature
- Or completely remove one plugin
- Test thoroughly
Recommended:
- Use Guard Dog for login/2FA/CAPTCHA
- Use Wordfence/Sucuri for malware scanning
- Don't use multiple plugins for same feature
Theme Conflicts
Symptoms:
- Login page looks broken
- CAPTCHA in wrong position
- Buttons not working
Cause: Theme CSS or JavaScript interfering
Fix:
- Switch to default WordPress theme (Twenty Twenty-Three)
- Test if issue persists
- If fixed: contact theme developer
- They need to fix their theme's compatibility
WooCommerce Issues
Issue: WooCommerce My Account login doesn't work with custom login URL
Cause: WooCommerce may hardcode login URLs in some areas
Fix:
- WooCommerce should work automatically
- If issues persist, report to WooCommerce support
- They should use
wp_login_url()function
Issue: WooCommerce checkout broken after enabling features
Rarely happens, but if it does:
- Temporarily disable CAPTCHA
- Check if issue persists
- If fixed: CAPTCHA position issue
- Contact theme developer
Debug Mode
Enabling Debug Logging
To troubleshoot issues:
- Go to Guard Dog → Settings → Debug
- Check "Enable Debug Logging"
- Set Debug Level:
- ERROR – Only critical errors
- WARNING – Warnings and errors
- INFO – General information
- DEBUG – Verbose debugging (very detailed)
- Save settings
- Reproduce the issue
- Download debug log
Reading Debug Logs
Debug logs show:
- Timestamp of events
- Log level (ERROR, WARNING, INFO, DEBUG)
- Component (which feature)
- Message
- Context data
Example log entry:
[2024-10-23 14:30:15] ERROR [Login URL] Direct access to wp-login.php blocked
IP: 203.0.113.50
Sharing Debug Logs
When reporting issues:
- Enable debug logging
- Reproduce the issue
- Download the log
- Remove any sensitive data (passwords, private keys)
- Include relevant portion in support request
Getting Additional Help
Before Requesting Support
Gather this information:
- WordPress version: Dashboard → Updates
- PHP version: Site Health → Info → Server
- Guard Dog version: Plugins page
- Active plugins: List all active plugins
- Theme: Active theme name and version
- Error messages: Exact text of any errors
- Debug log: Relevant portion if available
Where to Get Help
Free community support:
- WordPress.org Support Forums
- Response time: Usually within 24-48 hours
Before posting:
- Search existing threads
- Check FAQ and this troubleshooting guide
- Gather information above
When posting:
- Use descriptive title
- Include all gathered information
- Explain steps to reproduce
- Mention what you've already tried
Reporting Bugs
To report a bug:
- Verify it's reproducible
- Check it's not already reported
- Post in support forums with:
- "[BUG]" in title
- WordPress/PHP versions
- Steps to reproduce
- Expected vs actual behavior
- Screenshots if applicable