SEO Tools Compatibility
GeneratePress is designed to work with the WordPress ecosystem, including SEO plugins. The compatibility work is mostly about avoiding duplicated responsibilities: titles/meta, canonicals, schema, and breadcrumbs.
Common SEO Plugin Responsibilities
| Responsibility | Typical owner | Notes |
|---|---|---|
| Title + meta description | SEO plugin | Theme should not override these |
| Canonical URLs | SEO plugin | Avoid multiple canonical tags |
| Open Graph / Twitter cards | SEO plugin | Only one set of social meta tags |
| Schema JSON-LD | SEO plugin (usually) | Custom schema should be additive and scoped |
| Breadcrumbs | Plugin or theme | Pick exactly one source |
If you add breadcrumbs or schema via GeneratePress Elements while an SEO plugin is enabled, check the page source to ensure you are not producing two BreadcrumbLists or two Organizations.
Popular Plugin Choices (Pragmatic View)
| Plugin | Strong at | Watch-outs |
|---|---|---|
| Yoast SEO | Solid defaults, broad docs | Can be heavy if many modules enabled |
| Rank Math | Features + schema UI | Easy to over-enable features and create complexity |
| SEOPress | Clean UI, good value | Requires careful configuration for schema details |
| The SEO Framework | Lightweight, sane defaults | Fewer built-in marketing features |
GeneratePress will generally work with all of these. The key is configuration and avoiding duplicate features.
A Safe Integration Workflow
flowchart TD
A[Install SEO plugin] --> B[Configure titles/meta + sitemap]
B --> C[Decide: who provides breadcrumbs?]
C --> D[Decide: who provides schema?]
D --> E[View page source and confirm no duplicates]
E --> F[Run a crawl + structured data validation]
Install/Manage SEO Plugins (WP-CLI)
On an Ubuntu server, WP-CLI makes plugin changes consistent and scriptable.
cd /var/www/example.com/public_html
wp plugin install wp-seopress --activate
wp plugin status | rg -n "seopress"
Conflict Checklist
When something looks "off" in SERP previews or structured data tests, check these first:
- Two breadcrumb outputs
- Two JSON-LD blocks for the same schema types
- Multiple Open Graph tag sets
- A caching/minification plugin rewriting or combining scripts incorrectly
GeneratePress Integration Points (Concrete Patterns)
Most integrations are a simple rule: let the SEO plugin generate data, then place it in the layout using a Hook Element.
Breadcrumb output (choose one provider)
If you decide breadcrumbs should come from the SEO plugin, the Hook Element can render them only when the plugin function exists.
| Plugin | Breadcrumb function | Notes |
|---|---|---|
| Yoast SEO | yoast_breadcrumb() | Requires enabling breadcrumbs in Yoast settings |
| Rank Math | rank_math_the_breadcrumbs() | Breadcrumb module must be enabled |
| SEOPress | seopress_display_breadcrumbs() | Depends on version/module |
<?php
if ( function_exists( 'yoast_breadcrumb' ) ) {
yoast_breadcrumb( '<nav class="breadcrumbs" aria-label="Breadcrumbs">', '</nav>' );
} elseif ( function_exists( 'rank_math_the_breadcrumbs' ) ) {
echo '<nav class="breadcrumbs" aria-label="Breadcrumbs">';
rank_math_the_breadcrumbs();
echo '</nav>';
} elseif ( function_exists( 'seopress_display_breadcrumbs' ) ) {
echo '<nav class="breadcrumbs" aria-label="Breadcrumbs">' . seopress_display_breadcrumbs() . '</nav>';
}
Place breadcrumbs in a consistent location (usually just below the header or above the content title). Consistency helps both users and your internal linking model.
Ownership Matrix: Theme vs SEO Plugin
Use this table when you're unsure where a feature should live.
| Feature | Best owner | Why |
|---|---|---|
| Layout + markup structure | GeneratePress | Theme controls templates and HTML semantics |
| Titles/meta/canonicals | SEO plugin | Centralized per-page controls and previews |
| Schema baseline | SEO plugin | Avoid reinventing a full schema graph |
| Custom schema for one-off pages | Small custom code | Only when plugin cannot model it cleanly |
| Redirects | SEO plugin or server | Depends on workflow and scale |
| Performance optimizations | Theme + caching stack | Theme reduces bloat; stack handles delivery |
Sitemaps, Robots, and Indexing
Most SEO plugins generate sitemaps and manage noindex rules. GeneratePress does not need to touch these.
Practical checks:
- XML sitemap is enabled and reachable
- Noindex is used intentionally (thin pages, staging environments)
robots.txtand canonical tags are not conflicting
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Breadcrumbs duplicate | Theme element + plugin | Disable one source |
| Schema duplicates | Plugin schema + custom JSON-LD | Remove custom, or scope it to pages where needed |
| Titles not changing | Plugin not controlling title output | Enable plugin title rewriting / check theme settings |
| Social previews wrong | Multiple OG meta sources | Disable OG module in one plugin |
| Pages unexpectedly noindex | Misconfigured plugin rules or staging setting | Check plugin index settings and site visibility |
| Breadcrumbs missing on some templates | Hook placement or conditional rules | Move hook to a shared location; adjust display rules |
Hands-On: Verify Source Output on One Page
- Pick a page.
- View page source.
- Search for these markers:
rel="canonical"application/ld+jsonproperty="og:
PAGE_URL="https://example.com/"
curl -sL "$PAGE_URL" | rg -n "rel=\"canonical\"|application/ld\+json|property=\"og:" | sed -n '1,160p'
Hands-On: Switching SEO Plugins (Risk-Managed)
If you ever migrate from one SEO plugin to another, do it like a deployment:
- Export settings from the current plugin (if supported).
- Install the new plugin, but do not deactivate the old one yet.
- Migrate metadata (titles/descriptions) using the plugin's importer.
- Decide breadcrumbs + schema ownership again.
- Deactivate the old plugin and re-check page source for duplicates.
cd /var/www/example.com/public_html
wp plugin list --status=active | rg -n "yoast|rank-math|seopress|autodescription" || true
Quick Reference
- Theme: markup + performance baseline
- SEO plugin: titles/meta/canonical/social/schema
- Choose one provider for breadcrumbs and schema
What's Next
- Next module: Advanced Page Design