---
title: SEO Plugin Compatibility — Citelayer® with Rank Math, Yoast, AIOSEO — citelayer®
url: https://citelayer.ai/docs/seo-compatibility/
date: 2026-02-25
---

# SEO Plugin Compatibility — Citelayer® with Rank Math, Yoast, AIOSEO

Most WordPress sites already run an SEO plugin. You need to know that Citelayer® works alongside it — not against it. This page explains exactly how the compatibility system detects, groups, and cooperates with your existing SEO setup.

Why This Matters
----------------

SEO plugins generate structured data, manage sitemaps, and increasingly handle protocols like llms.txt. Citelayer® touches some of the same output. Without a compatibility system, you would get duplicate schema blocks, conflicting llms.txt files, and unpredictable results. Citelayer® solves this with automatic detection, family grouping, and two clearly defined operating modes.

Supported SEO Plugins
---------------------

Citelayer® recognizes six SEO plugin families:

- **Rank Math** (free + Pro) — Family: `rankmath`
- **Yoast SEO** (free + Premium) — Family: `yoast`
- **All in One SEO (AIOSEO)** — Family: `aioseo`
- **SEOPress** (free + Pro) — Family: `seopress`
- **The SEO Framework** — Family: `seoframework`
- **Slim SEO** — Family: `slimseo`

If your SEO plugin is not on this list, Citelayer® treats your site as having no SEO plugin installed. All features operate independently with no compatibility logic applied.

How Detection Works
-------------------

Citelayer® detects SEO plugins automatically on every admin page load. The detection result is **cached for 5 minutes** to avoid repeated lookups.

The detection uses three methods in combination:

- `is_plugin_active()` — Checks WordPress’s active plugin list
- **Defined constants** — Looks for plugin-specific constants like `RANK_MATH_VERSION`, `WPSEO_VERSION`, `AIOSEO_VERSION`, and others
- `class_exists()` — Verifies that expected plugin classes are loaded in memory

This triple-check approach catches edge cases where a plugin is active but loaded in a non-standard way.

The cache clears **instantly** whenever any plugin is activated or deactivated. You never see stale detection data after changing your plugin setup.

### Modifying Detection Results

If you need to override what Citelayer® detects — for example, to exclude a plugin from detection or add a custom one — use the filter:

```
add_filter( 'citelayer_detected_seo_plugins', function( $plugins ) {
    // Remove a plugin from detection
    unset( $plugins['yoast-seo'] );
    return $plugins;
} );
```

The filter receives an array of detected plugins and expects the modified array back.

Family Grouping
---------------

Citelayer® groups SEO plugins into families. The free and premium versions of the same plugin belong to the same family:

- Rank Math + Rank Math Pro = `rankmath` (one family)
- Yoast SEO + Yoast SEO Premium = `yoast` (one family)
- SEOPress + SEOPress Pro = `seopress` (one family)

This distinction drives the entire compatibility system:

- **Multiple plugins from one family** = normal. No conflict. Citelayer® works with the highest-priority plugin in that family.
- **Multiple plugins from different families** = Conflict State. Citelayer® pauses affected features until you resolve it.

Which Features Have Conflicts
-----------------------------

Not every Citelayer® feature interacts with SEO plugins. The compatibility system only applies to features that can overlap with SEO plugin output:

- **Features WITH compatibility logic:** [Schema](/docs/schema-json-ld/), [llms.txt](/docs/llms-txt/)
- **Features WITHOUT compatibility logic:** [WebMCP](/docs/webmcp/), [Markdown](/docs/markdown-for-agents/), [UCP Discovery](/docs/ucp-discovery/) — these always operate independently, regardless of which SEO plugins are active

Two Modes: Enhance and Replace
------------------------------

For Schema and llms.txt, you choose one of two modes in the [Dashboard](/docs/dashboard/) Compatibility tab. Each mode defines how Citelayer® interacts with your SEO plugin’s output.

### Enhance Mode (Default)

Citelayer® adds to what your SEO plugin already generates. Your SEO plugin’s output stays intact, and Citelayer® layers its own data on top.

**For Schema:** Citelayer® hooks into the SEO plugin’s schema output and adds its Organization data. The specific hooks depend on your plugin:

