Skip to main content
GEO AI can run alongside other SEO plugins without conflicts using Compatibility Mode. This prevents duplicate meta tags, schema markup, and sitemaps.

How It Works

The compatibility system automatically detects other SEO plugins and adjusts GEO AI’s behavior to prevent overlapping outputs. File: includes/class-geoai-compat.php

Supported Plugins

Yoast SEO

Detects WPSEO_VERSION constant or WPSEO_Options class

Rank Math

Detects RANK_MATH_VERSION constant or RankMath class

SEOPress

Detects SEOPRESS_VERSION constant or SEOPress class

All in One SEO

Detects AIOSEO_VERSION constant or All_in_One_SEO_Pack class

Detection Logic

The GeoAI_Compat class runs on initialization and checks for active SEO plugins:
public function detect_conflicts() {
    $conflicts = array();

    if ( defined( 'WPSEO_VERSION' ) || class_exists( 'WPSEO_Options' ) ) {
        $conflicts[] = 'Yoast SEO';
    }

    if ( defined( 'RANK_MATH_VERSION' ) || class_exists( 'RankMath' ) ) {
        $conflicts[] = 'Rank Math';
    }

    if ( defined( 'SEOPRESS_VERSION' ) || class_exists( 'SEOPress' ) ) {
        $conflicts[] = 'SEOPress';
    }

    if ( class_exists( 'All_in_One_SEO_Pack' ) || defined( 'AIOSEO_VERSION' ) ) {
        $conflicts[] = 'All in One SEO';
    }

    return apply_filters( 'geoai_detected_conflicts', $conflicts );
}
Use the geoai_detected_conflicts filter to add detection for custom SEO plugins.

Compatibility Modes

GEO AI supports two modes:
GEO AI outputs all meta tags, schema, and sitemaps as if it’s the only SEO plugin.Use when:
  • GEO AI is your primary SEO plugin
  • No other SEO plugins are active
  • You want full control over SEO outputs
update_option( 'geoai_compat_mode', 'standalone' );

Configure Mode

Via Settings:
  1. Go to Settings → GEO AI → General
  2. Find “Compatibility Mode” dropdown
  3. Select Standalone or Coexist
  4. Save changes
Via Code:
// Set to coexist mode
update_option( 'geoai_compat_mode', 'coexist' );

// Set to standalone mode
update_option( 'geoai_compat_mode', 'standalone' );

Suppression Mechanism

When coexist mode is active and conflicts are detected, GEO AI removes its output hooks:
public function init_compat_mode() {
    $compat_mode = get_option( 'geoai_compat_mode', 'standalone' );

    if ( 'coexist' === $compat_mode && ! empty( $this->detected_plugins ) ) {
        // Lower priority to let other plugins output first
        add_action( 'wp_head', array( $this, 'maybe_suppress_outputs' ), 999 );
    }
}

public function maybe_suppress_outputs() {
    if ( $this->has_existing_meta_tags() ) {
        // Remove GEO AI's meta output hooks
        remove_action( 'wp_head', 
            array( \GeoAI\Core\GeoAI_Meta::get_instance(), 'output_meta_tags' ), 1 );
        remove_action( 'wp_head', 
            array( \GeoAI\Core\GeoAI_Social::get_instance(), 'output_og_tags' ), 1 );
    }
}
Suppression happens at priority 999 on wp_head to ensure other plugins output first.

What Gets Suppressed

In coexist mode, GEO AI suppresses:
  • <title> tag (if theme doesn’t support title-tag)
  • Meta description
  • Meta keywords
  • Canonical URL
  • Robots meta (noindex, nofollow, etc.)
  • Viewport and charset (if enabled)
  • Open Graph tags (og:title, og:description, og:image, etc.)
  • Twitter Card tags (twitter:card, twitter:title, etc.)
  • Facebook app ID
Not currently suppressed - you should disable schema in one plugin to avoid duplicates.
Go to Settings → GEO AI → Schema and disable schema types if using another plugin’s schema.
Not currently suppressed - disable sitemaps in one plugin.Most plugins use different sitemap URLs:
  • GEO AI: /sitemap.xml
  • Yoast: /sitemap_index.xml
  • Rank Math: /sitemap_index.xml
  • SEOPress: /sitemaps/posts-post-1.xml

What Still Works

Even in coexist mode, these GEO AI features remain active:

AI Analysis

Google Gemini-powered audits continue to work

Editor Sidebar

Gutenberg panel shows scores and recommendations

Analyzers

All 5 analyzers (keyword, readability, etc.) function normally

WP-CLI

Command-line audits and reports

