claude-plugin-wordpress-manager 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +19 -0
- package/.mcp.json +19 -0
- package/CHANGELOG.md +62 -0
- package/LICENSE +69 -0
- package/README.md +213 -0
- package/agents/wp-content-strategist.md +148 -0
- package/agents/wp-deployment-engineer.md +93 -0
- package/agents/wp-performance-optimizer.md +198 -0
- package/agents/wp-security-auditor.md +161 -0
- package/agents/wp-site-manager.md +109 -0
- package/commands/wp-audit.md +37 -0
- package/commands/wp-backup.md +45 -0
- package/commands/wp-deploy.md +38 -0
- package/commands/wp-setup.md +64 -0
- package/commands/wp-status.md +53 -0
- package/docs/GUIDE.md +1190 -0
- package/hooks/hooks.json +57 -0
- package/hooks/scripts/backup-reminder.sh +29 -0
- package/hooks/scripts/pre-deploy-check.sh +49 -0
- package/package.json +46 -0
- package/scripts/health-check.sh +110 -0
- package/scripts/validate-wp-operation.sh +115 -0
- package/servers/wp-rest-bridge/build/server.d.ts +2 -0
- package/servers/wp-rest-bridge/build/server.js +74 -0
- package/servers/wp-rest-bridge/build/tools/comments.d.ts +227 -0
- package/servers/wp-rest-bridge/build/tools/comments.js +192 -0
- package/servers/wp-rest-bridge/build/tools/index.d.ts +919 -0
- package/servers/wp-rest-bridge/build/tools/index.js +30 -0
- package/servers/wp-rest-bridge/build/tools/media.d.ts +174 -0
- package/servers/wp-rest-bridge/build/tools/media.js +247 -0
- package/servers/wp-rest-bridge/build/tools/plugin-repository.d.ts +62 -0
- package/servers/wp-rest-bridge/build/tools/plugin-repository.js +149 -0
- package/servers/wp-rest-bridge/build/tools/plugins.d.ts +153 -0
- package/servers/wp-rest-bridge/build/tools/plugins.js +175 -0
- package/servers/wp-rest-bridge/build/tools/search.d.ts +44 -0
- package/servers/wp-rest-bridge/build/tools/search.js +44 -0
- package/servers/wp-rest-bridge/build/tools/unified-content.d.ts +328 -0
- package/servers/wp-rest-bridge/build/tools/unified-content.js +628 -0
- package/servers/wp-rest-bridge/build/tools/unified-taxonomies.d.ts +244 -0
- package/servers/wp-rest-bridge/build/tools/unified-taxonomies.js +492 -0
- package/servers/wp-rest-bridge/build/tools/users.d.ts +269 -0
- package/servers/wp-rest-bridge/build/tools/users.js +226 -0
- package/servers/wp-rest-bridge/build/types.d.ts +151 -0
- package/servers/wp-rest-bridge/build/types.js +2 -0
- package/servers/wp-rest-bridge/build/wordpress.d.ts +48 -0
- package/servers/wp-rest-bridge/build/wordpress.js +305 -0
- package/servers/wp-rest-bridge/package.json +27 -0
- package/skills/wordpress-router/SKILL.md +78 -0
- package/skills/wordpress-router/references/decision-tree.md +88 -0
- package/skills/wp-abilities-api/SKILL.md +97 -0
- package/skills/wp-abilities-api/references/php-registration.md +67 -0
- package/skills/wp-abilities-api/references/rest-api.md +13 -0
- package/skills/wp-audit/SKILL.md +114 -0
- package/skills/wp-audit/references/performance-checklist.md +113 -0
- package/skills/wp-audit/references/security-checklist.md +95 -0
- package/skills/wp-audit/references/seo-checklist.md +128 -0
- package/skills/wp-backup/SKILL.md +87 -0
- package/skills/wp-backup/references/backup-strategies.md +116 -0
- package/skills/wp-backup/references/restore-procedures.md +129 -0
- package/skills/wp-block-development/SKILL.md +176 -0
- package/skills/wp-block-development/references/attributes-and-serialization.md +22 -0
- package/skills/wp-block-development/references/block-json.md +49 -0
- package/skills/wp-block-development/references/creating-new-blocks.md +46 -0
- package/skills/wp-block-development/references/debugging.md +36 -0
- package/skills/wp-block-development/references/deprecations.md +24 -0
- package/skills/wp-block-development/references/dynamic-rendering.md +23 -0
- package/skills/wp-block-development/references/inner-blocks.md +25 -0
- package/skills/wp-block-development/references/registration.md +30 -0
- package/skills/wp-block-development/references/supports-and-wrappers.md +18 -0
- package/skills/wp-block-development/references/tooling-and-testing.md +21 -0
- package/skills/wp-block-development/scripts/list_blocks.mjs +121 -0
- package/skills/wp-block-themes/SKILL.md +118 -0
- package/skills/wp-block-themes/references/creating-new-block-theme.md +37 -0
- package/skills/wp-block-themes/references/debugging.md +24 -0
- package/skills/wp-block-themes/references/patterns.md +18 -0
- package/skills/wp-block-themes/references/style-variations.md +14 -0
- package/skills/wp-block-themes/references/templates-and-parts.md +16 -0
- package/skills/wp-block-themes/references/theme-json.md +59 -0
- package/skills/wp-block-themes/scripts/detect_block_themes.mjs +117 -0
- package/skills/wp-content/SKILL.md +103 -0
- package/skills/wp-content/references/content-templates.md +230 -0
- package/skills/wp-content/references/seo-optimization.md +169 -0
- package/skills/wp-deploy/SKILL.md +52 -0
- package/skills/wp-deploy/references/hostinger-deploy.md +51 -0
- package/skills/wp-deploy/references/ssh-deploy.md +63 -0
- package/skills/wp-interactivity-api/SKILL.md +181 -0
- package/skills/wp-interactivity-api/references/debugging.md +29 -0
- package/skills/wp-interactivity-api/references/directives-quickref.md +30 -0
- package/skills/wp-interactivity-api/references/server-side-rendering.md +310 -0
- package/skills/wp-migrate/SKILL.md +100 -0
- package/skills/wp-migrate/references/cross-platform.md +104 -0
- package/skills/wp-migrate/references/hostinger-migration.md +86 -0
- package/skills/wp-performance/SKILL.md +148 -0
- package/skills/wp-performance/references/autoload-options.md +24 -0
- package/skills/wp-performance/references/cron.md +20 -0
- package/skills/wp-performance/references/database.md +20 -0
- package/skills/wp-performance/references/http-api.md +15 -0
- package/skills/wp-performance/references/measurement.md +21 -0
- package/skills/wp-performance/references/object-cache.md +24 -0
- package/skills/wp-performance/references/query-monitor-headless.md +38 -0
- package/skills/wp-performance/references/server-timing.md +22 -0
- package/skills/wp-performance/references/wp-cli-doctor.md +24 -0
- package/skills/wp-performance/references/wp-cli-profile.md +32 -0
- package/skills/wp-performance/scripts/perf_inspect.mjs +128 -0
- package/skills/wp-phpstan/SKILL.md +99 -0
- package/skills/wp-phpstan/references/configuration.md +52 -0
- package/skills/wp-phpstan/references/third-party-classes.md +76 -0
- package/skills/wp-phpstan/references/wordpress-annotations.md +124 -0
- package/skills/wp-phpstan/scripts/phpstan_inspect.mjs +263 -0
- package/skills/wp-playground/SKILL.md +103 -0
- package/skills/wp-playground/references/blueprints.md +36 -0
- package/skills/wp-playground/references/cli-commands.md +39 -0
- package/skills/wp-playground/references/debugging.md +16 -0
- package/skills/wp-plugin-development/SKILL.md +114 -0
- package/skills/wp-plugin-development/references/data-and-cron.md +19 -0
- package/skills/wp-plugin-development/references/debugging.md +19 -0
- package/skills/wp-plugin-development/references/lifecycle.md +33 -0
- package/skills/wp-plugin-development/references/security.md +29 -0
- package/skills/wp-plugin-development/references/settings-api.md +22 -0
- package/skills/wp-plugin-development/references/structure.md +16 -0
- package/skills/wp-plugin-development/scripts/detect_plugins.mjs +122 -0
- package/skills/wp-project-triage/SKILL.md +40 -0
- package/skills/wp-project-triage/references/triage.schema.json +143 -0
- package/skills/wp-project-triage/scripts/detect_wp_project.mjs +592 -0
- package/skills/wp-rest-api/SKILL.md +116 -0
- package/skills/wp-rest-api/references/authentication.md +18 -0
- package/skills/wp-rest-api/references/custom-content-types.md +20 -0
- package/skills/wp-rest-api/references/discovery-and-params.md +20 -0
- package/skills/wp-rest-api/references/responses-and-fields.md +30 -0
- package/skills/wp-rest-api/references/routes-and-endpoints.md +36 -0
- package/skills/wp-rest-api/references/schema.md +22 -0
- package/skills/wp-wpcli-and-ops/SKILL.md +125 -0
- package/skills/wp-wpcli-and-ops/references/automation.md +30 -0
- package/skills/wp-wpcli-and-ops/references/cron-and-cache.md +23 -0
- package/skills/wp-wpcli-and-ops/references/debugging.md +17 -0
- package/skills/wp-wpcli-and-ops/references/multisite.md +22 -0
- package/skills/wp-wpcli-and-ops/references/packages-and-updates.md +22 -0
- package/skills/wp-wpcli-and-ops/references/safety.md +30 -0
- package/skills/wp-wpcli-and-ops/references/search-replace.md +40 -0
- package/skills/wp-wpcli-and-ops/scripts/wpcli_inspect.mjs +90 -0
- package/skills/wpds/SKILL.md +60 -0
- package/skills/wpds/references/wpds-mcp-setup.md +59 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wp-audit
|
|
3
|
+
description: This skill should be used when the user asks to "audit my site", "security
|
|
4
|
+
check", "site health check", "performance check", "SEO audit", "check my WordPress",
|
|
5
|
+
"is my site secure", "why is my site slow", or mentions any form of WordPress site
|
|
6
|
+
assessment. Orchestrates security, performance, and SEO audits.
|
|
7
|
+
version: 1.0.0
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# WordPress Site Audit Skill
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
Orchestrates comprehensive WordPress site audits across three dimensions: security, performance, and SEO. Can run targeted single-dimension audits or full assessments.
|
|
15
|
+
|
|
16
|
+
## When to Use
|
|
17
|
+
|
|
18
|
+
- User asks to audit, check, or assess their WordPress site
|
|
19
|
+
- User reports security concerns or suspicious activity
|
|
20
|
+
- User complains about slow site performance
|
|
21
|
+
- User wants to improve search engine rankings
|
|
22
|
+
- Before major deployments or migrations (pre-flight audit)
|
|
23
|
+
|
|
24
|
+
## Audit Scope Decision Tree
|
|
25
|
+
|
|
26
|
+
1. **What type of audit?**
|
|
27
|
+
- "security" / "is my site hacked?" / "vulnerabilities" → **Security audit only**
|
|
28
|
+
- "slow" / "performance" / "speed" / "PageSpeed" → **Performance audit only**
|
|
29
|
+
- "SEO" / "search ranking" / "Google" / "sitemap" → **SEO audit only**
|
|
30
|
+
- "full" / "audit" / "health check" / unspecified → **Full audit (all three)**
|
|
31
|
+
|
|
32
|
+
2. **Which site?**
|
|
33
|
+
- Check `get_active_site` for current site
|
|
34
|
+
- If user specifies a site, use `switch_site` first
|
|
35
|
+
- If multiple sites requested, audit sequentially
|
|
36
|
+
|
|
37
|
+
## Full Audit Workflow
|
|
38
|
+
|
|
39
|
+
### Step 1: Establish Context
|
|
40
|
+
1. Verify site connectivity via `discover_content_types`
|
|
41
|
+
2. Confirm which site is being audited
|
|
42
|
+
3. Note hosting type (Hostinger / other) for relevant checks
|
|
43
|
+
|
|
44
|
+
### Step 2: Security Audit
|
|
45
|
+
Delegate to **wp-security-auditor** agent or follow `references/security-checklist.md`:
|
|
46
|
+
- Plugin vulnerability scan
|
|
47
|
+
- User account audit
|
|
48
|
+
- Content integrity check
|
|
49
|
+
- DNS/SSL verification
|
|
50
|
+
- Hosting configuration
|
|
51
|
+
|
|
52
|
+
### Step 3: Performance Audit
|
|
53
|
+
Delegate to **wp-performance-optimizer** agent or follow `references/performance-checklist.md`:
|
|
54
|
+
- Plugin impact analysis
|
|
55
|
+
- Caching assessment
|
|
56
|
+
- Media optimization check
|
|
57
|
+
- External performance test (PageSpeed)
|
|
58
|
+
- Server configuration
|
|
59
|
+
|
|
60
|
+
### Step 4: SEO Audit
|
|
61
|
+
Follow `references/seo-checklist.md`:
|
|
62
|
+
- Technical SEO (sitemap, robots.txt, canonical URLs)
|
|
63
|
+
- On-page SEO sampling (meta descriptions, headings, slugs)
|
|
64
|
+
- Content quality indicators
|
|
65
|
+
- Structured data verification
|
|
66
|
+
- Core Web Vitals (from performance phase)
|
|
67
|
+
|
|
68
|
+
### Step 5: Generate Report
|
|
69
|
+
Combine findings into a unified report with:
|
|
70
|
+
- Overall health score (Critical/Warning/Good)
|
|
71
|
+
- Prioritized action items across all dimensions
|
|
72
|
+
- Quick wins vs long-term improvements
|
|
73
|
+
- Estimated effort for each recommendation
|
|
74
|
+
|
|
75
|
+
## Report Template
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
# WordPress Site Audit — [site-name]
|
|
79
|
+
**Date:** [date] | **Scope:** [full/security/performance/seo]
|
|
80
|
+
|
|
81
|
+
## Overall Health: [CRITICAL/WARNING/GOOD]
|
|
82
|
+
|
|
83
|
+
| Dimension | Score | Critical | High | Medium | Low |
|
|
84
|
+
|-------------|-----------|----------|------|--------|-----|
|
|
85
|
+
| Security | [status] | X | X | X | X |
|
|
86
|
+
| Performance | [status] | X | X | X | X |
|
|
87
|
+
| SEO | [status] | X | X | X | X |
|
|
88
|
+
|
|
89
|
+
## Priority Actions
|
|
90
|
+
1. [Most critical finding + fix]
|
|
91
|
+
2. [Second priority + fix]
|
|
92
|
+
3. [Third priority + fix]
|
|
93
|
+
|
|
94
|
+
## Detailed Findings
|
|
95
|
+
### Security
|
|
96
|
+
[findings...]
|
|
97
|
+
|
|
98
|
+
### Performance
|
|
99
|
+
[findings...]
|
|
100
|
+
|
|
101
|
+
### SEO
|
|
102
|
+
[findings...]
|
|
103
|
+
|
|
104
|
+
## Quick Wins (< 1 hour effort)
|
|
105
|
+
- [action 1]
|
|
106
|
+
- [action 2]
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Additional Resources
|
|
110
|
+
|
|
111
|
+
### Reference Files
|
|
112
|
+
- **`references/security-checklist.md`** - WordPress security audit checklist
|
|
113
|
+
- **`references/performance-checklist.md`** - Performance analysis checklist
|
|
114
|
+
- **`references/seo-checklist.md`** - SEO audit checklist
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# WordPress Performance Audit Checklist
|
|
2
|
+
|
|
3
|
+
## 1. Plugin Analysis (HIGH IMPACT)
|
|
4
|
+
|
|
5
|
+
### Checks
|
|
6
|
+
- [ ] Count active plugins (target: < 20)
|
|
7
|
+
- [ ] Identify known heavy plugins (page builders, social sharing, analytics suites)
|
|
8
|
+
- [ ] Check for redundant plugins (multiple caching, multiple SEO, multiple security)
|
|
9
|
+
- [ ] Identify plugins that load assets on every page (even where not needed)
|
|
10
|
+
- [ ] Count inactive plugins (should be deleted, not just deactivated)
|
|
11
|
+
|
|
12
|
+
### Known Heavy Plugins
|
|
13
|
+
| Plugin | Impact | Alternative |
|
|
14
|
+
|--------|--------|-------------|
|
|
15
|
+
| Elementor Pro | High (CSS/JS on all pages) | Gutenberg / GenerateBlocks |
|
|
16
|
+
| Jetpack (full) | High (many modules) | Individual lightweight alternatives |
|
|
17
|
+
| Revolution Slider | High (heavy JS/CSS) | Lightweight slider or static hero |
|
|
18
|
+
| WooCommerce | Medium-High (DB queries) | Necessary for e-commerce, optimize with caching |
|
|
19
|
+
| WPML | Medium (DB overhead) | Polylang (lighter) |
|
|
20
|
+
|
|
21
|
+
## 2. Caching Assessment (HIGH IMPACT)
|
|
22
|
+
|
|
23
|
+
### Page Caching
|
|
24
|
+
- [ ] Caching plugin active? (WP Rocket, LiteSpeed Cache, W3 Total Cache)
|
|
25
|
+
- [ ] Page cache enabled?
|
|
26
|
+
- [ ] Cache preloading enabled?
|
|
27
|
+
- [ ] Cache exclusions properly configured? (cart, checkout, account pages)
|
|
28
|
+
|
|
29
|
+
### Browser Caching
|
|
30
|
+
- [ ] Expires headers set for static assets?
|
|
31
|
+
- [ ] Cache-Control headers configured?
|
|
32
|
+
- [ ] Target: images 1 year, CSS/JS 1 month
|
|
33
|
+
|
|
34
|
+
### Object Caching
|
|
35
|
+
- [ ] Redis or Memcached available on hosting?
|
|
36
|
+
- [ ] Object cache drop-in installed?
|
|
37
|
+
- [ ] Persistent object cache active?
|
|
38
|
+
|
|
39
|
+
### CDN
|
|
40
|
+
- [ ] CDN configured? (Cloudflare, StackPath, BunnyCDN)
|
|
41
|
+
- [ ] Static assets served via CDN?
|
|
42
|
+
- [ ] CDN cache hit rate acceptable? (>90%)
|
|
43
|
+
|
|
44
|
+
## 3. Media Optimization (MEDIUM IMPACT)
|
|
45
|
+
|
|
46
|
+
### Image Checks
|
|
47
|
+
- [ ] WebP format used? (40-60% smaller than JPEG)
|
|
48
|
+
- [ ] Images properly sized? (no 4000px images displayed at 800px)
|
|
49
|
+
- [ ] Lazy loading implemented? (native `loading="lazy"` or plugin)
|
|
50
|
+
- [ ] Responsive srcsets generated?
|
|
51
|
+
- [ ] Largest image on homepage < 200KB?
|
|
52
|
+
|
|
53
|
+
### Optimization Tools
|
|
54
|
+
- ShortPixel, Imagify, or Smush for automatic compression
|
|
55
|
+
- WebP Express for format conversion
|
|
56
|
+
- Native WordPress 5.8+ generates WebP if supported
|
|
57
|
+
|
|
58
|
+
## 4. Database Health (MEDIUM IMPACT)
|
|
59
|
+
|
|
60
|
+
### Checks
|
|
61
|
+
- [ ] Post revisions limited? (recommended: 3-5 max)
|
|
62
|
+
- [ ] Spam comments cleaned? (should be 0)
|
|
63
|
+
- [ ] Trashed items emptied?
|
|
64
|
+
- [ ] Orphaned meta data cleaned?
|
|
65
|
+
- [ ] Transients expired properly?
|
|
66
|
+
- [ ] Autoloaded options size < 1MB?
|
|
67
|
+
|
|
68
|
+
### wp-config.php Settings
|
|
69
|
+
```php
|
|
70
|
+
define('WP_POST_REVISIONS', 5);
|
|
71
|
+
define('EMPTY_TRASH_DAYS', 7);
|
|
72
|
+
define('AUTOSAVE_INTERVAL', 120);
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## 5. Core Web Vitals (HIGH IMPACT for SEO)
|
|
76
|
+
|
|
77
|
+
### LCP (Largest Contentful Paint) — Target < 2.5s
|
|
78
|
+
- [ ] Hero image optimized and preloaded?
|
|
79
|
+
- [ ] Critical CSS inlined or preloaded?
|
|
80
|
+
- [ ] Server response time (TTFB) < 600ms?
|
|
81
|
+
- [ ] No render-blocking resources above the fold?
|
|
82
|
+
|
|
83
|
+
### INP (Interaction to Next Paint) — Target < 200ms
|
|
84
|
+
- [ ] JavaScript execution time minimized?
|
|
85
|
+
- [ ] Event handlers efficient?
|
|
86
|
+
- [ ] Third-party scripts deferred?
|
|
87
|
+
- [ ] No long tasks blocking main thread?
|
|
88
|
+
|
|
89
|
+
### CLS (Cumulative Layout Shift) — Target < 0.1
|
|
90
|
+
- [ ] Images/videos have explicit width/height?
|
|
91
|
+
- [ ] Fonts preloaded (no FOUT/FOIT)?
|
|
92
|
+
- [ ] No dynamically injected content above the fold?
|
|
93
|
+
- [ ] Ad slots have reserved dimensions?
|
|
94
|
+
|
|
95
|
+
## 6. Server Configuration (MEDIUM IMPACT)
|
|
96
|
+
|
|
97
|
+
### Checks
|
|
98
|
+
- [ ] PHP version >= 8.1 (8.2/8.3 preferred)
|
|
99
|
+
- [ ] PHP memory limit >= 256MB
|
|
100
|
+
- [ ] Max upload size appropriate
|
|
101
|
+
- [ ] MySQL/MariaDB latest stable
|
|
102
|
+
- [ ] HTTP/2 or HTTP/3 enabled
|
|
103
|
+
- [ ] Gzip/Brotli compression enabled
|
|
104
|
+
- [ ] Keep-alive connections enabled
|
|
105
|
+
|
|
106
|
+
## 7. Theme Assessment (LOW-MEDIUM IMPACT)
|
|
107
|
+
|
|
108
|
+
### Checks
|
|
109
|
+
- [ ] Theme is lightweight? (< 1MB total assets)
|
|
110
|
+
- [ ] Theme loads minimal CSS/JS?
|
|
111
|
+
- [ ] Theme is well-coded? (no inline styles, proper enqueueing)
|
|
112
|
+
- [ ] Child theme used? (no direct parent theme modifications)
|
|
113
|
+
- [ ] Unused theme assets removed?
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# WordPress Security Audit Checklist
|
|
2
|
+
|
|
3
|
+
## 1. Plugin Security (CRITICAL)
|
|
4
|
+
|
|
5
|
+
### Checks
|
|
6
|
+
- [ ] List all active and inactive plugins
|
|
7
|
+
- [ ] Verify each plugin is from a trusted source (WordPress.org, reputable vendor)
|
|
8
|
+
- [ ] Check each plugin version against latest available
|
|
9
|
+
- [ ] Search for known CVEs: `[plugin-name] WordPress vulnerability [year]`
|
|
10
|
+
- [ ] Flag plugins not updated in > 12 months
|
|
11
|
+
- [ ] Flag plugins with < 1,000 active installations
|
|
12
|
+
- [ ] Count inactive plugins (should be 0 — delete unused)
|
|
13
|
+
|
|
14
|
+
### Common Vulnerable Plugins (check specifically)
|
|
15
|
+
- Contact Form 7: ensure latest version
|
|
16
|
+
- WooCommerce: critical for e-commerce sites
|
|
17
|
+
- Elementor: frequent security patches
|
|
18
|
+
- Yoast SEO: moderate risk
|
|
19
|
+
- WPForms: check version
|
|
20
|
+
|
|
21
|
+
### Red Flags
|
|
22
|
+
- Plugin from unknown/non-WordPress.org source
|
|
23
|
+
- Plugin with no recent updates
|
|
24
|
+
- Plugin requesting excessive permissions
|
|
25
|
+
- Nulled/pirated premium plugins
|
|
26
|
+
|
|
27
|
+
## 2. User Account Security (HIGH)
|
|
28
|
+
|
|
29
|
+
### Checks
|
|
30
|
+
- [ ] List all users with `list_users` (context: edit)
|
|
31
|
+
- [ ] Count administrator accounts (should be 1-2 max)
|
|
32
|
+
- [ ] Check for username "admin" (brute force target)
|
|
33
|
+
- [ ] Check for generic usernames (test, demo, admin1)
|
|
34
|
+
- [ ] Verify email addresses are valid and unique
|
|
35
|
+
- [ ] Review user roles (principle of least privilege)
|
|
36
|
+
- [ ] Identify dormant accounts (no posts, no recent login)
|
|
37
|
+
|
|
38
|
+
### Role Guidelines
|
|
39
|
+
| Role | Who Should Have It |
|
|
40
|
+
|------|-------------------|
|
|
41
|
+
| Administrator | Site owner only (1-2 max) |
|
|
42
|
+
| Editor | Content managers |
|
|
43
|
+
| Author | Regular content creators |
|
|
44
|
+
| Contributor | Guest writers |
|
|
45
|
+
| Subscriber | Registered users |
|
|
46
|
+
|
|
47
|
+
## 3. Content Integrity (MEDIUM)
|
|
48
|
+
|
|
49
|
+
### Checks
|
|
50
|
+
- [ ] Review recently modified pages for injected content
|
|
51
|
+
- [ ] Search for suspicious HTML: `<iframe`, `<script`, `eval(`, `base64_decode`
|
|
52
|
+
- [ ] Check for hidden SEO spam (invisible links, cloaked content)
|
|
53
|
+
- [ ] Review comments for spam injection
|
|
54
|
+
- [ ] Check for unauthorized new user accounts
|
|
55
|
+
- [ ] Verify no unexpected custom post types exist
|
|
56
|
+
|
|
57
|
+
## 4. DNS and Email Security (MEDIUM)
|
|
58
|
+
|
|
59
|
+
### Checks
|
|
60
|
+
- [ ] SPF record exists: `v=spf1 ... -all`
|
|
61
|
+
- [ ] DKIM record configured
|
|
62
|
+
- [ ] DMARC policy set: `v=DMARC1; p=quarantine` (minimum)
|
|
63
|
+
- [ ] No unexpected A/CNAME records pointing elsewhere
|
|
64
|
+
- [ ] MX records pointing to expected mail server
|
|
65
|
+
- [ ] SSL certificate valid and not expiring soon
|
|
66
|
+
|
|
67
|
+
## 5. Server Configuration (LOW-MEDIUM)
|
|
68
|
+
|
|
69
|
+
### Checks (SSH required)
|
|
70
|
+
- [ ] PHP version >= 8.1
|
|
71
|
+
- [ ] wp-config.php permissions: 440 or 400
|
|
72
|
+
- [ ] WP_DEBUG set to false in production
|
|
73
|
+
- [ ] Database table prefix is NOT `wp_`
|
|
74
|
+
- [ ] File editing disabled: `DISALLOW_FILE_EDIT = true`
|
|
75
|
+
- [ ] Directory listing disabled
|
|
76
|
+
- [ ] .htaccess contains security headers
|
|
77
|
+
- [ ] XML-RPC disabled if not needed
|
|
78
|
+
|
|
79
|
+
### Recommended wp-config.php Settings
|
|
80
|
+
```php
|
|
81
|
+
define('DISALLOW_FILE_EDIT', true);
|
|
82
|
+
define('WP_DEBUG', false);
|
|
83
|
+
define('WP_DEBUG_LOG', false);
|
|
84
|
+
define('WP_DEBUG_DISPLAY', false);
|
|
85
|
+
define('FORCE_SSL_ADMIN', true);
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Recommended .htaccess Security Headers
|
|
89
|
+
```apache
|
|
90
|
+
Header set X-Content-Type-Options "nosniff"
|
|
91
|
+
Header set X-Frame-Options "SAMEORIGIN"
|
|
92
|
+
Header set X-XSS-Protection "1; mode=block"
|
|
93
|
+
Header set Referrer-Policy "strict-origin-when-cross-origin"
|
|
94
|
+
Header set Content-Security-Policy "upgrade-insecure-requests"
|
|
95
|
+
```
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# WordPress SEO Audit Checklist
|
|
2
|
+
|
|
3
|
+
## 1. Technical SEO (CRITICAL)
|
|
4
|
+
|
|
5
|
+
### Crawlability
|
|
6
|
+
- [ ] robots.txt exists and is valid (`/robots.txt`)
|
|
7
|
+
- [ ] robots.txt allows search engine crawling of key content
|
|
8
|
+
- [ ] XML sitemap exists and is submitted to Google Search Console
|
|
9
|
+
- [ ] Sitemap includes all important pages and posts
|
|
10
|
+
- [ ] No unintentional `noindex` directives on key pages
|
|
11
|
+
- [ ] No orphaned pages (pages with no internal links)
|
|
12
|
+
|
|
13
|
+
### Indexability
|
|
14
|
+
- [ ] Site is not set to "Discourage search engines" (Settings > Reading)
|
|
15
|
+
- [ ] Important pages return HTTP 200
|
|
16
|
+
- [ ] No duplicate content issues (www vs non-www, HTTP vs HTTPS)
|
|
17
|
+
- [ ] Canonical URLs properly set on all pages
|
|
18
|
+
- [ ] Pagination handled with rel=next/prev or load-more
|
|
19
|
+
|
|
20
|
+
### URL Structure
|
|
21
|
+
- [ ] Permalinks set to post name (`/%postname%/`)
|
|
22
|
+
- [ ] URLs are clean (no query parameters for content pages)
|
|
23
|
+
- [ ] Slugs are descriptive and include keywords
|
|
24
|
+
- [ ] No excessively long URLs (target < 75 characters)
|
|
25
|
+
- [ ] 301 redirects in place for changed URLs
|
|
26
|
+
|
|
27
|
+
## 2. On-Page SEO Sampling (HIGH)
|
|
28
|
+
|
|
29
|
+
### Meta Data (sample 10 most important pages)
|
|
30
|
+
- [ ] Title tag present and unique (50-60 chars)
|
|
31
|
+
- [ ] Title includes primary keyword
|
|
32
|
+
- [ ] Meta description present and unique (120-160 chars)
|
|
33
|
+
- [ ] Meta description includes keyword and CTA
|
|
34
|
+
- [ ] Open Graph tags present (og:title, og:description, og:image)
|
|
35
|
+
- [ ] Twitter Card tags present
|
|
36
|
+
|
|
37
|
+
### Content Structure
|
|
38
|
+
- [ ] Single H1 per page
|
|
39
|
+
- [ ] H2/H3 hierarchy logical (no skipped levels)
|
|
40
|
+
- [ ] Primary keyword in H1
|
|
41
|
+
- [ ] Secondary keywords in H2/H3
|
|
42
|
+
- [ ] Alt text on all images
|
|
43
|
+
- [ ] Internal links present (2-3 per page minimum)
|
|
44
|
+
- [ ] External links to authoritative sources
|
|
45
|
+
|
|
46
|
+
### Content Quality
|
|
47
|
+
- [ ] No thin content pages (< 300 words for blog posts)
|
|
48
|
+
- [ ] No duplicate content across pages
|
|
49
|
+
- [ ] Content freshness (key pages updated within last 6 months)
|
|
50
|
+
- [ ] E-E-A-T signals present (author bios, credentials, sources)
|
|
51
|
+
|
|
52
|
+
## 3. Structured Data (MEDIUM)
|
|
53
|
+
|
|
54
|
+
### Checks
|
|
55
|
+
- [ ] Organization schema on homepage
|
|
56
|
+
- [ ] BreadcrumbList schema on inner pages
|
|
57
|
+
- [ ] Article schema on blog posts
|
|
58
|
+
- [ ] Product schema on product pages (if e-commerce)
|
|
59
|
+
- [ ] FAQ schema where applicable
|
|
60
|
+
- [ ] LocalBusiness schema (if local business)
|
|
61
|
+
- [ ] Validate with Google Rich Results Test
|
|
62
|
+
|
|
63
|
+
### Common WordPress Schema Implementations
|
|
64
|
+
- Yoast SEO: automatic schema generation
|
|
65
|
+
- Rank Math: schema module
|
|
66
|
+
- Schema Pro: dedicated schema plugin
|
|
67
|
+
- Manual: JSON-LD in theme header
|
|
68
|
+
|
|
69
|
+
## 4. Site Performance (for SEO — see also Performance Checklist)
|
|
70
|
+
|
|
71
|
+
### Core Web Vitals Impact on SEO
|
|
72
|
+
- [ ] LCP < 2.5s (ranking factor since 2021)
|
|
73
|
+
- [ ] INP < 200ms
|
|
74
|
+
- [ ] CLS < 0.1
|
|
75
|
+
- [ ] Mobile-friendly (responsive design)
|
|
76
|
+
- [ ] HTTPS enabled (ranking signal)
|
|
77
|
+
|
|
78
|
+
### Mobile SEO
|
|
79
|
+
- [ ] Mobile responsive design (no separate mobile site)
|
|
80
|
+
- [ ] Touch targets >= 48px
|
|
81
|
+
- [ ] Font size >= 16px on mobile
|
|
82
|
+
- [ ] No horizontal scrolling
|
|
83
|
+
- [ ] Mobile page speed acceptable
|
|
84
|
+
|
|
85
|
+
## 5. Local SEO (if applicable)
|
|
86
|
+
|
|
87
|
+
### Checks
|
|
88
|
+
- [ ] Google Business Profile claimed and optimized
|
|
89
|
+
- [ ] NAP consistency (Name, Address, Phone) across site
|
|
90
|
+
- [ ] LocalBusiness schema with accurate data
|
|
91
|
+
- [ ] Location pages for each service area
|
|
92
|
+
- [ ] Google Maps embed on contact page
|
|
93
|
+
- [ ] Local keywords in title tags and content
|
|
94
|
+
|
|
95
|
+
## 6. Content Architecture (MEDIUM)
|
|
96
|
+
|
|
97
|
+
### Taxonomy Assessment
|
|
98
|
+
- [ ] Categories are logical and not too deep (max 2 levels)
|
|
99
|
+
- [ ] No empty categories
|
|
100
|
+
- [ ] No single-post categories (merge or expand)
|
|
101
|
+
- [ ] Tags are used consistently
|
|
102
|
+
- [ ] Taxonomy pages have custom descriptions (not blank)
|
|
103
|
+
- [ ] Category/tag archive pages are indexable
|
|
104
|
+
|
|
105
|
+
### Internal Linking
|
|
106
|
+
- [ ] Homepage links to key category/pillar pages
|
|
107
|
+
- [ ] Pillar pages link to related cluster content
|
|
108
|
+
- [ ] New content links to existing related content
|
|
109
|
+
- [ ] No broken internal links (404s)
|
|
110
|
+
- [ ] Anchor text is descriptive (not "click here")
|
|
111
|
+
|
|
112
|
+
## 7. WordPress-Specific SEO Settings
|
|
113
|
+
|
|
114
|
+
### SEO Plugin Configuration (Yoast/Rank Math/All in One SEO)
|
|
115
|
+
- [ ] XML sitemap enabled and valid
|
|
116
|
+
- [ ] Social profiles configured
|
|
117
|
+
- [ ] Breadcrumbs enabled
|
|
118
|
+
- [ ] Author archives: enabled or disabled intentionally
|
|
119
|
+
- [ ] Date archives: disabled (usually thin content)
|
|
120
|
+
- [ ] Tag archives: noindex if thin content
|
|
121
|
+
- [ ] Media attachment pages: redirected to parent post
|
|
122
|
+
|
|
123
|
+
### WordPress Settings
|
|
124
|
+
- [ ] Site title and tagline set properly
|
|
125
|
+
- [ ] Permalinks: post name structure
|
|
126
|
+
- [ ] Reading settings: posts page and homepage set correctly
|
|
127
|
+
- [ ] Discussion: comment moderation enabled
|
|
128
|
+
- [ ] Search engine visibility: "Do not discourage" checked
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wp-backup
|
|
3
|
+
description: This skill should be used when the user asks to "backup my site", "create
|
|
4
|
+
a backup", "restore my site", "disaster recovery", "snapshot", or mentions any form
|
|
5
|
+
of WordPress backup or restore operation. Provides backup strategies for different
|
|
6
|
+
hosting environments.
|
|
7
|
+
version: 1.0.0
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# WordPress Backup & Recovery Skill
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
Provides comprehensive backup and disaster recovery workflows for WordPress sites. Supports Hostinger-managed backups, SSH-based backups, and content-only exports via API.
|
|
15
|
+
|
|
16
|
+
## When to Use
|
|
17
|
+
|
|
18
|
+
- User wants to create a site backup
|
|
19
|
+
- User needs to restore from a backup
|
|
20
|
+
- Before major operations (deploy, migrate, update, plugin changes)
|
|
21
|
+
- User asks about disaster recovery planning
|
|
22
|
+
- Scheduled backup strategy setup
|
|
23
|
+
|
|
24
|
+
## Backup Method Decision Tree
|
|
25
|
+
|
|
26
|
+
1. **What hosting type?**
|
|
27
|
+
- Hostinger VPS → VPS snapshot + file/DB backup
|
|
28
|
+
- Hostinger shared → File/DB backup via SSH
|
|
29
|
+
- Other hosting with SSH → SSH-based backup
|
|
30
|
+
- No SSH access → Content-only export via API
|
|
31
|
+
|
|
32
|
+
2. **What scope?**
|
|
33
|
+
- Full site (files + database) → Recommended for disaster recovery
|
|
34
|
+
- Database only → For content/settings backup
|
|
35
|
+
- Content only (via API) → For content portability
|
|
36
|
+
- wp-content only → For themes/plugins/uploads
|
|
37
|
+
|
|
38
|
+
## Backup Workflow
|
|
39
|
+
|
|
40
|
+
### Full Site Backup (SSH)
|
|
41
|
+
1. Connect via SSH to the server
|
|
42
|
+
2. Export database: `mysqldump`
|
|
43
|
+
3. Archive wp-content: `tar -czf`
|
|
44
|
+
4. Optionally archive full WordPress root
|
|
45
|
+
5. Download backup files
|
|
46
|
+
6. Verify backup integrity (check file sizes, test extraction)
|
|
47
|
+
7. Store in a safe location
|
|
48
|
+
|
|
49
|
+
### Content-Only Backup (API)
|
|
50
|
+
1. Use `list_content` to enumerate all content types
|
|
51
|
+
2. Export posts, pages, custom content as JSON
|
|
52
|
+
3. Export taxonomies (categories, tags)
|
|
53
|
+
4. Export media metadata (and optionally download files)
|
|
54
|
+
5. Store as structured JSON backup
|
|
55
|
+
|
|
56
|
+
### Pre-Operation Backup
|
|
57
|
+
Before any risky operation (deploy, update, migration):
|
|
58
|
+
1. Quick database backup via SSH
|
|
59
|
+
2. Note current plugin versions via `list_plugins`
|
|
60
|
+
3. Document current site state
|
|
61
|
+
4. Proceed with operation only after backup confirmed
|
|
62
|
+
|
|
63
|
+
## Restore Workflow
|
|
64
|
+
|
|
65
|
+
1. **Confirm with user**: Restore overwrites current state
|
|
66
|
+
2. **Verify backup**: Check backup files are complete and valid
|
|
67
|
+
3. **Choose method**:
|
|
68
|
+
- Hostinger: `hosting_importWordpressWebsite` with archive + SQL
|
|
69
|
+
- SSH: Upload files + import database
|
|
70
|
+
- API: Re-create content via `create_content`
|
|
71
|
+
4. **Execute restore**
|
|
72
|
+
5. **Verify**: Check site loads, content intact, plugins working
|
|
73
|
+
6. **Clear caches**: Flush all caching layers
|
|
74
|
+
|
|
75
|
+
## Safety Rules
|
|
76
|
+
|
|
77
|
+
- ALWAYS confirm with user before restoring (destructive operation)
|
|
78
|
+
- NEVER delete old backups until new backup is verified
|
|
79
|
+
- Keep minimum 3 rolling backups when possible
|
|
80
|
+
- Test restore procedure periodically (don't just create backups)
|
|
81
|
+
- Store backups off-site (not only on the same server)
|
|
82
|
+
|
|
83
|
+
## Additional Resources
|
|
84
|
+
|
|
85
|
+
### Reference Files
|
|
86
|
+
- **`references/backup-strategies.md`** - Detailed backup methods and automation
|
|
87
|
+
- **`references/restore-procedures.md`** - Step-by-step restore procedures
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# WordPress Backup Strategies
|
|
2
|
+
|
|
3
|
+
## Full Site Backup via SSH
|
|
4
|
+
|
|
5
|
+
### Database Export
|
|
6
|
+
```bash
|
|
7
|
+
# Standard mysqldump
|
|
8
|
+
ssh user@host 'mysqldump -u [db_user] -p[db_pass] [db_name] > /tmp/db-backup-$(date +%Y%m%d).sql'
|
|
9
|
+
|
|
10
|
+
# Compressed
|
|
11
|
+
ssh user@host 'mysqldump -u [db_user] -p[db_pass] [db_name] | gzip > /tmp/db-backup-$(date +%Y%m%d).sql.gz'
|
|
12
|
+
|
|
13
|
+
# Using wp-cli (if available)
|
|
14
|
+
ssh user@host 'cd /path/to/wordpress && wp db export /tmp/db-backup-$(date +%Y%m%d).sql'
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### File Backup
|
|
18
|
+
```bash
|
|
19
|
+
# Full WordPress backup
|
|
20
|
+
ssh user@host 'tar -czf /tmp/wp-full-$(date +%Y%m%d).tar.gz -C /path/to/wordpress .'
|
|
21
|
+
|
|
22
|
+
# wp-content only (faster, smaller)
|
|
23
|
+
ssh user@host 'tar -czf /tmp/wp-content-$(date +%Y%m%d).tar.gz -C /path/to/wordpress/wp-content .'
|
|
24
|
+
|
|
25
|
+
# Uploads only (media files)
|
|
26
|
+
ssh user@host 'tar -czf /tmp/uploads-$(date +%Y%m%d).tar.gz -C /path/to/wordpress/wp-content/uploads .'
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Download to Local
|
|
30
|
+
```bash
|
|
31
|
+
# Download backup files
|
|
32
|
+
scp user@host:/tmp/db-backup-*.sql.gz ./backups/
|
|
33
|
+
scp user@host:/tmp/wp-content-*.tar.gz ./backups/
|
|
34
|
+
|
|
35
|
+
# Clean up server-side temp files
|
|
36
|
+
ssh user@host 'rm /tmp/db-backup-*.sql.gz /tmp/wp-content-*.tar.gz'
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Hostinger-Specific Paths
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# Database credentials from wp-config.php
|
|
43
|
+
ssh user@host "grep -E 'DB_(NAME|USER|PASSWORD|HOST)' /home/[user]/htdocs/[domain]/wp-config.php"
|
|
44
|
+
|
|
45
|
+
# Typical Hostinger paths
|
|
46
|
+
WP_ROOT="/home/[username]/htdocs/[domain]"
|
|
47
|
+
WP_CONTENT="$WP_ROOT/wp-content"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Backup Retention Strategy
|
|
51
|
+
|
|
52
|
+
### Recommended Schedule
|
|
53
|
+
| Type | Frequency | Retention | Method |
|
|
54
|
+
|------|-----------|-----------|--------|
|
|
55
|
+
| Database | Daily | 7 days | Automated cron + mysqldump |
|
|
56
|
+
| Files | Weekly | 4 weeks | tar + cron |
|
|
57
|
+
| Full site | Monthly | 3 months | Full archive |
|
|
58
|
+
| Pre-deploy | Before each deploy | Until next deploy verified | Manual |
|
|
59
|
+
|
|
60
|
+
### Storage Locations
|
|
61
|
+
1. **On-server**: Quick restore, but lost if server fails
|
|
62
|
+
2. **Off-server**: Download via SCP to local or cloud storage
|
|
63
|
+
3. **Cloud storage**: S3, Google Cloud Storage, Backblaze B2
|
|
64
|
+
4. **Multiple locations**: Best practice — keep at least 2 copies in different locations
|
|
65
|
+
|
|
66
|
+
## Backup Verification
|
|
67
|
+
|
|
68
|
+
After creating a backup, always verify:
|
|
69
|
+
|
|
70
|
+
1. **File size check**: Backup should be non-zero and reasonable size
|
|
71
|
+
```bash
|
|
72
|
+
ls -lh /tmp/db-backup-*.sql.gz # DB should be at least a few MB
|
|
73
|
+
ls -lh /tmp/wp-content-*.tar.gz # Content varies, usually 100MB+
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
2. **Integrity check**: Test extraction
|
|
77
|
+
```bash
|
|
78
|
+
# Test tar archive
|
|
79
|
+
tar -tzf backup.tar.gz > /dev/null && echo "Archive OK"
|
|
80
|
+
|
|
81
|
+
# Test SQL file (check first/last lines)
|
|
82
|
+
zcat backup.sql.gz | head -5
|
|
83
|
+
zcat backup.sql.gz | tail -5
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
3. **Restore test** (periodic): Restore to a staging environment to verify full recoverability.
|
|
87
|
+
|
|
88
|
+
## Automated Backup Script
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
#!/bin/bash
|
|
92
|
+
# wp-backup.sh — automated WordPress backup
|
|
93
|
+
# Usage: ./wp-backup.sh user@host /path/to/wordpress
|
|
94
|
+
|
|
95
|
+
SSH_TARGET=$1
|
|
96
|
+
WP_PATH=$2
|
|
97
|
+
DATE=$(date +%Y%m%d_%H%M)
|
|
98
|
+
BACKUP_DIR="./backups/$DATE"
|
|
99
|
+
|
|
100
|
+
mkdir -p "$BACKUP_DIR"
|
|
101
|
+
|
|
102
|
+
# Get DB credentials
|
|
103
|
+
DB_NAME=$(ssh $SSH_TARGET "grep DB_NAME $WP_PATH/wp-config.php | cut -d \"'\" -f4")
|
|
104
|
+
DB_USER=$(ssh $SSH_TARGET "grep DB_USER $WP_PATH/wp-config.php | cut -d \"'\" -f4")
|
|
105
|
+
DB_PASS=$(ssh $SSH_TARGET "grep DB_PASSWORD $WP_PATH/wp-config.php | cut -d \"'\" -f4")
|
|
106
|
+
|
|
107
|
+
# Database backup
|
|
108
|
+
ssh $SSH_TARGET "mysqldump -u $DB_USER -p'$DB_PASS' $DB_NAME | gzip" > "$BACKUP_DIR/database.sql.gz"
|
|
109
|
+
|
|
110
|
+
# Files backup
|
|
111
|
+
ssh $SSH_TARGET "tar -czf - -C $WP_PATH/wp-content ." > "$BACKUP_DIR/wp-content.tar.gz"
|
|
112
|
+
|
|
113
|
+
# Verify
|
|
114
|
+
echo "Backup created in $BACKUP_DIR"
|
|
115
|
+
ls -lh "$BACKUP_DIR/"
|
|
116
|
+
```
|