WordPress SEO: Yoast, Rank Math, schema plugins, headless WP
A comprehensive reference for WordPress SEO implementation. WordPress powers approximately 40-45% of all websites in 2026 and represents the majority of small business sites Joseph manages.…
Theme Selection, Plugin Stack, Custom Post Types, Schema Implementation, Performance Optimization, Security Hardening, and Comprehensive WordPress-Specific SEO
A comprehensive reference for WordPress SEO implementation. WordPress powers approximately 40-45% of all websites in 2026 and represents the majority of small business sites Joseph manages. WordPress-specific patterns differ enough from other platforms to warrant dedicated treatment.
1. Document Purpose
WordPress is simultaneously the most flexible CMS and the most variable in execution. The same WordPress can be highly optimized or catastrophically slow depending on theme, plugins, hosting, and configuration. SEO patterns that work on other platforms require WordPress-specific implementation.
This framework specifies the comprehensive WordPress SEO stack from theme selection through schema implementation through ongoing maintenance.
For Joseph's situation managing 130+ WordPress sites on self-managed Linux infrastructure, standardization across the portfolio dramatically improves operational efficiency.
1.1 Required Tools
- WordPress — current version
- Quality theme — see Section 3
- Rank Math Pro or Yoast Premium — primary SEO plugin
- Object cache — Redis or Memcached
- Page cache — WP Rocket, W3 Total Cache, or Cloudflare
- Image optimization — Imagify, Smush, or ShortPixel
- Security plugin — Wordfence Premium or Sucuri
- Backup plugin — UpdraftPlus or BackWPup
- WordPress CLI — for administration
2. Hosting Foundation
WordPress performance starts with hosting. Cheap shared hosting cripples even well-built sites.
wordpress_hosting_options:
shared_hosting_low_tier:
examples: ["GoDaddy basic", "HostGator basic", "Bluehost basic"]
when_acceptable: "Hobby sites only"
avoid_for: "Business sites; performance generally inadequate"
managed_wordpress_hosting:
examples: ["WP Engine", "Kinsta", "Pressable", "Flywheel"]
cost: "$25-$300+/month"
benefits:
- WordPress-optimized stack
- Automatic updates and backups
- Built-in caching
- Security baseline
when_to_use: "Most business sites; less technical clients"
vps_self_managed:
examples: ["DigitalOcean", "Linode", "Vultr", "Hetzner"]
cost: "$10-$100+/month"
benefits:
- Full control
- Best performance per dollar
- Multiple sites possible
when_to_use: "Technically capable; managing many sites"
requires: "Linux administration capability"
joseph_setup:
description: "Self-managed Debian/Nginx hosting (Bubbles)"
sites_supported: "130+ production sites"
benefit: "Cost-effective at scale; full control"
consideration: "Requires ongoing maintenance discipline"
2.1 PHP Version
php_version_strategy:
current_recommendation: "PHP 8.2 or 8.3"
version_impact:
- PHP 8.x significantly faster than 7.x
- 8.x receives security updates
- WordPress core supports 7.4+ but optimal on 8.x
- Plugin compatibility important to verify
upgrade_strategy:
- Test on staging environment
- Verify plugin compatibility
- Monitor error logs after upgrade
- Roll back if critical issues
2.2 Database
database_optimization:
database_engine: "MySQL 8.x or MariaDB 10.6+"
ongoing_maintenance:
- Regular database optimization
- Remove revisions (excessive)
- Remove transients (expired)
- Remove orphaned post meta
- Optimize tables periodically
database_optimization_plugins:
- WP-Optimize (free + pro)
- WP-Sweep
- Advanced Database Cleaner
command_line_optimization:
wp_cli: "wp db optimize"
direct_sql: "OPTIMIZE TABLE wp_posts;"
3. Theme Selection
Theme choice profoundly affects performance and SEO.
3.1 Theme Categories
theme_categories:
page_builder_themes:
examples: ["Avada", "Divi", "X Theme", "Enfold"]
description: "Built around drag-drop page builders"
pros: "Easy customization without code"
cons: "Often heavy; performance issues; bloat"
seo_concern: "Often produces poor HTML structure"
performance_themes:
examples: ["GeneratePress", "Astra", "Kadence", "Blocksy"]
description: "Lightweight, performance-focused"
pros: "Fast; clean code; flexible"
cons: "Less out-of-box visual design"
seo_benefit: "Strong foundation"
block_themes:
examples: ["Twenty Twenty-Four", "Frost", "Ollie"]
description: "Built for full-site editing"
pros: "Modern WordPress direction; lightweight"
cons: "Newer pattern; less mature than alternatives"
custom_themes:
description: "Built from scratch for specific site"
pros: "Optimal performance; perfect fit"
cons: "Higher cost and time"
when: "High-stakes sites with budget"
joseph_recommendation:
standard: "GeneratePress Pro or Kadence Pro"
rationale: "Performance + flexibility + active development"
fallback: "Astra Pro for client preference"
3.2 Theme Evaluation Criteria
theme_evaluation:
performance:
- Default install score on PageSpeed Insights
- Total CSS/JS payload
- Number of HTTP requests
- Render-blocking resources
code_quality:
- Semantic HTML structure
- WCAG accessibility
- Schema markup integration
- Modern PHP practices
flexibility:
- Customization without page builder
- Hook coverage for developers
- Block editor support
- Custom post type support
support_and_maintenance:
- Active development
- Responsive support
- Security patch history
- Compatibility maintenance
business_model:
- Avoid abandoned themes
- Avoid overly aggressive monetization
- Premium plugin bundling can be value
3.3 Theme Customization Patterns
customization_approach:
child_themes:
requirement: "ALWAYS use child theme for customizations"
rationale: "Updates to parent theme don't lose customizations"
custom_css:
location: "Customizer Additional CSS (small) or child theme stylesheet (larger)"
avoid: "Inline styles or theme file edits"
custom_functionality:
location: "Custom plugin OR child theme functions.php"
rule: "Site-specific code in custom plugin (survives theme change)"
acf_pro:
benefit: "Custom fields and content patterns"
common_use: "Custom layouts; structured content"
4. Plugin Stack
Plugin selection profoundly affects WordPress sites.
4.1 Plugin Discipline
plugin_principles:
minimize_count:
rule: "Every plugin is performance and security cost"
target: "<25 active plugins typical; can do well with much fewer"
reputable_sources:
rule: "Only from wordpress.org or trusted developers"
avoid: "Nulled themes/plugins (security risk)"
active_development:
rule: "Plugins updated within last 6-12 months"
avoid: "Abandoned plugins (security and compatibility)"
performance_test:
practice: "Test plugin impact when adding"
tool: "Query Monitor reveals plugin impact"
security_history:
research: "Check plugin's vulnerability history"
sources: "Patchstack, WPScan vulnerability database"
4.2 Standard Plugin Stack
recommended_plugin_stack:
seo:
primary: "Rank Math Pro"
alternative: "Yoast SEO Premium"
purpose: "Schema, sitemaps, meta tags, technical SEO features"
caching:
primary: "WP Rocket"
alternative: "W3 Total Cache (free) or LiteSpeed Cache (LiteSpeed servers)"
purpose: "Page caching, browser caching, GZIP, defer JS"
image_optimization:
primary: "Imagify"
alternatives: ["ShortPixel", "Smush Pro", "EWWW"]
purpose: "Compression, WebP/AVIF conversion, lazy loading"
security:
primary: "Wordfence Premium"
alternative: "Sucuri Premium"
purpose: "Firewall, malware scanning, login protection"
backup:
primary: "UpdraftPlus Premium"
alternative: "BackWPup Pro"
purpose: "Scheduled backups to off-server location"
forms:
primary: "WPForms Pro"
alternatives: ["Gravity Forms", "Formidable Forms", "Fluent Forms"]
purpose: "Contact forms, lead capture"
analytics:
primary: "MonsterInsights Pro (GA4 integration)"
alternative: "ExactMetrics"
purpose: "GA4 implementation made easier"
note: "Not strictly necessary if directly implementing"
conditional_additions:
woocommerce: "If e-commerce"
cookie_consent: "Cookiebot, CookieYes (EEA traffic)"
membership: "MemberPress (if membership site)"
learning: "LearnDash (if courses)"
optional_value_plugins:
- "Code Snippets (for custom code without functions.php)"
- "Query Monitor (development/debugging)"
- "User Role Editor (granular roles)"
- "Duplicate Post (productivity)"
- "Redirection (managing 301s)"
4.3 Plugin Audit
Quarterly plugin audit:
plugin_audit_checklist:
- List all active plugins
- For each: Is it actively used?
- Is it actively maintained (update within 12 months)?
- Is there a known vulnerability history?
- Is there a lighter alternative?
- Could core functionality replace it?
- Remove any failing these checks
5. SEO Plugin Configuration
5.1 Rank Math Pro Configuration
For Joseph's standard stack, Rank Math Pro configuration:
rank_math_setup:
setup_wizard:
- Site type and personal/organization
- Connect to Google services (Search Console, Analytics)
- XML sitemap settings
- Image SEO preferences
modules_to_enable:
- SEO Analysis
- Rich Snippets / Schema
- XML Sitemap
- Role Manager
- 404 Monitor
- Redirections
- Image SEO
- Local SEO (if applicable)
- WooCommerce SEO (if WC)
- Video SEO module
- News SEO (if news site)
- Analytics integration
modules_to_disable:
- Modules not relevant to site type
- Reduces processing overhead
schema_settings:
- Default schema type per content type
- Organization or Person details complete
- Logo and social profiles configured
content_ai:
- Optional: AI-driven optimization recommendations
- Use as guide; don't follow blindly
5.2 Per-Page SEO Optimization
per_page_optimization_workflow:
meta_title:
pattern: "Primary keyword | Brand"
length: "50-60 characters"
location: "Rank Math metabox per post/page"
meta_description:
pattern: "Compelling 130-155 character description with CTA"
location: "Rank Math metabox"
focus_keyword:
purpose: "Rank Math optimization analysis"
primary: "Main target keyword"
additional: "Secondary keywords (Pro feature)"
schema_per_page:
- Article for blog posts
- LocalBusiness for location pages
- Product for products
- Service for service pages
- FAQPage where Q&A present
- HowTo where step-by-step content
canonical:
typical: "Self-canonical (default)"
override_when: "Duplicate URL needs to point elsewhere"
noindex_decisions:
- Tag archives (typically noindex)
- Author archives (often noindex unless multi-author site)
- Date archives (typically noindex)
- Search results (always noindex)
- Thin or low-value pages
5.3 Sitemap Configuration
sitemap_setup:
rank_math_sitemap:
enabled: true
excluded:
- Tag archives (if noindexed)
- Date archives (if noindexed)
- Specific post types (if applicable)
include:
- All published pages and posts
- Custom post types (when relevant)
- Categories
- Author archives (if indexed)
submission:
google_search_console: "Submit sitemap URL"
bing_webmaster_tools: "Submit sitemap URL"
monitoring:
- Check GSC sitemap status
- Verify URL count discovered
- Compare to URL count indexed
- Investigate gaps
6. Performance Optimization
6.1 Caching Strategy
caching_layers:
page_cache:
plugin: "WP Rocket (commercial) or W3TC (free)"
purpose: "Serve cached HTML; bypass PHP and DB"
impact: "Significant for repeat visitors"
object_cache:
backend: "Redis (preferred) or Memcached"
purpose: "Cache expensive database queries"
impact: "Reduces database load substantially"
setup_complexity: "Server-level configuration required"
browser_cache:
configuration: "Cache headers via plugin or .htaccess/nginx"
purpose: "Repeat visitors don't re-download static assets"
cdn:
services: ["Cloudflare", "BunnyCDN", "KeyCDN"]
purpose: "Distribute static assets globally"
benefit: "Faster for distant visitors"
database_cache:
purpose: "Cache database query results"
methods: "Object cache + transient API"
6.2 Image Optimization
image_optimization_workflow:
upload_optimization:
plugin: "Imagify or ShortPixel"
settings:
- Convert to WebP/AVIF
- Resize on upload (max dimensions)
- Compress aggressively
- Maintain originals as backup
responsive_images:
requirement: "WordPress generates srcset by default"
enhance: "Define appropriate image sizes in functions.php"
lazy_loading:
method: "WordPress 5.5+ has native loading='lazy'"
enhancement: "Plugin can extend to background images"
modern_formats:
pattern: "Serve WebP/AVIF to compatible browsers; fallback to JPEG/PNG"
plugin_support: "Imagify, ShortPixel, WP Rocket"
cdn_for_images:
benefit: "Faster delivery globally"
options: "Bunny CDN Image Optimizer; Cloudflare Polish"
6.3 JavaScript & CSS Optimization
js_css_optimization:
minification:
automatic: "WP Rocket, W3TC, Autoptimize"
benefit: "Smaller file sizes"
combination:
pattern: "Combine multiple files into fewer"
tradeoff: "Less relevant with HTTP/2"
use_carefully: "Can break things if not tested"
defer_js:
pattern: "Load JS asynchronously where possible"
tools: "WP Rocket Defer, Async JavaScript plugin"
test: "Some plugins break with deferral"
remove_unused:
challenge: "WordPress loads many resources globally"
tools: "Asset CleanUp, Perfmatters, FlyingPress"
technique: "Conditionally dequeue scripts/styles per page"
critical_css:
purpose: "Inline above-fold CSS for faster render"
automation: "WP Rocket, others"
6.4 Database Optimization
ongoing_database_maintenance:
weekly:
- Clean expired transients
- Remove spam comments
- Remove trashed posts older than threshold
monthly:
- Optimize all tables
- Remove old revisions (keep recent)
- Clean orphaned meta
- Review and clean orphaned data
automation:
plugin: "WP-Optimize (scheduled cleanup)"
7. WordPress-Specific SEO Tactics
7.1 Custom Post Types
custom_post_type_seo:
when_to_use:
- Distinct content types beyond posts/pages
- Examples: testimonials, case studies, services, projects
registration:
code_method: "register_post_type() in functions.php or plugin"
plugin_method: "Custom Post Type UI plugin"
seo_considerations:
- Set appropriate permalink structure
- Determine if archive page needed
- Set has_archive parameter accordingly
- Create archive template if used
- Consider taxonomy associations
schema_per_cpt:
- Apply appropriate schema type
- Service for services CPT
- Article for case studies CPT
- Person for team members CPT
7.2 Permalink Structure
permalink_strategy:
recommended_structure: "/%postname%/"
rationale:
- Clean URLs
- Includes keyword from title
- SEO-friendly
- Standard pattern
alternatives:
custom_structure: "/%category%/%postname%/ for some sites"
avoid: "Date-based (/year/month/postname/) for evergreen content"
avoid: "ID-based (?p=123) — never ideal"
changing_existing:
risk: "Breaking existing URLs"
mitigation: "301 redirects from old to new structure"
timing: "Major change; do once correctly"
7.3 Categories and Tags
taxonomy_strategy:
categories:
purpose: "Hierarchical primary topic grouping"
rule: "5-15 main categories typically"
each_post: "Assign to 1-2 categories"
tags:
purpose: "Non-hierarchical specific topics"
rule: "Use sparingly (5-10 tags per post max)"
avoid: "Tag explosion (hundreds of barely-used tags)"
archive_indexing_decisions:
category_archives: "Often indexed if substantive"
tag_archives: "Often noindexed (thin content risk)"
author_archives: "Indexed if multi-author; noindex if single-author"
date_archives: "Usually noindex"
custom_taxonomies:
use_case: "Beyond categories/tags — e.g., 'Industry' for case studies"
pattern: "Register via plugin or code"
seo_treatment: "Same considerations as categories/tags"
7.4 Internal Linking
wordpress_internal_linking:
manual_linking:
practice: "While writing/editing, link to relevant existing content"
tool: "WordPress link search in editor"
automated_suggestions:
plugins: "Link Whisper, Internal Link Juicer"
use_carefully: "Suggestions, not blind automation"
related_posts:
plugin_options: "Yet Another Related Posts Plugin (YARPP), WordPress.com Related Posts"
placement: "Below post content"
seo_value: "Internal linking + engagement"
hub_pages:
pattern: "Create topic hub pages linking to all posts in topic"
seo_benefit: "Concentrates authority; clear topical signals"
breadcrumbs:
implementation: "Rank Math, Yoast, or theme-built"
schema: "BreadcrumbList automatically"
7.5 Comments
comments_seo_consideration:
if_enabled:
- Moderate spam aggressively
- Akismet or similar for filtering
- Comments add UGC content
- Threaded comments
- Schema can include Comment
if_disabled:
- Less spam to manage
- Less UGC content
- Decision based on community vs management
spam_protection:
- Akismet (free for personal sites; small fee for business)
- reCAPTCHA on comment forms
- Honeypot techniques
8. WooCommerce-Specific (E-commerce on WordPress)
For WooCommerce sites, additional considerations from framework-ecommerceseo.md:
woocommerce_seo:
product_page_optimization:
- Rank Math WooCommerce module enabled
- Comprehensive product descriptions (not just default attributes)
- High-quality images optimized
- Reviews enabled with schema
- Related products displayed
category_pages:
- Substantive intro content (not just product grid)
- Buying guide content
- FAQ section
- Internal linking
performance_critical:
- Object cache (Redis) essential
- Page cache configured to bypass dynamic pages
- Database optimization regular
- Image optimization aggressive
faceted_navigation:
- WooCommerce Filter or product filters
- Apply selective indexing strategy
- Canonical to base category for combinations
google_merchant_center:
plugin: "Google Listings & Ads"
feed: "Auto-generated and submitted"
abandoned_cart_recovery:
benefit: "Recovers conversions"
plugins: "WooCommerce Cart Abandonment Recovery, CartFlows"
9. Maintenance & Updates
9.1 Update Strategy
wordpress_update_strategy:
core_updates:
minor: "Auto-update enabled (security patches)"
major: "Scheduled with testing"
plugin_updates:
security: "Auto-update enabled"
feature: "Manual review and update"
paid_plugins: "License renewals tracked"
theme_updates:
parent_theme: "Update; child theme protects customizations"
custom_theme: "Maintained per development cycle"
testing:
staging: "Major updates tested on staging first"
backup: "Backup before updating"
monitoring: "Watch for issues post-update"
9.2 Monitoring
ongoing_monitoring:
uptime: "UptimeRobot or similar — alert on downtime"
performance: "Real User Monitoring; periodic PageSpeed checks"
security: "Wordfence scans; vulnerability alerts"
seo: "GSC monitoring; rank tracker; Ahrefs/Semrush"
errors: "Error log monitoring"
database: "Periodic optimization"
10. Audit Mode
| # | Criterion | Pass/Fail |
|---|---|---|
| WP1 | Modern PHP version (8.x) | |
| WP2 | Quality theme with strong performance baseline | |
| WP3 | Reputable, actively-maintained plugins | |
| WP4 | SEO plugin (Rank Math/Yoast) properly configured | |
| WP5 | Object cache (Redis/Memcached) running | |
| WP6 | Page cache configured | |
| WP7 | Image optimization active | |
| WP8 | Security plugin active and configured | |
| WP9 | Backup running with off-server storage | |
| WP10 | Permalink structure SEO-friendly | |
| WP11 | Sitemap generated and submitted | |
| WP12 | Schema implementation comprehensive | |
| WP13 | Internal linking strategy active | |
| WP14 | Database maintained | |
| WP15 | Updates managed (auto for security; tested for major) | |
| WP16 | Hardening per framework-security.md |
Score: 16. World-class WordPress implementation: 14+/16.
11. Common Mistakes
- Cheap shared hosting — bottleneck regardless of optimization
- Page builder bloat — heavy themes destroy performance
- Plugin overload — every plugin is performance and security cost
- No object cache — database queries dominate page load
- Default theme without optimization — leaves performance on table
- No image optimization — bloated pages
- Outdated PHP — slower and security risk
- No backup — single point of failure
- Default WordPress security — easy compromise target
- Unmaintained sites — entropy degrades them
End of Framework Document
Companion documents:
framework-security.md— WordPress security detailsframework-pageexperience.md— Performance specificsframework-schema.md— Schema implementationframework-ecommerceseo.md— WooCommerce considerationsframework-hosting.md— Hosting considerations
Want this framework implemented on your site?
ThatDevPro ships these frameworks as productized services. SDVOSB-certified veteran owned. Cassville, Missouri.
See Engine Optimization service ›