WordPress SEO Checklist

An ordered, plugin-neutral WordPress SEO checklist — permalinks, Yoast/Rank Math/SEOPress setup, sitemap, robots.txt, archive noindex, images, caching, redirects, schema, and a before-you-launch gate.

First published: Jul 2, 2026 · Last updated: Jul 25, 2026 · Advanced
demand #4 in CMS#24 in Platform SEO#153 in Technical SEO#207 on the site
1 evidence signal on this page

This is the ordered task list for setting up SEO on a WordPress site — the what-to-click layer, with the why living in the WordPress SEO deep dive it links to. Set permalinks to /%postname%/ before you publish. Run exactly one SEO plugin (Yoast, Rank Math, or SEOPress) and finish its wizard. Confirm the sitemap is live and submit it in Google Search Console and Bing Webmaster Tools. Edit robots.txt through the plugin — never Disallow pages you want deindexed, because Google can't read a noindex it isn't allowed to crawl. Noindex date and thin tag archives; treat category archives as a judgment call. Compress and alt-text images. Check whether your host already caches before stacking a caching plugin. Install a redirect manager before you need it. Validate schema in the Rich Results Test. Then walk the before-you-launch gate.

TL;DR — This is the execution artifact, not the explainer — the ordered task list, with the “why” routed to the WordPress SEOWordPress SEO is the process of configuring, optimizing, and maintaining a WordPress site so search engines can efficiently crawl, index, and rank it. WordPress gives you a solid foundation, but its defaults — ?p=123 permalinks, attachment pages, thin archives — need cleanup before a site is actually well-optimized. deep dive. Set /%postname%/ before publishing. Run exactly one of Yoast / Rank Math / SEOPress and finish its wizard; kill any theme-level SEO tags too. Confirm the sitemapA sitemap is a file that lists the pages, images, videos, and other files on your site so search engines can discover them. It helps discovery, but submitting a sitemap doesn't guarantee crawling or indexing. is live, contains only indexable URLs, and is submitted in Google Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results. and Bing Webmaster ToolsThe free, first-party consoles search engines give site owners — Google Search Console and Bing Webmaster Tools — to see how their pages are crawled, indexed, and ranked, and to fix problems. The legacy name is 'webmaster tools.' (add IndexNowIndexNow is an open push protocol that lets you instantly tell participating search engines (Bing, Yandex, Naver, Seznam, and Yep) which URLs you've added, changed, or removed via a simple HTTP request — and one submission is shared across all of them. Google does not use it. if you publish often). Edit robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. through the plugin: add a Sitemap: line, never Disallow /wp-content/, and never Disallow a page you want deindexed — a disallowed page’s noindex is never read. NoindexNoindex is a directive that tells search engines to keep a page out of their index, so it won't appear in search results. It works only on pages a crawler can actually fetch — a page blocked in robots.txt can never be noindexed. date and thin tag archives; category archives are a judgment call, and whatever you noindexNoindex is a directive that tells search engines to keep a page out of their index, so it won't appear in search results. It works only on pages a crawler can actually fetch — a page blocked in robots.txt can never be noindexed. must stay crawlable. Compress and alt-text images. Check for host-level cachingCaching stores a copy of a page or resource — in a browser, a CDN edge node, or a search crawler's own cache — so it can be served again without regenerating or re-downloading it. It isn't a direct ranking factor, but it feeds page speed and crawl efficiency. before stacking a plugin. Install a redirectA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't. manager before the permalink change needs one. Confirm JSON-LDJSON-LD (JavaScript Object Notation for Linked Data) is a script-based structured data format, typically paired with the schema.org vocabulary to describe page content for search engines and AI systems. Google recommends it over Microdata and RDFa because it's the easiest format to implement and maintain at scale — but all three work, and structured data isn't a ranking signal. output and validate it in the Rich Results Test. Then walk the before-you-launch gate.

Evidence for this claim WordPress's Discourage search engines setting asks search engines not to index the site but does not block access to the site. Scope: WordPress core setting; search engines decide whether to honor the request. Confidence: high · Verified: WordPress.org: Settings Reading Screen Evidence for this claim WordPress core exposes an XML sitemap index for public content on supported installations. Scope: WordPress core sitemap behavior; plugins may alter or replace it. Confidence: high · Verified: WordPress Developer Blog: XML sitemaps

