The best WordPress SEO plugin for developers: hooks, APIs and footprint

For developers, Hydrogen SEO (ours) is our pick, as a judgment: it documents 54 filters and 24 actions with signatures checked against the source, backs every admin screen with a REST API, has WP-CLI commands for imports, turns off all front-end output for headless sites with one filter, and keeps settings and per-post SEO data in standard options and post meta. It does create tables now: one for link counts and an optional one for the 404 Monitor log. The SEO Framework is second for the opposite reason: the smallest footprint in the field, with 8 hooks registered and 0 extra queries.

The measured numbers come from our seven-plugin benchmark. We build Hydrogen SEO, and it is Beta, so its routes may still change between releases.

How we ranked them

There is no single developer metric, so this is a judgment built on two kinds of evidence:

  • The footprint you inherit (measured): custom tables, autoloaded options, queries per request, and what stays after deactivation. These decide how cleanly a plugin sits in a site you deploy, back up and migrate.
  • The surface you can program against (documented): filters, actions, REST routes and CLI. Our sources fully document this only for Hydrogen SEO, so for the others we rely on what we measured and keep claims general.

One caution: hooks registered (Yoast 187, The SEO Framework 8) measures how much a plugin hooks into WordPress, not how many extension points it offers you. A small number there means a small blast radius.

  1. Hydrogen SEO

    Measured on 0.0.18: +12.9 ms front-end, +1 queries, 10 JSON-LD types, custom tables in 0.0.31: 1 (2 with the 404 Monitor on)

    Every screen is backed by /wp-json/hydrogen-seo/v1/, so nothing in the UI is off-limits to scripts, and external calls authenticate with application passwords. The filters reference covers titles, schema, sitemaps, robots, llms.txt and analysis; the actions reference covers lifecycle, output and events such as hydrogen_seo_sitemap_cache_cleared. wp hydrogen-seo migrate run yoast --dry-run previews an import. Measured on 0.0.18: 22 hooks, 1 query, 0 tables. Those have not been re-measured, and the table figure no longer holds: 0.0.31 has two, hydrogen_seo_links and, once the 404 Monitor is on, hydrogen_seo_404_log. Beta.

  2. The SEO Framework

    Measured on 5.1.4: +8 ms front-end, +0 queries, 9 JSON-LD types, 0 custom tables

    The least code in your way: 8 hooks registered, 0 extra queries, 0 tables, and the only plugin that restored autoloaded options to the exact baseline on deactivation. That means few surprises in a profiler and a clean removal. The flip side is fewer built-in features, so you may write more yourself. See Hydrogen SEO vs The SEO Framework.

  3. Yoast SEO

    Measured on 28.4: +39 ms front-end, +3 queries, 12 JSON-LD types, 6 custom tables

    The largest ecosystem: more than a decade of integrations, extensions and documentation, and the most developers who already know it. Its indexables tables are a deliberate design that keeps it at +3 queries and exists for large sites. You inherit six custom tables that survive deactivation, 187 registered hooks and 13.6 KB of autoloaded options.

  4. Slim SEO

    Measured on 4.10.1: +10 ms front-end, +2 queries, 10 JSON-LD types, 0 custom tables

    No tables, a 1.4 MB package, autoloaded options below baseline and a clean deactivation, with 51 hooks registered. With so few settings, most customization happens in code; check its own documentation for the hooks it offers, which our sources do not cover.

  5. SEOPress

    Measured on 10.2: +24.5 ms front-end, +1 queries, 0 JSON-LD types, 1 custom tables

    1 query and a light editor, but one custom table, 114 hooks, and autoloaded options that did not shrink at all on deactivation. Its sitemap index at /sitemaps.xml is a small gotcha for scripts that assume the usual filename.

  6. Rank Math

    Measured on 1.0.278: +36.1 ms front-end, +16 queries, 6 JSON-LD types, 6 custom tables

    Feature-dense and widely used, but it adds 16 queries, six tables (four from the Action Scheduler library) and leaves 11.0 KB autoloading after deactivation. For automated provisioning, note that it prints nothing until you register or set the two options its Skip button writes; we had to do exactly that to benchmark it.

  7. All in One SEO

    Measured on 5.0.1.1: +53.5 ms front-end, +22 queries, 8 JSON-LD types, 9 custom tables

    The heaviest footprint to inherit: nine custom tables, +22 queries, a 24.4 MB package and no reduction in autoloaded options on deactivation. For a site you hand to non-technical owners its guided interface may be worth that; for a site you maintain in code, it is the most to carry.

What to check before you commit

Three questions separate a plugin you can build on from one you work around, whichever you pick.

Can you turn off front-end output? On a headless site the theme never renders, so tags printed into wp_head are wasted or duplicated. In Hydrogen SEO it is one line, and sitemaps, analysis and REST keep working:

php
add_filter( 'hydrogen_seo_enable_frontend', '__return_false' );

Your frontend then reads the resolved fields from GET /wp-json/hydrogen-seo/v1/metabox/post/{id}.

  • Can you change output in code? Excluding items from the sitemap, adding a post type to schema, or rewriting a title for one template should be a filter, not a fork. Extending Hydrogen SEO has recipes for each.
  • What stays in the database? Diff SHOW TABLES and the autoloaded total before install and after deactivation, as in our benchmark method. Tables and leftover options follow you into every backup, staging copy and migration.

All seven, measured

