WordPress runs more than 40% of the web, which means it's simultaneously the best-documented platform to do SEO on and the platform with the most ways to get it wrong. Out of the box, WordPress is SEO-neutral: clean permalinks and crawlable HTML, but also date archives, tag pages, attachment URLs, and author archives that all become index bloat the moment you start publishing.
The difference between a WordPress site that ranks and one that stalls almost never comes down to which SEO plugin you picked. It comes down to theme weight, architecture, taxonomy discipline, and indexation control, decisions most site owners make by default rather than on purpose.
This guide is the complete setup we run on client sites: the stack, the architecture, the taxonomy rules, the speed work, and where plugin schema ends and manual schema begins.
The stack: theme and plugin choices that matter
Every plugin you install adds queries, scripts, and maintenance surface. The right mindset is a minimum viable stack: a fast theme, one SEO plugin, one caching layer, one image optimizer, and a very high bar for anything else.
The theme is the foundation
A heavy multipurpose theme or page-builder stack can ship 2 MB of CSS and JavaScript before your content loads, and no caching plugin fully claws that back. Lightweight themes (GeneratePress, Kadence, Blocksy, or a well-built block theme) keep the base page under a few hundred kilobytes and give you clean heading structure by default. If you're on a builder like Elementor and can't migrate, at minimum disable unused widgets and load assets conditionally.
One SEO plugin, configured once
Yoast, Rank Math, and SEOPress all do the same core job: titles and meta descriptions, canonical URLs, XML sitemaps, indexation toggles per content type, and baseline schema. Pick one, running two creates duplicate meta tags and conflicting schema. The plugin choice matters far less than the configuration:
- Noindex date archives, format archives, attachment pages (or redirect attachments to the parent post), and paginated author archives on single-author sites.
- Sitemap: include posts, pages, and categories; exclude tags, media, and any custom post type that shouldn't rank.
- Titles: set keyword-first templates and strip the automatic site-name suffix where it pushes titles past 60 characters.
- Breadcrumbs: enable them and output BreadcrumbList schema, cheap wins for both UX and SERP display.
Site architecture: flat, siloed, and crawlable
WordPress will happily let you publish 500 posts into one undifferentiated blog feed. Google will happily treat that as 500 disconnected pages. Architecture is how you tell the machine which pages belong together and which matter most, it's the site-level half of topical authority.
- Set permalinks to /%postname%/, no dates, no category prefixes for most sites. Short, stable URLs survive restructures.
- Build hubs as pages, not archives. For each core topic, create a pillar page that defines the topic and links to every supporting post. Pages give you full control over layout, copy, and schema that category archives don't.
- Keep click depth ≤ 3. Every post you care about should be reachable within three clicks of the home page, via hub links, category menus, or related-post modules.
- Link within clusters deliberately. Supporting posts link up to their hub and sideways to siblings with descriptive anchors. Our internal linking strategy covers the exact patterns.
Plan the clusters before you publish, not after. A topical map tells you which hubs to build as pages, which subtopics become posts, and which category structure mirrors that plan, so the architecture and the content plan are the same document.
Taxonomy hygiene: categories vs tags
Taxonomies are the most abused feature in WordPress. Every category and tag spawns an archive page, and most sites let those archives multiply into hundreds of thin, near-duplicate, competing URLs. The rules that prevent it:
| Question | Categories | Tags |
|---|---|---|
| What are they for? | Site structure, one primary topic bucket per post | Cross-cutting labels connecting posts across categories |
| How many should exist? | 5–12 total, matching your topical map's hubs | Zero for most sites; a curated handful at most |
| Index the archives? | Yes, with an intro paragraph and a curated title | Almost never; noindex or remove them |
| Failure mode | 40 overlapping categories, posts in five at once | 1,000 single-use tags, each a thin indexable page |
The test for any taxonomy archive is simple: would a stranger landing on this page from Google find a useful, differentiated resource? A category archive with a written introduction, a sensible post list, and a matching search intent passes. A tag page containing one post from 2022 does not.
Cleaning up an existing mess
- Merge overlapping categories and 301 the retired archive URLs to the surviving category.
- Assign exactly one primary category per post; use your SEO plugin's primary-category feature if a post genuinely needs two.
- Bulk-delete tags with fewer than five posts, then noindex whatever tag archives remain.
- Crawl the site afterwards and confirm no menu, widget, or sitemap still points at removed archives, a standard step in any thorough site audit.
Speed: Core Web Vitals on WordPress
WordPress speed problems are almost always accumulation problems: a heavy theme, fifteen plugins each loading their own CSS and JS, unoptimized hero images, and no caching. The fix is subtraction plus a short, ordered checklist:
- Hosting first. A quality host with server-level caching and PHP 8+ fixes time-to-first-byte problems no plugin can. If TTFB exceeds ~600ms, start here.
- Page caching. Use your host's cache or one plugin (WP Rocket, FlyingPress, LiteSpeed Cache on LiteSpeed servers). One, never two.
- Image discipline. Serve WebP/AVIF, compress on upload, set explicit dimensions to prevent layout shift, and preload the LCP hero image while lazy-loading everything below the fold.
- Trim third-party scripts. Fonts, chat widgets, and trackers routinely dominate main-thread time. Host fonts locally and delay non-critical scripts until interaction.
- Measure real-user data. Judge yourself on the Chrome UX Report field data in Search Console, not on a single lab score.
For the metric-by-metric breakdown, LCP, INP, CLS, and how much they actually matter for rankings, see our Core Web Vitals guide.
Schema: plugin defaults vs manual markup
Your SEO plugin already outputs a connected schema graph: WebSite, Organization or Person, WebPage, and Article on posts. For baseline entity identity, that's genuinely good, configure the organization name, logo, and sameAs profiles once and leave it alone.
Where plugins fall short is specific, content-dependent markup: FAQ blocks that must mirror on-page questions, HowTo steps, Product data, or custom properties like about and mentions that express your entity model. Plugin UIs for these are either missing or clumsy, and stacking a dedicated schema plugin on top of your SEO plugin is how you end up with two conflicting Article nodes.
“Let the plugin own the boilerplate graph. Own the meaningful markup yourself, it's ten lines of JSON-LD per template, and it's the part Google actually pulls rich results from.”
Manual JSON-LD in WordPress is a short filter in a child theme or code-snippets plugin. For example, injecting FAQ markup on a specific post:
add_action("wp_head", function () {
if (!is_single("wordpress-seo-guide")) return;
$schema = array(
"@context" => "https://schema.org",
"@type" => "FAQPage",
"mainEntity" => array(array(
"@type" => "Question",
"name" => "Do categories help WordPress SEO?",
"acceptedAnswer" => array(
"@type" => "Answer",
"text" => "Yes - when they mirror your topical structure."
)
))
);
echo "<script type=\"application/ld+json\">"
. wp_json_encode($schema) . "</script>";
});Validate everything in the Rich Results Test after any plugin update, plugins occasionally change their output and silently duplicate or drop nodes. The full type-by-type playbook lives in our schema markup guide, and if you'd rather have the entire stack configured and maintained for you, that's our WordPress SEO service.
Key takeaways
- Your theme is a bigger SEO decision than your SEO plugin, a bloated page builder adds render-blocking weight that no plugin can optimize away.
- Run exactly one SEO plugin, configured once: titles, canonical handling, sitemap, and indexation rules for every archive type.
- Categories are your site architecture; tags are almost always index bloat. Most sites should noindex tag archives entirely or delete tags outright.
- Speed on WordPress is subtraction, not addition: fewer plugins, lighter theme, page caching, and optimized images beat any optimization plugin stack.
- Plugin-generated schema covers baseline Article and Organization markup well; anything custom (FAQ, HowTo, Product) is safer done manually per template.
Frequently asked questions
Which SEO plugin is best for WordPress?
Yoast, Rank Math, and SEOPress are all capable, the differences are UI and packaging, not ranking outcomes. Pick one, configure titles, sitemaps, indexation rules, and organization schema once, and never run two SEO plugins simultaneously.
Should I noindex tags in WordPress?
For most sites, yes. Tag archives are thin, auto-generated lists that duplicate category archives and bloat the index. Unless you deliberately curate a small set of tag pages with real content and demand, noindex them or remove tags entirely.
Do page builders like Elementor hurt SEO?
Not directly, Google renders the output fine. The cost is weight: builders add nested markup and sitewide CSS/JS that drag Core Web Vitals down. A lightweight theme with native blocks achieves the same layouts at a fraction of the payload.
Is WordPress better than Shopify or Webflow for SEO?
WordPress offers the most control, full ownership of URLs, templates, schema, and server, which is an advantage if you use it and a liability if you don't. Platform choice matters far less than architecture, content quality, and technical discipline on whichever platform you pick.
How many categories should a WordPress site have?
Typically 5–12, matching the main hubs of your topical map, with each post assigned to exactly one primary category. If you need more buckets than that, the extra granularity usually belongs in your pillar-page structure, not in the taxonomy.
Founder & Semantic SEO Lead · Permanent SEO
Writes about entity SEO, topical authority, and how modern and AI-powered search actually rank content.
View full profile