New build or existing-site audit?

  • New build: work top to bottom — the order is roughly the order you’d actually do the work.
  • Existing site: treat this as a triage list. Jump to permalinks, the single-plugin check, and the archive-indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. decision first — those are where unmanaged WordPress sites break most often.

Everything below is the “what to click / what to confirm” layer. The reasoning — WordPress’s self-canonicalizationHow search engines pick one canonical URL among duplicates and consolidate signals onto it., the core-vs-plugin sitemapA sitemap is a file that lists the pages, images, videos, and other files on your site so search engines can discover them. It helps discovery, but submitting a sitemap doesn't guarantee crawling or indexing. tradeoffs, the wp_head() conflict behind the one-plugin rule — already lives in my full WordPress SEO article, and each section here links back rather than re-deriving it.

  • Settings → Permalinks → Post name (/%postname%/).
  • Do this before publishing. WordPress auto-redirects standard posts when you change the permalink structure, but custom post types and pages may not — verify.
  • Don’t bake the category into the permalink (/%category%/%postname%/) unless you have a deliberate reason; it creates fragile, deeply nested URLs.
  • If you’re changing structure on an established site, map the old→new URLs with 301s (see the redirects section below) before flipping the switch.

2. SEO plugin setup (Yoast / Rank Math / SEOPress)

Do the same core steps regardless of plugin, then use the menu-path table.

  • Install exactly one SEO plugin and run its setup wizard.
  • Confirm Settings → Reading → “Discourage search engines from indexing this site” is unchecked.
  • Set the homepage title and meta descriptionThe meta description is an HTML head tag — `<meta name=\"description\" content=\"…\">` — that suggests a short summary of the page for the search snippet. It's not a Google ranking factor, and Google rewrites it the majority of the time, but a good one can still lift click-through. template; set a default Open GraphOpen Graph (OG) tags are `<meta>` elements in a page's head, defined by the Open Graph protocol (ogp.me, created by Facebook), that describe a page as a shareable object — its title, description, image, URL, and type. They control how a link preview card looks when the page is shared on Facebook, LinkedIn, Slack, Discord, WhatsApp, and iMessage. They are not a direct Google ranking factor, though Google reads og:title, og:image, and og:site_name as inputs to how a result appears. social image.
  • Connect Google Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results. (and Bing Webmaster ToolsMicrosoft's free portal for monitoring and improving how a site appears in Bing search — the peer to Google Search Console, plus IndexNow instant indexing, richer backlink data, and keyword volumes. Because Bing's index also feeds Microsoft Copilot, it doubles as a window into AI-search visibility. where the plugin supports it). Google’s official Site Kit plugin is a clean way to wire up GSC
    • Analytics if you prefer.
  • Confirm only one SEO source is active — check that your theme (Genesis, Thesis, some page builders) isn’t also emitting its own title/meta/schema, and disable that if so.
TaskYoast SEORank MathSEOPress
First-run setupSEO → General (wizard)Rank Math → Setup WizardSEOPress → Setup Wizard
Titles / meta templatesSEO → Search AppearanceRank Math → Titles & MetaSEOPress → Titles & Metas
Per-taxonomy noindexSEO → Search Appearance → TaxonomiesRank Math → Titles & Meta → per-taxonomySEOPress → Titles & Metas → per-taxonomy
GSC / integrationsSEO → IntegrationsRank Math → General SettingsSEOPress → Advanced
Sitemap path/sitemap_index.xml/sitemap_index.xml/sitemap.xml

(Plugin UIs shift between versions — confirm the exact menu label in your install.)