- Yoast SEO: hooks into `wpseo_schema_graph`
- Rank Math: uses Rank Math’s schema filter hooks
- Other plugins: uses their respective schema output filters

**For llms.txt:** Citelayer® enhances the SEO plugin’s llms.txt content if the plugin supports it.

### Replace Mode

Citelayer® generates its own output and disables the SEO plugin’s corresponding feature. This gives Citelayer® full control over that protocol.

What gets disabled depends on the SEO plugin:

- **Yoast SEO:** Disables `wpseo_json_ld_output` for Schema. Removes the physical llms.txt file for llms.txt.
- **Rank Math:** Empties the `rank_math/json_ld` filter output for Schema. Empties `rank_math/llms_txt/content` for llms.txt.
- **AIOSEO:** Uses `aioseo_schema_disable` to turn off AIOSEO’s schema output.
- **SEOPress:** Empties `seopress_schema_output` to suppress SEOPress schema generation.

Choose Replace mode when you want Citelayer® to be the sole source of truth for Schema or llms.txt output.

Yoast llms.txt: A Special Case
------------------------------

Yoast SEO creates a **physical `llms.txt` file** in your WordPress root directory. Most other plugins generate llms.txt dynamically via PHP.

Citelayer® handles this difference automatically: if the physical `llms.txt` file does not exist — whether it was deleted, never created, or Yoast’s llms.txt feature was never enabled — Citelayer® takes over llms.txt generation **even in Enhance mode**. No manual mode switch required.

If the file does exist and you are in Enhance mode, Citelayer® respects it and does not overwrite it. Switch to Replace mode to have Citelayer® remove the file and take full control.

Conflict State: Multiple Families
---------------------------------

A conflict state triggers when Citelayer® detects active SEO plugins from **two or more different families**. For example, Rank Math and Yoast SEO running simultaneously.

When this happens:

- A **non-dismissable red banner** appears on every admin page — not just the Citelayer® dashboard
- The Schema REST API returns **503 Service Unavailable**
- The llms.txt endpoint returns **503** with a `Retry-After: 3600` header
- WebMCP, Markdown, and UCP Discovery continue to work normally — they are not affected

**Resolution:** Deactivate one of the conflicting SEO plugins. The moment you do, Citelayer® detects the change, clears its cache, and resumes normal operation within seconds.

Citelayer® does not try to guess which SEO plugin you prefer. Running two competing SEO plugin families is a misconfiguration that causes problems far beyond Citelayer® — duplicate schema, conflicting meta tags, and unpredictable crawl behavior. The conflict banner forces you to fix it.

Priority System
---------------

When multiple plugins from the **same family** are active (e.g., Rank Math free + Rank Math Pro), Citelayer® uses the highest-priority plugin for its hooks and integration logic. The priority order from highest to lowest:

```
rank-math-pro > rank-math > yoast-seo-premium > yoast-seo > aioseo > seopress-pro > seopress > seo-framework > slim-seo
```

Premium or Pro versions always take priority over their free counterparts within the same family.

State Reset
-----------

When you deactivate the last SEO plugin on your site, Citelayer® cleans up automatically:

- All compatibility-related options are removed from the database
- Previously dismissed admin notices are reset for all admin users
- Citelayer® switches to standalone mode — generating Schema and llms.txt independently with no compatibility hooks

You do not need to manually reset anything. The cleanup is instant and complete.

Verifying Your Setup
--------------------

To confirm everything works correctly:

1. Go to **Settings → Citelayer** and open the **Compatibility** tab.
2. Check which SEO plugins are detected. Each plugin shows its family label.
3. Verify the mode (Enhance or Replace) for both Schema and llms.txt.
4. If you see a conflict warning, deactivate one of the conflicting plugins.
5. Use the [WebMCP Health Check](/docs/webmcp/) and test your [Schema](/docs/schema-json-ld/) and [llms.txt](/docs/llms-txt/) endpoints to confirm output is correct.

Related Documentation
---------------------

- [Requirements &amp; Installation](/docs/requirements/)
- [Schema Configuration](/docs/schema-json-ld/)
- [Dashboard Overview](/docs/dashboard/)