MeasuredHydrogen SEO 0.0.18The SEO Framework 5.1.4Yoast SEO 28.4Slim SEO 4.10.1SEOPress 10.2Rank Math 1.0.278All in One SEO 5.0.1.1
Front-end PHP time added+12.9 ms+8 ms+39 ms+10 ms+24.5 ms+36.1 ms+53.5 ms
Peak memory added+4.5 MB+2 MB+10.5 MB+2 MB+6.5 MB+8.5 MB+14.5 MB
Database queries added+1+0+3+2+1+16+22
Hooks registered+22+8+187+51+114+155+100
<head> bytes added+4,259+3,821+5,656+1,649+2,380+4,965+6,668
Meta description by defaultYesYesNoYesYesYesYes
JSON-LD types printed1091210068
Open Graph / X tags10 / 510 / 510 / 511 / 210 / 611 / 86 / 3
Sitemap URLs listed72517573585973
Sitemap image entries40040404000
lastmod coverage72 / 7251 / 5174 / 7550 / 7350 / 5859 / 5973 / 73
Custom database tables1 (2 with the 404 Monitor on)060169
Autoloaded options added+0.4 KB+4.2 KB+13.6 KB-0.2 KB+3.6 KB+11.6 KB+14.6 KB
Plugin package size4.6 MB2.9 MB21 MB1.4 MB11.7 MB15.1 MB24.4 MB
Block editor assets2 files, 700.4 KB25 files, 77.6 KB48 files, 4,160 KB14 files, 187.7 KB17 files, 217 KB24 files, 1,792 KB130 files, 3,543 KB
After deactivation+0.2 KB left autoloadingReleases everything (exact baseline)+2.6 KB left autoloading, 6 tables remainReleases everythingNo reduction at all+11.0 KB still autoloadingNo reduction: 14.5 KB still autoloading

Measured on one WordPress 7.1 install (PHP 8.2, MySQL 8.0, Twenty Twenty-Five, 40 posts), each plugin alone with default settings, against a no-plugin baseline. Each column heading names the version that was measured. Bold marks the better number in each row. Full method: how we tested.

Hydrogen SEO's figures were measured on 0.0.18 and have not been re-run on later versions. The custom tables row is the exception: it is counted from the 0.0.31 source. A default install has one table, for the internal link counter. Switching on the 404 Monitor, which is off by default, creates a second for its log. Deleting the plugin removes both.

Features: free, paid or not offered

FeatureHydrogen SEO 0.0.31The SEO Framework 5.2.1Yoast SEO 28.8Slim SEO 4.11.5SEOPress 10.4Rank Math 1.0.282All in One SEO 5.0.5
Search engine verification codesFreeFreeFree—FreeFreeFree
IndexNow instant indexingFree—Paid—FreeFreePaid
Redirect managerFree—PaidFreePaidFreePaid
404 monitorFreeNo—FreePaidFreePaid
SEO column on the Posts screenFreeFreeFreeFreeFreeFreeFree
SEO fields in Quick EditFreeFree—FreeFreePaid—
Attachment page redirectsFree—FreeFreeFreeFreeFree
Author and date archive controlsFreeFreeFree—FreeFreeFree
RSS feed textFree—Free——FreeFree
max-snippet and preview controlsFreeFree———FreeFree
Primary categoryFreeFreeFreeFreeFreeFreePaid
Internal link counts on the Posts screenFree—Free—FreeFree—
Automatic image alt attributesFree——FreeFreeFreePaid
Table of contents blockFree—Paid——FreeFree
HTML sitemapFree———FreeFreeFree
Pillar or cornerstone content flagFree—Free——FreePaid
Crawl cleanup switchesFree—Free—Free——
Video sitemapFree—Paid—PaidPaidPaid
Google News sitemapFree—PaidFreePaidPaidPaid
llms.txtFree—Free—PaidFreeFree

This table is not benchmark data. It is based on each plugin's WordPress.org listing, the code of its free version there, and its official documentation and pricing pages, checked on 12 November 2026, for the version in each column heading. Free means the feature is in the plugin's own free version. Paid means it needs that plugin's paid version or a paid add-on. No means the plugin's listing says it does not offer it. A dash means we could not confirm it either way; it does not mean the feature is missing. A row says a feature exists, not how complete it is. Plugins change, so check the plugin's own site before relying on a cell. If a cell is wrong, tell us and we will correct it.

Common questions

Which WordPress SEO plugin is best for developers?

In our judgment, Hydrogen SEO for its documented filters, actions and REST API, and The SEO Framework for the smallest footprint: 8 hooks and zero extra queries. Hydrogen SEO is Beta.

Does Hydrogen SEO work with headless WordPress?

Yes. The hydrogen_seo_enable_frontend filter turns off front-end output while sitemaps, analysis and the REST API keep working, and your frontend reads SEO fields over REST.

Which SEO plugins create custom database tables?

In our benchmark, All in One SEO created nine, Yoast and Rank Math six each, and SEOPress one. The SEO Framework, Slim SEO and Hydrogen SEO created none. Hydrogen SEO has since added one for link counts (0.0.30), plus one for the 404 Monitor when that is switched on, which makes two in 0.0.31.

Can I import SEO data from the command line?

In Hydrogen SEO, yes: wp hydrogen-seo migrate run with a source such as yoast or rank-math, and --dry-run to preview first. Past runs are listed in history and can be rolled back.