3. XML sitemap configuration

  • Confirm the plugin’s sitemap is enabled and reachable at its URL (paths in the table above).
  • Exclude noindexed post types and taxonomies from the sitemap — don’t list what you’re telling Google not to index.
  • Submit the sitemap manually in Google Search ConsoleGoogle's free tool for monitoring crawling, indexing, and search performance. and Bing Webmaster Tools. WordPress and the plugins do not auto-submit.
  • If you rely on WordPress core’s /wp-sitemap.xml instead of a plugin, know its limits (all public taxonomies/authors, no image sitemapAn image sitemap is a sitemap (or an extension added to an existing sitemap) that lists the images on your pages using Google's image namespace, helping Google discover images it might otherwise miss., 2,000-URL cap per file) — the full explanation is in the WordPress SEO article.
  • Note: Google ignores <priority> and <changefreq> — the plugin’s priority/frequency toggles do nothing for crawl behavior, so don’t fuss over them.

4. robots.txt configuration

  • Edit the virtual robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. from the plugin dashboard (Yoast and Rank Math both allow this without FTP). Self-hosted WordPress can serve a real robots.txt — you’re not locked like a hosted CMSA content management system (CMS) is software that lets users create, manage, and publish digital content — like blog posts and pages — without writing raw code. WordPress, Drupal, and Joomla are the most common open-source CMS platforms..
  • Add a Sitemap: line pointing to your sitemap (many plugins do this automatically once the sitemap module is on — verify).
  • Do NOT Disallow /wp-content/ — it blocks CSS/JS/images and breaks renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM..
  • Do NOT Disallow pages you want deindexed. Use the noindex meta tag instead. A disallowed page’s noindex is never seen (see Quotes) — Google may even index a blocked URL with no snippet.
  • Reasonable Disallow candidates: /wp-admin/ (WordPress adds this by default) and internal-search query variants (?s=) if not otherwise handled.

5. Category, tag, and archive indexing decisions

Set these per-taxonomy in your plugin’s title/meta section. The guiding rule: index what functions as a real landing page, noindex what’s thin — and keep noindexed pages crawlable.

  • Tag archives: usually noindex — thin, and they overlap your categories.
  • Date archives: noindex almost always — nobody searches by publish month; Yoast noindexes these by default.
  • Author archives: noindex on single-author sites; keep indexed only on genuine multi-author publications where the author page adds value.
  • Category archives: judgment call, not a blanket rule — index a curated category page with real intro copy and meaningful post volume; noindex a bare list of post titles.
  • Whatever you noindex, do not also Disallow it in robots.txt — this is the single most-missed nuance in generic checklists.
  • Don’t belt-and-suspenders a noindex and a canonical to another page on the same archive — pick one signal (see Quotes).

6. Image alt text and compression

  • Descriptive alt textAlt text is the value of the `alt` attribute on an HTML `<img>` element — a short text substitute chosen for the image's purpose and context, not a literal description of what it shows. It makes images accessible to screen-reader users and helps search engines understand images, mainly for image search. on every content image — describe the image, don’t keyword-stuff. Depth lives in the alt-text article; don’t re-derive it here.
  • Compress/resize before upload — WordPress won’t optimize on upload without a plugin. Common choices: ShortPixel, Smush, Imagify, EWWW.
  • Descriptive filenames before upload (black-labrador-puppy.jpg, not IMG_4021.jpg) — renaming after upload doesn’t change the live file/URL.
  • Serve modern formats (WebP/AVIF) via plugin or host support.

7. Caching and CDN setup

  • Check host-level caching first. Many managed WordPress hosts (WP Engine, Kinsta, Pressable) cache at the server — stacking a caching plugin can conflict or add nothing.
  • If you’re self-managing: WP Rocket (paid, easiest), LiteSpeed Cache (free, best on LiteSpeed hosting), W3 Total Cache (free, most configurable), WP Super Cache (free, simplest).
  • Add a CDN — many caching plugins bundle or partner with one; Cloudflare is a common standalone option.
  • Clear the cache after any SEO-plugin config change, then spot-check the cached HTML shows the correct title/meta/canonical — caching before the SEO plugin’s hooks fire can serve stale metadata. This ties straight into your Core Web VitalsGoogle's three real-user UX metrics — LCP (loading), INP (responsiveness), and CLS (visual stability) — used by Google's ranking systems, with no official weight attached, measured on field data. work.
  • Install a redirect manager before you need it. Rank Math and AIOSEO bundle one free; Yoast’s is a paid add-on; or use the standalone Redirection plugin. Set 301s for any URL-structure change — including the permalink change in step 1.
  • Broken-link checking: AIOSEO’s Broken Link Checker or the standalone Broken Link Checker plugin — scans internal/external links and flags 404s.
  • Prefer a redirect/broken-link tool that reads Search Console’s 404 data so you catch the 404s Google actually found, not only what a local scan surfaces.

9. Schema / structured data output

  • Confirm the SEO plugin outputs JSON-LDJSON-LD (JavaScript Object Notation for Linked Data) is a script-based structured data format, typically paired with the schema.org vocabulary to describe page content for search engines and AI systems. Google recommends it over Microdata and RDFa because it's the easiest format to implement and maintain at scale — but all three work, and structured data isn't a ranking signal. (not legacy microdata). Yoast and Rank Math auto-add Organization/Person, WebSite, WebPage, Article, and BreadcrumbList.
  • Add specific types where they fit the content: FAQ, HowTo, Review / AggregateRating.
  • WooCommerce: core WooCommerce does not output Product JSON-LD — you need Yoast WooCommerce SEOWooCommerce SEO is optimizing a WooCommerce store — which runs as a free plugin on WordPress, not as a standalone platform — to rank in organic search. Because you control the whole stack (templates, URLs, plugins, server), the ceiling is high and the ways to misconfigure it are many. (paid) or Rank Math Pro for full Product schemaProduct schema (schema.org/Product) is structured data that tells search engines a page's product name, price, availability, and reviews so it can appear in Shopping-style rich results. It's separate from a Google Merchant Center feed, though Google reconciles the two. (price, availability, reviews).
  • Validate with Google’s Rich ResultsRich results (formerly 'rich snippets') are enhanced search listings — stars, images, prices, breadcrumbs, video thumbnails, and more — that Google and Bing build from structured data. They're a display feature, not a ranking factor, and eligibility never guarantees they'll show. Test — plugin defaults aren’t guaranteed error-free against your specific theme. Bing reads JSON-LD too, so the same output benefits both.

10. Before you launch — final gate

A distinct pre-launch pass, separate from ongoing maintenance:

  • Settings → Reading → “Discourage search engines” is UNCHECKED.
  • Permalink structure finalized (/%postname%/) before real URLs get indexed.
  • Exactly one SEO plugin active and fully configured.
  • XML sitemap live, reachable, contains only indexable URLs.
  • robots.txt reviewed — no /wp-content/ block, no Disallow standing in for a noindex.
  • SSL/HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.' active site-wide, no mixed-content warnings.
  • Caching/CDN configured and cache cleared after the last config change.
  • Core Web VitalsWeb Vitals is Google's initiative (launched May 2020) for unified page-experience quality signals. Core Web Vitals — LCP, INP, and CLS — are the subset used in ranking; the rest (TTFB, FCP, TBT, Speed Index) are diagnostic, not ranking factors. spot-checked (PageSpeed InsightsPageSpeed Insights (PSI) is a free Google tool at pagespeed.web.dev that reports two kinds of data for a URL: real-user field data from the Chrome UX Report and a single Lighthouse lab run with the 0–100 Performance score. Only the field Core Web Vitals are what Google uses for ranking. / Search Console) on the home page, a post, and a key landing page.
  • Redirect plugin installed; staging→production and any migration URLs mapped with 301s.
  • Schema validated via Rich Results Test on a representative page.
  • Google Search Console and Bing Webmaster Tools verified; sitemap submitted in both.
  • Analytics / Site Kit connected.
TIP Run the launch checklist as a scoped crawl

This raw-HTML pass catches repeatable template basics and states what it did not evaluate. WordPress plugin settings, rendered JavaScript, and Search Console still need separate checks.

Crawl the site before launch with my free Scout Site Audit Free Free

  1. Crawl the launch candidate and note discovered versus crawled coverage.
  2. Group recurring title, canonical, indexability, and metadata findings by template.
  3. Fix the source template, rerun the crawl, then verify important URLs in Search Console.
The useful baseline includes coverage and blind spots, not only a score.

The sample has an 82 out of 100 raw-HTML score, crawled 24 of 31 discovered URLs, reports two missing-title warnings, and says rendered JavaScript and AI checks were not evaluated.

A note on Bing and IndexNow

There’s no Bing-specific “WordPress checklist” — the same technical items apply, you just also submit to Bing Webmaster Tools. If you publish or update frequently, add the IndexNowIndexNow is an open push protocol that lets you instantly tell participating search engines (Bing, Yandex, Naver, Seznam, and Yep) which URLs you've added, changed, or removed via a simple HTTP request — and one submission is shared across all of them. Google does not use it. plugin: it hosts the required API key at your site root and pings Bing (and Yandex, Seznam) on new/changed/deleted URLs for faster discovery, separate from the standard sitemap submission.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.