WordPress Autoloaded Options: What the Site Health Warning Misses

Illustrated infographic summarizing: WordPress Autoloaded Options: What the Site Health Warning Misses

By Greg Nowak. Last updated 2026-10-30.

A WordPress Site Health warning about autoloaded options can leave you with an awkward decision: something may be affecting performance, but the dashboard does not tell you what is safe to change.

For a business website, the useful next step is to identify which settings are loading unnecessarily, trace the code responsible, and test a targeted fix. That gives owners and agency teams a manageable piece of maintenance with clear acceptance criteria.

What the warning actually measures

Autoloaded options are settings WordPress loads together so they are available without fetching each one separately. This is useful for frequently accessed configuration. It becomes wasteful when that collection includes large reports, old plugin data, or settings used on one occasional admin screen.

The current Site Health check reports the option count and combined size. Its default critical threshold is 800000 bytes, with the warning triggered at or above that limit. The count itself does not trigger the warning.

That threshold is an investigation prompt, not a performance measurement. Going below it does not prove the site is fast; exceeding it does not identify the cause of a slow checkout.

Caching also matters. WordPress caches the autoload collection, so it does not necessarily query the database for it on every request. A full-page cache can bypass WordPress execution altogether. Focus performance comparisons on requests that actually run WordPress, including logged-in and transactional journeys.

Start with an inventory, not a delete button

Before changing data, take a restorable database backup and use staging to investigate. Record the current total, largest options, and representative response times. This creates a baseline for deciding whether the work helped.

With WP-CLI available, run this from the WordPress installation directory to list the 20 largest values in the loaded collection, in bytes:

wp eval '
$options = wp_load_alloptions();
uasort( $options, static function ( $a, $b ) {
    return strlen( (string) $b ) <=> strlen( (string) $a );
} );
foreach ( array_slice( $options, 0, 20, true ) as $name => $value ) {
    printf( "%8d %s\n", strlen( (string) $value ), $name );
}
'

This lists names and value sizes without printing their contents. It is an inventory, not a PHP memory measurement. On multisite, select the intended site using WP-CLI’s --url argument.

For each large entry, identify its plugin, theme, or custom-code owner. Search for both reads and writes, including dynamically constructed names. An inactive plugin is a clue, not proof that its settings are disposable: they may be retained for reactivation or used by an integration.

Choose the fix by how the data is used

What you find Likely action Check before release
Settings used throughout the site Keep autoload enabled; investigate unnecessary payload growth Which fields are actually needed?
Settings used only by a specific screen or job Disable autoload and retain the value Does that screen or job still work efficiently?
Data from a retired component Remove only after confirming ownership and retention needs Are there remaining readers or reactivation plans?
An array that keeps accumulating records Fix the writer and review storage design Does normal operation recreate the growth?
Decide by ownership and usage, rather than option size alone.

Disabling autoload keeps the setting available through normal option retrieval. It can shift work to the requests that need it, which is why switching everything off is a poor default.

Modern WordPress helps, but does not clean up old decisions

WordPress 6.6 introduced a default 150000-byte size heuristic for automatically determined autoloading. It also introduced database states such as on, off, auto, auto-on, and auto-off. The official Options API change notes explain these safeguards.

Existing rows were not automatically rewritten. An upgrade therefore does not guarantee that legacy bloat disappears. Audit SQL that checks only autoload = 'yes' also misses modern autoload states.

For maintained code, use explicit boolean intent where usage is known: true for broadly needed settings and false for narrowly used ones. Passing the strings yes and no into the APIs has been deprecated since WordPress 6.7.

Change the flag and fix the save logic

There is an easy implementation trap: update_option() cannot change an existing option’s autoload flag unless its value also changes. Use it in the normal save path when saving a changed value:

update_option( 'my_option', $value, false );

For a flag-only correction, wp_set_option_autoload_values() changes the autoload state without rewriting the payload and handles the related option-cache updates:

wp_set_option_autoload_values( array(
    'my_option' => false,
) );

Replace the example name with a reviewed option. Apply this as a controlled maintenance change or migration. Then correct the owning save logic so a settings save, scheduled task, or deployment does not reverse the decision. For third-party plugins, seek a supported fix rather than editing plugin files that updates replace.

Verify the business workflows and the result

Change a small, documented batch, then repeat the inventory and performance checks under comparable cache conditions. Test login, forms, checkout where relevant, affected admin screens, and scheduled jobs. Save the owning plugin’s settings again and check whether the autoload state survives.

The handover should record what changed, why it was safe, how to reverse it, and who owns the lasting code fix. Raising the Site Health threshold only changes the alert; it does not reduce the loaded data.

If your team needs help tracing unfamiliar options or coordinating a safe release, Greg can audit the collection, implement targeted changes, and document the outcome. Talk to Greg about your WordPress site.

Related on GrN.dk

Need help with this kind of work?

Discuss a WordPress autoload audit with Greg Get in touch with Greg.

Sources

Latest articles

Check how your chatbot identifies itself as AI, where requests for human help actually go, and what customers encounter when support is unavailable.

Start with one website change on board.nowa.dk. Write a clear task, answer questions as they arise and review the result before giving an AI agent more work.

Keep AI search visibility, training preferences and assistant access separate. Use a practical policy matrix to check Cloudflare settings and test key public pages.

Let AI draft Black Friday campaigns using approved product data. Check prices and recipients, and secure approval before sending the campaign from Mailchimp.

Make AI meeting notes useful after the call: confirm decisions, agree owners and deadlines, check existing tasks, and verify that work reaches the right tracker.

Before tuning your AI chatbot, check whether your PDFs supply readable text, reliable reading order, usable tables, and passages you can trace to the page.

Bring quote request emails from Outlook into your CRM with AI. Define fields, duplicate checks and sales ownership, then use a pilot to measure whether the solution saves time and helps more enquiries get followed up.

Plan your PHP upgrade around checkout, enquiries and daily operations, with practical checks for compatibility, staging, deployment and rollback before support ends.

Claude Sonnet 4.5 has a tentative November 30 retirement date. Find affected workflows, check compatibility and test a supported replacement before switching.

Before closing an Apache patch ticket, check what is running, which fixes the package contains, and whether the updated service passes configuration and application checks.