WordPress prioritises backwards compatibility. That’s a feature. It also means every install ships with things you didn’t ask for. An emoji CDN script. An oEmbed script. A discovery link for blogging clients from 2005. Dashicons loaded for logged-out visitors. Heartbeat polling every 15 seconds. A v
PricingFree downloadThe WordPress.org download is free. Pro versions, add-ons or external services may cost extra.
CompatibilityRequires WordPress 5.0 and PHP 7.4.
SourceWordPress plugins · Nov 10, 2026
01 / Source details
Aboutthistool.
WordPress prioritises backwards compatibility. That’s a feature. It also means every install ships with things you didn’t ask for.
An emoji CDN script. An oEmbed script. A discovery link for blogging clients from 2005. Dashicons loaded for logged-out visitors. Heartbeat polling every 15 seconds. A version tag that tells the world exactly which WordPress you’re running.
None of these are bugs. They’re just not needed on most sites.
Disable what you don’t need. Keep what you do.
The Off Switch lets you disable each one, individually.
One screen, every switch
A live counter shows how many switches are on. A sticky bar keeps Save, the filter, and state chips (All / On / Off / Changed / New) in reach while you scroll. Changed switches are highlighted until you save, and an “unsaved changes” pill shows exactly what you’ve flipped before you commit. Jump between sections with live per-section counts, or copy a WP-CLI command that replicates your whole configuration on another site.
Every switch card states what it removes, what it saves, and what to watch out for. Every switch is functionally verified against a live WordPress install before release — the WordPress 7.1 switches against WordPress 7.1.
Where two switches overlap, the card says so: a switch whose job another one already does is marked “covered by” it, and a switch that works best with a partner names it. The few combinations that would break a site outright are refused, not just warned about — Global Styles cannot be removed under a block theme, which is built from them.
Embed script – ~4 KB + oEmbed discovery links in <head> , and the endpoint other sites use to embed your posts. Embedding YouTube, Vimeo and other sites in your own content is unaffected.
RSD link – Really Simple Discovery. Only needed for legacy XML-RPC clients.
WLW manifest – Windows Live Writer has been discontinued since 2017. WordPress 6.3 removed this link from core — the switch matters on WordPress 6.2 and older.
WP version tag – Stops advertising your WordPress version to the world.
Max Image Preview Directive (WP 5.7+) – WordPress adds max-image-preview:large to the robots tag on every public page, telling search engines they may show large image previews. Remove it if you set your own robots policy.
Shortlink – Removes <link rel="shortlink"> from <head> and HTTP headers. Search engines ignore it.
Asset query strings – Strips ?ver= from front-end scripts, styles and WP 6.5+ Script Modules, for older proxies and CDNs that won’t cache an address with a query string. Never applied in wp-admin. Purge your CDN after theme or plugin updates while it is on.
XML-RPC – Closes a common brute-force attack vector.
XML-RPC Kill Requests – Goes further than disabling: hard-kills any incoming xmlrpc.php request with a 403 before WordPress loads at all.
XML-RPC Methods – A gentler alternative to the hard kill: strips every XML-RPC method, closing the unauthenticated ones — including pingback.ping — that the XML-RPC switch above leaves answering. xmlrpc.php still responds, but with nothing to call.
Heartbeat API – Slows wp-admin’s check-ins with your server from every 15 s (every 10 s in the post editor) to once a minute. Post-lock warnings and the session-expired prompt keep working.
Dashicons (frontend) – ~35 KB (CSS + font) saved for every logged-out visitor.
REST API Discovery Link – Removes <link rel="https://api.w.org/"> from <head> . Safe to remove on standard sites.
RSS Feed Links – Removes feed autodiscovery <link> tags from <head> . Modern browsers no longer act on them. Leave enabled if you publish an RSS feed.
Speculation Rules (WP 6.8+) – Disables the WP 6.8+ Speculation Rules API that prefetches links before users click. Can inflate analytics, increase server bandwidth, and trigger consent flows on unfetched pages.
Disable All Feeds – Redirects all RSS and Atom feed URLs to the homepage. For sites with no RSS subscribers.
Comment Auto-Links – Stops WordPress from converting plain-text URLs in comments into clickable links.
Editor Autosave – Deregisters the autosave script that POSTs editor content to the server every 60 seconds. For teams that prefer explicit saves.
DNS Prefetch – Removes all <link rel="dns-prefetch"> hints from <head> . Redundant when Emojis and Embeds are already disabled.
Recent Comments Inline CSS – WordPress outputs a small inline <style> block in <head> whenever the Recent Comments widget is active. Remove it if your theme already styles the widget.
Script & Style Control
jQuery Migrate – ~30 KB. Modern themes don’t need it.
Block Library CSS – ~7 KB loaded on every page, even with no Gutenberg blocks.
Global Styles (theme.json CSS) – 10-50 KB inline CSS from block themes.
SVG Duotone Filters – Hidden SVG blob injected on every page, even with no duotone images. WordPress 6.3 made duotone output on-demand — the switch matters on WordPress 6.2 and older.
Script/Style type attributes – type="text/javascript" and type="text/css" are redundant in HTML5. Only older themes still emit them; themes with HTML5 support already don’t. Off by default.
Defer non-critical JavaScript – Adds defer so scripts don’t block HTML parsing. jQuery is never deferred.
Move scripts to footer – Relocates enqueued scripts from <head> to just before </body> . jQuery is never moved.
Template Output Buffering (WP 7.0) – Since WordPress 7.0, classic themes get every frontend page buffered in memory in full and re-parsed before a single byte reaches the visitor, so late-printed block styles can be hoisted into <head> . Turning the buffer off restores streamed output for faster TTFB and lower peak memory. Block themes are unaffected.
WordPress Behaviour Tweaks
Self-pingbacks – WordPress pings your own posts when you link between them – a wasted HTTP request that creates an unwanted comment on the target post.
Capital P filter – WordPress corrects “WordPress” to “WordPress” on every rendered string. Remove if you don’t need the autocorrect.
Smart Quotes (wptexturize) – WordPress runs a regular-expression pass over every title, excerpt, comment and block of content to turn straight quotes and hyphens into typographic ones. Remove it if you write your own punctuation or output code and markup that the conversion mangles.
Limit post revisions – WordPress stores unlimited revisions per post. Caps revisions at 3 to prevent silent database growth on active editorial sites.
Attachment pages – WordPress creates a full template page for every uploaded file. These waste crawl budget on most sites. Sends a 301 redirect to the parent post instead.
Comments – Closes all comments and pingbacks site-wide, hides existing comments on the frontend, skips the theme’s comments template and comment-reply.js, and removes comment-related UI from wp-admin (Comments menu, admin bar node, dashboard widget). Enable only if your site does not use comments. On WooCommerce stores this includes product reviews.
Search – Redirects all WordPress search queries ( /?s= ) to the homepage with a 301, preventing bots from triggering repeated database queries. Also removes search forms rendered via get_search_form() . Hardcoded forms in theme templates are not affected. WooCommerce product searches are always let through.
oEmbed Provider – WordPress registers a REST endpoint at /wp-json/oembed/1.0/embed so other sites can embed your content via the oEmbed protocol. Remove it if you don’t want your content embeddable externally. Does not affect your ability to embed others’ content.
Widgets – Unregisters every widget area and removes the Appearance → Widgets screen, the admin bar entry and the Customizer panel. Nothing is deleted: switch it back off and every widget returns. Block themes register no widget areas, so this one is for classic themes.
Post via Email – Removes the Post via Email configuration from Writing Settings and disables the feature. Almost no modern site uses email-to-post.
Update Services (Ping-o-Matic) – Removes Update Services from Writing Settings and stops outbound pings to weblog ping services on every published post.
Native XML Sitemap (WP 5.5+) – Disables WordPress’s built-in XML sitemap generator. Most sites use external SEO plugins (Yoast, Rank Math) for sitemaps instead. Removes unnecessary redirects and reduces crawl overhead (default OFF).
oEmbed Auto-Embed – Disables WordPress from regex-scanning post content for [embed] shortcodes and oEmbed patterns on every frontend page load. For sites that do not embed external content, removing this filter saves processing overhead (default OFF).
Database & Query
Expired Transients – Schedules a daily cleanup of expired transient rows in wp_options. Useful on low-traffic sites where WP-Cron can go days without firing.
Abandoned Auto-Drafts – WordPress creates an auto-draft every time the post editor opens. Abandoned sessions leave these rows permanently. Runs a daily sweep to delete auto-drafts older than 30 days.
Skip Row Count on Singles – On every single post or page, MySQL runs SQL_CALC_FOUND_ROWS to count total matching rows – a full index scan only needed for paginated archives. Removes that sub-query on all singular views.
Adjacent Post Links – Older WordPress queries the previous and next post on every single post page to output <link rel="prev/next"> in <head> — two extra DB queries per page load. Google dropped support for these hints in 2019, and modern WordPress no longer outputs them; the switch matters on older installs.
Reduce Trash Retention – WordPress keeps trashed items for 30 days before permanent deletion. A daily sweep permanently deletes posts and comments trashed more than 7 days ago, keeping wp_posts leaner on active editorial sites without affecting normal recovery workflows.
Image Performance
Google Fonts display:swap – Without font-display:swap , the browser hides text while your Google Font downloads (FOIT). Adds display=swap to every Google Fonts URL so visitors s
See it in action
Screenshots & previews.
One screen, every switch — live counter, sticky save bar, text and state filters, and section navigation with per-section counts.Flip switches and review before saving — changed switches stay highlighted and the "unsaved changes" pill shows exactly what you've touched.Off switches for what WordPress 7.0 turned on — template output buffering, the AI client framework, and more.The WordPress 7.0 AI off switches — AI Support, Admin View Transitions, and the Abilities REST API, each with plain-language descriptions and warnings.
02 / Source details
Gettingstarted.
01Upload wp-avoid-slow to /wp-content/plugins/
02Activate through the Plugins menu
03Go to Settings -> Off Switch
04Turn off what you don’t need
03 / Source details
Frequently asked questions.
Will this break my site?
A fresh install starts with 25 switches on — the ones that are safe on almost any site. Everything riskier (jQuery Migrate, defer JS, scripts to footer, Require Login) is off until you choose it, and the settings screen refuses the few combinations that would break a site outright. Each switch does one thing; where two overlap, the card tells you. If something breaks, turn that switch off. Nothing is written to disk.
Does it work on managed hosting (WP Engine, Kinsta, Pressable)?
Yes. Pure PHP hooks, no .htaccess required.
Should I disable XML-RPC?
Only if you don’t use Jetpack, the WordPress mobile app, or any XML-RPC client. When in doubt, leave it off.
Should I enable “Defer non-critical JavaScript” or “Move scripts to footer”?
Test on staging first. These two are the most likely to cause issues on complex sites – some themes and plugins rely on scripts being available synchronously in <head> .
Can I manage the switches from the command line?
Yes, with WP-CLI. wp off-switch list shows every switch and whether it is on (filter with --status=on , --module=woocommerce , or --format=json ). wp off-switch enable <key>... and wp off-switch disable <key>... flip individual switches, and wp off-switch disable --all puts WordPress back to stock. wp off-switch export prints your whole configuration as JSON, ready to import on another site with wp option update .
Does it cache pages?
No. This plugin removes unused WordPress features. For page caching, use a dedicated plugin.
Does it work on WordPress Multisite?
Not currently. The plugin is designed and tested for single-site WordPress installs. Multisite support is planned for a future release.
Does it work with WooCommerce?
Yes. When WooCommerce is active, a WooCommerce section appears in Settings -> Off Switch with 16 dedicated toggles for removing WooCommerce frontend overhead, admin adverts and background jobs. None of the core toggles touch WooCommerce – each module is independent.
How do I disable emojis in WordPress?
Enable the Emoji Script toggle under Bloat Remover. It removes the emoji CDN script (~15 KB + 1 HTTP request) — modern browsers render emoji natively without it.
How do I disable the Heartbeat API in WordPress?
Enable the Heartbeat API toggle. It reduces admin polling from every 15 seconds to every 60 seconds. For most sites the difference is invisible to editors.
Does it work alongside caching plugins like WP Rocket, LiteSpeed Cache, or W3 Total Cache?
Yes. This plugin removes features at the WordPress hook level before caching plugins run. Use both — they do different jobs. This plugin removes unnecessary output; a caching plugin stores and serves the result.
How is this different from other performance plugins?
Most performance plugins add things – caching layers, CDN routing, minification pipelines. This one removes things. It’s a different job.
FinderPress Media Auditor helps site administrators scan for broken images, missing Media Library files, unreachable media URLs, and other media issues across WordPress content. Use it to audit images, video, audio, PDFs, featured images, and attachment files without sending scan data to an external
The Accepted Payment Methods plugin is a straightforward, lightweight solution that enhances your website by displaying visually appealing icons of the payment methods you accept. This plugin is ideal for a variety of websites, including e-commerce platforms, service-oriented websites, and informati