WordPress serves server-rendered HTML out of the box, so Googlebot and AI crawlers see your content immediately without needing to execute JavaScript. That’s a real structural advantage over many modern frameworks. But the ecosystem’s maturity is also its trap: hundreds of SEO plugins, conflicting settings, and a decade of “SEO tips” floating around mean WordPress sites get misconfigured at every level. This guide covers what actually moves the needle.
What an SEO plugin does (and doesn’t do)
An SEO plugin handles the operational layer that WordPress’s core doesn’t: page title and meta description templates, XML sitemap generation, canonical tag injection, Open Graph and Twitter Card tags, breadcrumb markup, and basic schema output. It doesn’t create content, fix slow pages, or build links.
The major plugins (Yoast SEO, Rank Math, All in One SEO, SEOPress) all cover the same ground. The differences are in the UI and defaults, not the underlying mechanics. Pick one and configure it thoroughly rather than switching chasing features. Running two SEO plugins simultaneously creates duplicate meta tags and conflicting sitemaps. That’s worse than running none.
Install one, disable any other SEO plugin that was already active, then work through the setup wizard. The wizard will ask about your site type, social accounts, and whether you want to enable schema output. Enable schema.
Permalink structure
WordPress defaults to query-string URLs like /?p=123. Change this before publishing content. Go to Settings > Permalinks and select Post name.
Post-name permalinks produce URLs like /how-to-optimise-wordpress-seo/, which are:
- Readable by humans and crawlers
- Stable across platform migrations
- Easier to include target keywords in naturally
If your site is live with existing URLs, changing the permalink structure breaks every existing link and drops every ranking. Either change it before launch, or leave it as-is and redirect old URLs to new ones if you do change it later.
For posts and pages, keep slugs short and keyword-relevant. WordPress auto-generates the slug from the post title, but auto-generated slugs often include stop words. Edit the slug in the block editor before publishing to trim it down.
Titles and meta descriptions
Every page needs a unique title tag and meta description. Your SEO plugin provides template-based defaults (something like %post_title% - %site_name% for the title), which is fine as a fallback. Override them at the page level for anything that matters.
Title tag rules:
- 50-60 characters to avoid truncation in search results
- Lead with the target keyword where it reads naturally
- Include the brand name at the end, separated by a pipe or dash
Meta description rules:
- 150-160 characters
- Summarise what the page delivers and include the keyword
- Write for clicks, not just for crawlers. The meta description doesn’t directly affect rankings but it does affect click-through rate, which does.
Your SEO plugin will show character counts and previews. Use them.
XML sitemaps and Search Console
Your SEO plugin generates an XML sitemap automatically, usually at /sitemap.xml or /sitemap_index.xml. Submit it to Google Search Console under Sitemaps.
The sitemap tells Google which pages exist and when they were last modified. Without one, Google still crawls your site, but new pages can take longer to be discovered.
What to verify in your sitemap:
- All important pages are present
- Pages you’ve set to noindex are NOT in the sitemap (most plugins handle this automatically, but check)
- The lastmod date updates when pages are updated
After submission, check Search Console’s sitemap report for errors. Common issues include pages returning 404 or pages that are in the sitemap but also noindexed, which sends contradictory signals to Google.
Structured data and schema
WordPress with an SEO plugin outputs basic schema by default: WebSite, Organization or Person, and BreadcrumbList on most pages. Posts output Article or BlogPosting. This covers the baseline, but for specific content types, you want more.
For a recipe site, you want Recipe schema. For a local business, LocalBusiness. For products, Product with Offer and review aggregates. Your SEO plugin may handle some of these via additional modules. For anything it doesn’t cover, add JSON-LD in the block editor’s Custom HTML block or via a dedicated schema plugin.
Here’s a minimal Article JSON-LD block you could add to a post:
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Your Post Title Here",
"author": {
"@type": "Person",
"name": "Author Name"
},
"datePublished": "2026-05-11",
"dateModified": "2026-05-11"
}
Most SEO plugins output this automatically for posts. Where JSON-LD matters most is for content types outside the default scope: FAQs, how-tos, events, products, or reviews. Adding FAQPage schema to a page with a real Q&A section can earn expanded SERP features and makes your content more parseable by AI systems.
For a deeper look at schema types and how they interact with AI Overviews and other rich results, see the schema markup guide.
The thin-content trap: categories and tags
WordPress automatically creates archive pages for every category and tag you create. A post tagged with “SEO,” “marketing,” and “content” generates three archive pages. Most of those pages contain only the post excerpts pulled from a handful of posts, and they’re near-identical to each other. That’s thin content, and it dilutes your site’s quality signals.
The fix is noindexing archives that add no real value:
- Tag archives: Unless your tag archives have substantial content, set them to noindex. Most do. Your SEO plugin has a global setting for this.
- Category archives: If a category has only one or two posts, noindex it. Once it has real depth (ten-plus quality posts), reindex it.
- Author archives: For single-author sites, author archives duplicate every post. Noindex them.
- Date archives: Almost always thin. Noindex globally.
This is one of the highest-leverage technical SEO actions on a WordPress site. Reducing thin-content pages sharpens the signal from the pages that matter.
| Archive type | Default state | Recommended action |
|---|---|---|
| Categories (populated) | Indexed | Keep indexed, add intro text |
| Categories (1-2 posts) | Indexed | Noindex |
| Tags | Indexed | Noindex globally |
| Author archives (single author) | Indexed | Noindex |
| Date archives | Indexed | Noindex globally |
Media, images, and alt text
WordPress handles image uploads well but doesn’t automatically optimise file sizes or generate modern formats. A page that loads 15 uncompressed JPEGs will fail Core Web Vitals regardless of how clean the rest of the code is.
What to do:
- Convert to WebP. Plugins like Imagify or ShortPixel can convert uploaded images to WebP and serve the right format per browser. WebP files are usually noticeably smaller than equivalent JPEGs at the same visual quality.
- Lazy load. WordPress has lazy loading built in since version 5.5. Verify it’s not been disabled by a theme or page builder.
- Write alt text for every image. Alt text tells screen readers and crawlers what an image shows. Use descriptive language, include the keyword where it fits naturally, and don’t stuff. An image of a laptop on a desk on a WordPress SEO guide should have alt text like “WordPress admin dashboard showing SEO plugin settings” not “wordpress seo wordpress seo plugin.”
- Set the image dimensions. Always include width and height attributes. WordPress’s block editor adds these automatically. They prevent layout shift (a Core Web Vitals metric) because the browser reserves space before the image loads.
Site speed and caching
WordPress’s performance floor is lower than a static site generator’s. Every page request, by default, queries the database and assembles the HTML on the server. Add a dozen plugins and a complex theme, and that can become slow.
The standard fix is a caching plugin. Plugins like WP Super Cache or W3 Total Cache generate static HTML files from your pages and serve those files directly, bypassing PHP and the database entirely for cached pages. For most content sites, caching alone brings Time to First Byte well within acceptable ranges.
Beyond caching:
- Use a CDN. A CDN serves your static assets (CSS, JS, images) from servers close to the visitor. Cloudflare’s free tier is effective.
- Audit your plugins. Each active plugin adds PHP execution time. Deactivate plugins you don’t use. For every plugin you’re evaluating, ask whether it does something that a well-configured existing plugin already handles.
- Check your theme. Heavy page-builder themes load large CSS and JavaScript bundles on every page. A lighter theme with a good base score in Lighthouse gives you headroom for necessary plugins without hitting performance ceilings.
Run a Lighthouse audit against your live site to see where you stand. Core Web Vitals (LCP, CLS, INP) are signals Google factors into rankings.
WordPress SEO and AI citation
WordPress’s server-rendered HTML gives AI crawlers the same advantage it gives Googlebot: full page content on the first request, no JavaScript execution needed. Perplexity, ChatGPT’s browsing mode, and Google’s AI Overviews can all read your content directly.
What determines whether that content gets cited is the same as what determines strong organic rankings: clear, authoritative, well-structured content with proper schema. AI systems tend to pull from pages that answer questions directly. If your posts use FAQ schema, clear H2 headings that match common questions, and factual, specific content, they’re more likely to appear in AI-generated answers.
Thin category archives and slow pages work against you here too. AI crawlers generally don’t retry slow pages, and they won’t cite a page that shows 50 words of real content surrounded by navigation. The quality standards for AI citation are the same as for organic ranking, just applied more brutally.
If you want to track whether your WordPress site is being cited in AI answers, Fokal runs your target queries across ChatGPT, Perplexity, and Google AI Overviews on a schedule and shows you citation rate over time. That’s useful context for understanding which content is actually landing with AI systems versus which is ranking organically but getting skipped by AI crawlers.
For the full picture on AI visibility tracking and what drives it, the pattern holds across every platform, but WordPress’s structural advantage means the gap between well-configured and poorly-configured sites is especially visible.
What to do next
WordPress SEO comes down to three things done consistently: configuration (permalink structure, plugin settings, noindex decisions), on-page fundamentals (titles, meta, alt text, schema), and performance (caching, image optimisation, plugin discipline). The platform gives you every tool you need.
Compared to other CMS platforms, WordPress gives you more control and more room to break things. That’s the trade-off. A well-configured Shopify store has fewer moving parts to get wrong, but also fewer levers to pull. WordPress rewards careful configuration.
Start with what you can audit today:
- Confirm one SEO plugin is active, no duplicates
- Set permalink structure to Post name
- Submit XML sitemap to Google Search Console
- Noindex tag archives, author archives, and date archives
- Check that every published page has a unique title and meta description
- Run a Lighthouse audit and note any Core Web Vitals failures
- Verify a caching plugin is active and serving cached pages
- Confirm images have alt text and are served as WebP where possible
- Review plugin count; deactivate any that aren’t earning their overhead
The broader platform SEO guide covers how these mechanics compare across CMS platforms and modern site builders.