Dashboard

SEO health dashboard and statistics

Internal Linking

Suggestions for internal links

Migration Workflow

Migrating from another SEO plugin to GEO AI:
1

Install GEO AI

Install and activate GEO AI while keeping your existing SEO plugin active.
2

Enable Coexist Mode

Go to Settings → GEO AI → General and set compatibility mode to Coexist.This prevents duplicate meta tags during migration.
3

Import Settings (Optional)

Go to Settings → GEO AI → Tools → Import.
Import feature is planned for v1.1. Currently, you’ll need to manually recreate settings.
4

Run Audits

Use GEO AI’s AI audits on your content to identify optimization opportunities.
5

Switch to Standalone

Once you’re ready to switch completely:
  1. Change compatibility mode to Standalone
  2. Deactivate the old SEO plugin
  3. Clear cache (if using caching plugin)
  4. Test meta tags with view-source or SEO browser extension

Programmatic Access

Check compatibility status in your code:
$compat = \GeoAI\Core\GeoAI_Compat::get_instance();

// Get list of detected plugins
$conflicts = $compat->detect_conflicts();
// Returns: array( 'Yoast SEO', 'Rank Math' )

// Check if standalone mode
if ( $compat->is_standalone_mode() ) {
    // GEO AI is the primary SEO plugin
}

// Check if meta should be output
if ( $compat->should_output_meta() ) {
    // Safe to output meta tags
}

Custom Plugin Detection

Add support for custom or niche SEO plugins:
add_filter( 'geoai_detected_conflicts', function( $conflicts ) {
    // Detect Custom SEO Plugin
    if ( defined( 'CUSTOM_SEO_VERSION' ) ) {
        $conflicts[] = 'Custom SEO Plugin';
    }
    
    // Detect another plugin by class
    if ( class_exists( 'My_SEO_Class' ) ) {
        $conflicts[] = 'My SEO Plugin';
    }
    
    return $conflicts;
});

Troubleshooting

Symptoms: Multiple description tags, multiple og:title tags, etc.Solution:
  1. Verify coexist mode is enabled: get_option( 'geoai_compat_mode' )
  2. Check if plugin was detected: GeoAI_Compat::get_instance()->detect_conflicts()
  3. Clear all caches (page cache, object cache, CDN)
  4. View page source (not inspector) to confirm duplicates
If still duplicated, manually disable meta output:
remove_action( 'wp_head', 
    array( GeoAI\Core\GeoAI_Meta::get_instance(), 'output_meta_tags' ), 1 );
Symptoms: Other plugin is active but not in conflicts arraySolution:
  1. Check if plugin loads before GEO AI (use plugins_loaded priority)
  2. Verify the constant/class the plugin defines
  3. Add custom detection with geoai_detected_conflicts filter
  4. Report unknown plugin to GEO AI support
Symptoms: Yoast active but want GEO AI to handle meta tagsSolution:
  1. Keep GEO AI in standalone mode
  2. Disable meta output in the other plugin (Yoast, etc.)
  3. Use other plugin’s features (redirects, breadcrumbs, etc.) without meta conflict

Known Limitations

  • Schema suppression: Currently manual - disable in one plugin’s settings
  • Sitemap suppression: Not automatic - configure sitemap URLs differently
  • Breadcrumbs: Not suppressed - only use one plugin’s breadcrumb output
  • Redirects: Both plugins’ redirects will work (may cause unexpected behavior)

Best Practices

Recommendations

  1. Use coexist mode temporarily during migration, then switch to standalone
  2. Don’t run multiple SEO plugins long-term - choose one as primary
  3. Test meta tags after switching modes (view-source, not DevTools)
  4. Clear all caches when changing compatibility settings
  5. Monitor Search Console for duplicate title/description issues
  6. Disable unused features in both plugins to reduce overhead

API Reference

Class: GeoAI\Core\GeoAI_Compat

Methods:
MethodReturnsDescription
get_instance()GeoAI_CompatSingleton instance
detect_conflicts()arrayList of detected plugin names
init_compat_mode()voidInitialize compatibility hooks
maybe_suppress_outputs()voidRemove meta output hooks if needed
is_standalone_mode()boolCheck if standalone mode active
should_output_meta()boolCheck if safe to output meta
Hooks:
// Filter detected conflicts
apply_filters( 'geoai_detected_conflicts', array $conflicts )

Installation

Install GEO AI alongside existing plugins

Settings

Configure compatibility mode

Hooks & Filters

Customize compatibility behavior

Migration Guide

Step-by-step migration from other plugins

Build docs developers (and LLMs) love