Skip to main content

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

ResponsibilityTypical ownerNotes
Title + meta descriptionSEO pluginTheme should not override these
Canonical URLsSEO pluginAvoid multiple canonical tags
Open Graph / Twitter cardsSEO pluginOnly one set of social meta tags
Schema JSON-LDSEO plugin (usually)Custom schema should be additive and scoped
BreadcrumbsPlugin or themePick exactly one source
caution

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.

PluginStrong atWatch-outs
Yoast SEOSolid defaults, broad docsCan be heavy if many modules enabled
Rank MathFeatures + schema UIEasy to over-enable features and create complexity
SEOPressClean UI, good valueRequires careful configuration for schema details
The SEO FrameworkLightweight, sane defaultsFewer 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.

Install and activate an SEO plugin (example: SEOPress)
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.

If you decide breadcrumbs should come from the SEO plugin, the Hook Element can render them only when the plugin function exists.

PluginBreadcrumb functionNotes
Yoast SEOyoast_breadcrumb()Requires enabling breadcrumbs in Yoast settings
Rank Mathrank_math_the_breadcrumbs()Breadcrumb module must be enabled
SEOPressseopress_display_breadcrumbs()Depends on version/module
Hook Element: output plugin breadcrumbs when available
<?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>';
}
tip

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.

FeatureBest ownerWhy
Layout + markup structureGeneratePressTheme controls templates and HTML semantics
Titles/meta/canonicalsSEO pluginCentralized per-page controls and previews
Schema baselineSEO pluginAvoid reinventing a full schema graph
Custom schema for one-off pagesSmall custom codeOnly when plugin cannot model it cleanly
RedirectsSEO plugin or serverDepends on workflow and scale
Performance optimizationsTheme + caching stackTheme 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.txt and canonical tags are not conflicting

Troubleshooting

SymptomLikely causeFix
Breadcrumbs duplicateTheme element + pluginDisable one source
Schema duplicatesPlugin schema + custom JSON-LDRemove custom, or scope it to pages where needed
Titles not changingPlugin not controlling title outputEnable plugin title rewriting / check theme settings
Social previews wrongMultiple OG meta sourcesDisable OG module in one plugin
Pages unexpectedly noindexMisconfigured plugin rules or staging settingCheck plugin index settings and site visibility
Breadcrumbs missing on some templatesHook placement or conditional rulesMove hook to a shared location; adjust display rules

Hands-On: Verify Source Output on One Page

  1. Pick a page.
  2. View page source.
  3. Search for these markers:
  • rel="canonical"
  • application/ld+json
  • property="og:
Confirm canonical and JSON-LD in HTML
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:

  1. Export settings from the current plugin (if supported).
  2. Install the new plugin, but do not deactivate the old one yet.
  3. Migrate metadata (titles/descriptions) using the plugin's importer.
  4. Decide breadcrumbs + schema ownership again.
  5. Deactivate the old plugin and re-check page source for duplicates.
Safety check: confirm only one SEO plugin active
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