WordPress turns on a lot of things by default. Some of them quietly work against your SEO — spawning thin, near-duplicate pages, or loading scripts you never use. You don't need to disable everything, but a handful of defaults are worth switching off on most sites. Here's the shortlist, grouped by why.
Every time you upload an image, WordPress quietly creates a whole separate page for it — a near-empty page with just the image and its caption. Most site owners never notice, but search engines do, and they're rarely a good look. Here's what attachment pages are, why they usually hurt, and how to switch them off cleanly.
WordPress quietly loads an extra JavaScript file called jQuery Migrate on most sites. It's a compatibility crutch for old code — useful while you need it, dead weight once you don't. Here's how to tell which, and how to remove it safely.
WordPress has its own task scheduler, WP-Cron, and most people never think about it until scheduled posts publish late or a busy site's CPU spikes for no obvious reason. The root cause is the same in both cases: WP-Cron isn't a real cron job. It's faked with page loads — and that assumption breaks at both ends of the traffic scale.
Adding FAQ schema takes five minutes. Choosing how to add it, so it doesn't quietly depend on another plugin's internals, takes one decision. This covers both routes, what each one actually outputs, and how to check it.
You're mapping a messy source vocabulary onto a clean target taxonomy. The target has about 5,600 slots, so the job must be roughly 5,600 decisions — right? The backlog is already past 8,900, and still climbing.
You shipped a fix to how one field is computed, re-ran the pipeline across everything, and it reported a clean run. Then the consistency check still flags those records as wrong. The fix is in the code, the rebuild "ran" — and the records never changed. Your own optimisation skipped them.
The report said 80 duplicate groups still to resolve. You'd been resolving them for days. You run it again after a big batch and it *still* says 80-ish. The backlog isn't stubborn — the scan is counting work you already finished.
You hardened a skill in the repo, shipped the PR, and the agent kept loading the old one. Or you fixed the live skill by hand, and the versioned copy quietly stayed behind. Same root cause: the copy you run and the copy you version are two different files.