The best WordPress SEO plugin for database performance, measured
The SEO Framework is the best SEO plugin for database performance we measured: zero extra queries per request, no custom tables, and the only plugin that returned autoloaded options to the exact baseline when deactivated. Slim SEO and Hydrogen SEO (ours) are effectively tied behind it, both with no tables in the versions tested and near-zero autoload growth; Slim SEO takes second on a cleaner exit. Hydrogen SEO's table count is out of date, though: the version tested was 0.0.18, and 0.0.31 creates up to two.
Database figures in our seven-plugin benchmark were byte-identical across two full runs, so unlike timings they are exact for our test site. We build Hydrogen SEO.
How we ranked them
Three database costs, all deterministic:
- Queries per request. Each is a round trip to MySQL. On localhost they are cheap; on hosting with network-attached MySQL, a handful of extra queries adds real time to every uncached page.
- Autoloaded options. WordPress reads every autoloaded option on every request, admin and front end, whether the page needs it or not. Our baseline was 49.8 KB.
- Custom tables and leftovers. Tables are schema you now own through backups, migrations and uninstalls. They survive deactivation, and so can autoloaded options.
Queries rank first, then autoload growth, then what is left behind.
The SEO Framework
Measured on 5.1.4: +8 ms front-end, +0 queries, 9 JSON-LD types, 0 custom tables
+0 queries, alone in the field. +4.2 KB of autoloaded options, no tables, and deactivation restored exactly 49.8 KB, the baseline to the decimal. Nothing is left to clean up. See The SEO Framework alternatives.
Slim SEO
Measured on 4.10.1: +10 ms front-end, +2 queries, 10 JSON-LD types, 0 custom tables
+2 queries, no tables, and autoloaded options that came out 0.2 KB below baseline. Deactivation released everything. It is one query behind Hydrogen SEO on a fresh install and cleaner on the way out, which is why it takes second in a near tie.
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)
+1 query on a fresh install and +0 once settings have been saved, 0.4 KB of autoloaded options and no tables in the version tested, where everything lived in standard options and post meta. That changed afterwards. In 0.0.31 the internal link counter keeps its links in a table (
hydrogen_seo_links), and the 404 Monitor creates a log table (hydrogen_seo_404_log) if you switch it on, so the count is one or two, not zero. Neither is read while a page is served. Deactivation left 0.2 KB autoloading. The one query exists because it primes its settings in a single read; version 0.0.14 read them one key at a time and paid 7 queries, which the benchmark caught and we fixed.SEOPress
Measured on 10.2: +24.5 ms front-end, +1 queries, 0 JSON-LD types, 1 custom tables
+1 query, but one custom table and 3.6 KB of autoloaded options that deactivation did not reduce at all. Per request it is cheap; as a long-term guest in your database it is less tidy.
Yoast SEO
Measured on 28.4: +39 ms front-end, +3 queries, 12 JSON-LD types, 6 custom tables
+3 queries is very good for its size, and the reason is six custom indexables tables that pre-compute SEO data instead of assembling it at render time. On a very large site, that design is built to save work. The costs are 13.6 KB of autoloaded options, 2.6 KB of which stay after deactivation, and tables that remain until you uninstall.
Rank Math
Measured on 1.0.278: +36.1 ms front-end, +16 queries, 6 JSON-LD types, 6 custom tables
+16 queries per request, six tables (four belong to Action Scheduler) and 11.6 KB of autoloaded options, of which 11.0 KB kept loading after deactivation. See Rank Math alternatives.
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 database footprint in the test: +22 queries, nine custom tables, 14.6 KB of autoloaded options, and no reduction at all when deactivated. See Rank Math vs All in One SEO.
Deactivation is not uninstallation
If you are trialling SEO plugins, what stays behind matters. A deactivated plugin's autoloaded options are still read on every request, and its tables stay in every backup. In our run, deactivating All in One SEO or SEOPress did not reduce their autoloaded footprint by a single byte, and Rank Math kept almost all of its 11.6 KB.
To check your own site, record the autoloaded total before installing and again after deactivating:
SELECT ROUND(SUM(LENGTH(option_value)) / 1024, 1) AS autoload_kb
FROM wp_options
WHERE autoload IN ('yes', 'on', 'auto', 'auto-on');
Modern WordPress uses several autoload values, so matching only 'yes' under-reports. Then diff SHOW TABLES for new tables. A persistent object cache such as Redis narrows the query gap between plugins, because repeated reads stop reaching MySQL, but it does not remove tables. The full procedure is in our benchmark method, and if slow responses are the real problem, see reducing TTFB in WordPress.
All seven, measured
| Measured | The SEO Framework 5.1.4 | Slim SEO 4.10.1 | Hydrogen SEO 0.0.18 | SEOPress 10.2 | Yoast SEO 28.4 | Rank Math 1.0.278 | All in One SEO 5.0.1.1 |
|---|---|---|---|---|---|---|---|
| Front-end PHP time added | +8 ms | +10 ms | +12.9 ms | +24.5 ms | +39 ms | +36.1 ms | +53.5 ms |
| Peak memory added | +2 MB | +2 MB | +4.5 MB | +6.5 MB | +10.5 MB | +8.5 MB | +14.5 MB |
| Database queries added | +0 | +2 | +1 | +1 | +3 | +16 | +22 |
| Hooks registered | +8 | +51 | +22 | +114 | +187 | +155 | +100 |
<head> bytes added | +3,821 | +1,649 | +4,259 | +2,380 | +5,656 | +4,965 | +6,668 |
| Meta description by default | Yes | Yes | Yes | Yes | No | Yes | Yes |
| JSON-LD types printed | 9 | 10 | 10 | 0 | 12 | 6 | 8 |
| Open Graph / X tags | 10 / 5 | 11 / 2 | 10 / 5 | 10 / 6 | 10 / 5 | 11 / 8 | 6 / 3 |
| Sitemap URLs listed | 51 | 73 | 72 | 58 | 75 | 59 | 73 |
| Sitemap image entries | 0 | 40 | 40 | 40 | 40 | 0 | 0 |
lastmod coverage | 51 / 51 | 50 / 73 | 72 / 72 | 50 / 58 | 74 / 75 | 59 / 59 | 73 / 73 |
| Custom database tables | 0 | 0 | 1 (2 with the 404 Monitor on) | 1 | 6 | 6 | 9 |
| Autoloaded options added | +4.2 KB | -0.2 KB | +0.4 KB | +3.6 KB | +13.6 KB | +11.6 KB | +14.6 KB |
| Plugin package size | 2.9 MB | 1.4 MB | 4.6 MB | 11.7 MB | 21 MB | 15.1 MB | 24.4 MB |
| Block editor assets | 25 files, 77.6 KB | 14 files, 187.7 KB | 2 files, 700.4 KB | 17 files, 217 KB | 48 files, 4,160 KB | 24 files, 1,792 KB | 130 files, 3,543 KB |
| After deactivation | Releases everything (exact baseline) | Releases everything | +0.2 KB left autoloading | No reduction at all | +2.6 KB left autoloading, 6 tables remain | +11.0 KB still autoloading | No 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
| Feature | The SEO Framework 5.2.1 | Slim SEO 4.11.5 | Hydrogen SEO 0.0.31 | SEOPress 10.4 | Yoast SEO 28.8 | Rank Math 1.0.282 | All in One SEO 5.0.5 |
|---|---|---|---|---|---|---|---|
| Search engine verification codes | Free | — | Free | Free | Free | Free | Free |
| IndexNow instant indexing | — | — | Free | Free | Paid | Free | Paid |
| Redirect manager | — | Free | Free | Paid | Paid | Free | Paid |
| 404 monitor | No | Free | Free | Paid | — | Free | Paid |
| SEO column on the Posts screen | Free | Free | Free | Free | Free | Free | Free |
| SEO fields in Quick Edit | Free | Free | Free | Free | — | Paid | — |
| Attachment page redirects | — | Free | Free | Free | Free | Free | Free |
| Author and date archive controls | Free | — | Free | Free | Free | Free | Free |
| RSS feed text | — | — | Free | — | Free | Free | Free |
| max-snippet and preview controls | Free | — | Free | — | — | Free | Free |
| Primary category | Free | Free | Free | Free | Free | Free | Paid |
| Internal link counts on the Posts screen | — | — | Free | Free | Free | Free | — |
| Automatic image alt attributes | — | Free | Free | Free | — | Free | Paid |
| Table of contents block | — | — | Free | — | Paid | Free | Free |
| HTML sitemap | — | — | Free | Free | — | Free | Free |
| Pillar or cornerstone content flag | — | — | Free | — | Free | Free | Paid |
| Crawl cleanup switches | — | — | Free | Free | Free | — | — |
| Video sitemap | — | — | Free | Paid | Paid | Paid | Paid |
| Google News sitemap | — | Free | Free | Paid | Paid | Paid | Paid |
| llms.txt | — | — | Free | Paid | Free | Free | Free |
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 SEO plugin adds the fewest database queries?
The SEO Framework, with zero extra queries in our benchmark. Hydrogen SEO and SEOPress added one, Slim SEO two, Yoast three, Rank Math 16 and All in One SEO 22.
Are custom database tables bad?
Not automatically. Yoast's tables are why it adds only three queries. But tables are schema you maintain, and in our test every plugin's tables survived deactivation.
What are autoloaded options?
Options WordPress loads from the database on every request. The SEO plugins we tested changed that total by between -0.2 KB (Slim SEO) and +14.6 KB (All in One SEO).
Does an object cache fix plugin query counts?
It reduces how many repeated queries reach MySQL, which narrows the gap between plugins. It does not remove custom tables or shrink the autoloaded options loaded on each request.