
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 Windows Live Writer manifest (discontinued 2017).
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.
<head>.<link rel="shortlink"> from <head> and HTTP headers. Search engines ignore it.?ver= from scripts, styles, and WP 6.5+ Script Modules so CDNs and proxies cache correctly.<link rel="https://api.w.org/"> from <head>. Safe to remove on standard sites.<link> tags from <head>. Modern browsers no longer act on them. Leave enabled if you publish an RSS feed.<link rel="dns-prefetch"> hints from <head>. Redundant when Emojis and Embeds are already disabled.<style> block in <head> whenever the Recent Comments widget is active. Remove it if your theme already styles the widget.type="text/javascript" and type="text/css" are redundant in HTML5.defer so scripts don’t block HTML parsing. jQuery is never deferred.<head> to just before </body>. jQuery is never moved./?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./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.<link rel="prev/next"> in <head>. Two extra DB queries per page load. Google dropped support for these SEO hints in 2019.font-display:swap, the browser hides text while your Google Font downloads (FOIT). Adds display=swap to every Google Fonts URL so visitors see text immediately.width and height attributes cause layout shifts (CLS). Reads dimensions from attachment metadata and injects them automatically.fetchpriority="high" to the first content image so the browser loads it before lower-priority resources. Adds fetchpriority="low" and decoding="async" to all others.loading="lazy" to images below the fold. The first image is never lazy-loaded – it is the LCP candidate and must load immediately.?author=1 to /author/username/, exposing registered usernames. Intercepts those requests and redirects to the homepage before the username is revealed./author/username/ pages to the homepage. For sites with no author profile pages.DISALLOW_FILE_EDIT to remove the plugin and theme code editor from wp-admin. Eliminates a code-injection surface a compromised admin account could exploit.X-Pingback: from every HTTP response, stopping the site from advertising its XML-RPC endpoint URL to scanners./wp-json/wp/v2/users publicly, returning usernames and slugs for all users with published posts. Removes this endpoint for unauthenticated requests only — Gutenberg and plugins that need it while logged in are unaffected (default ON).CORE_UPGRADE_SKIP_NEW_BUNDLED to stop WordPress installing a new default theme on every core upgrade. Existing themes are not affected (default OFF).These toggles are only shown when WooCommerce is active.
<meta name="generator" content="WooCommerce x.x.x"> from <head>. Same reason as the WordPress version tag: stops advertising which version of WooCommerce you’re running.