What's on my technical SEO checklist for WordPress?
Ten checks, in the order I run them, to copy into your own notes. They're also the first pass in an audit that ties every finding to a page and a number in your own Search Console, but you can run this list yourself.
- i.
Settings
Search engine visibility unticked, permalinks settled, one SEO plugin, one sitemap.
- ii.
One version of the site
http, https, www and non-www all end on one address in a single 301.
- iii.
Robots.txt
No stray Disallow on CSS, JavaScript or whole sections.
- iv.
Indexing
The Page indexing report read status by status, with URL Inspection on a sample from each.
- v.
Redirects and 404s
One hop per redirect, and no internal link pointing at a 404 or a redirect.
- vi.
HTTPS and mobile
No mixed content, and the phone version carries the same content and headings as the desktop one.
- vii.
JavaScript and builders
The main text and links are in the HTML the server sends, not only after scripts run.
- viii.
Duplicates and thin URLs
Tag, date, author, attachment and -2 pages checked against what earns clicks.
- ix.
Core Web Vitals and schema
Field data by template, and one clean structured data graph per page.
- x.
AI crawlers
Robots.txt and the CDN let the crawlers you want in, on purpose.
Which WordPress settings do I check first?
I start where a single tick box can undo everything else. If you're asking how to set up SEO on WordPress, this layer decides whether the rest counts.
- i.
Search engine visibility is off
Settings, then Reading, has a box called Discourage search engines from indexing this site. Since WordPress 5.3 a ticked box prints a noindex, nofollow tag on every page, and it often survives from staging.
- ii.
Permalinks are settled before publishing
Depending on the server, a new install comes up on Plain permalinks, the
?p=123kind, or on Day and name. On a new site I switch to Post name before anything's published. On a live site I won't touch it without a redirect map. - iii.
One SEO plugin, not two
Yoast, Rank Math, AIOSEO and SEOPress each write titles, canonicals, a sitemap and schema. Two at once usually means two canonical tags or two schema graphs, so I move the settings across and switch the spare off.
- iv.
One sitemap, with only real pages in it
WordPress has shipped its own sitemap at
/wp-sitemap.xmlsince 5.5, and plugins like Yoast replace it with their own. I check which one's live, that it's the one in Search Console, and that it lists only real pages. Smaller files are easier to read: Scrap a Vehicle's sitemap index splits its location pages into files of 50 URLs each. - v.
One version of the site answers
Google lists HTTP and HTTPS versions among the usual sources of duplicate pages, and www against non-www splits a site the same way. Three of the four homepage versions should 301 in one hop to the fourth.
- vi.
Robots.txt isn't doing noindex's job
Google says robots.txt isn't a way to keep a page out of its results, and a blocked page can't show Google its noindex tag either. So pages that should stay out get noindex, not a Disallow.
Check these in the page source, not on the plugin's settings screen. The settings show what's supposed to happen. The source shows what Google actually gets.
How do I check crawlability and indexing?
Search Console's Page indexing report comes first, because it's Google's own account of what it crawled and kept. Google's help page says not to expect every URL to be indexed; the goal is the canonical version of every important page. I read the excluded groups one status at a time and run URL Inspection on a handful from each. It shows what Google fetched, the canonical it picked and whether indexing was allowed.
| Status | Usual WordPress cause | What I check first |
|---|---|---|
| URL marked 'noindex' | An SEO plugin setting on a post type or taxonomy, or the visibility box left ticked | Whether any excluded page is one you'd want found |
| URL blocked by robots.txt | A Disallow line carried over from staging, or added by a security plugin | Which rule matches, and whether that URL should be crawled at all |
| Duplicate, Google chose different canonical than user | Two addresses for one page, or a canonical tag pointing somewhere odd | Which URL Google picked, and what made it disagree |
| Crawled, currently not indexed | Thin tag and archive pages, or pages Google doesn't think are worth keeping | Whether the page adds anything a stronger page doesn't |
Then I crawl the site with a desktop crawler rendering JavaScript and compare with the sitemap. Sitemap pages the crawl can't reach are orphans, and crawled pages missing from the sitemap either belong in it or shouldn't exist. Orphans and deeply buried pages are a linking problem, and when there are many, you can have me rebuild your internal links around the pages that earn. Or run an internal link audit first.
Rather have me do this? One person, whole job.
Book a call on UpworkHow do I check redirects, 404s, HTTPS and mobile rendering?
On the live pages, with a crawler and a phone. Google's crawlers follow up to 10 redirect hops, but I want each old URL to reach its page in one. A deleted page answering 404 is fine. An internal link pointing at a 404 or a redirect isn't, and those get repointed in the content.
For HTTPS I look for mixed content: images, scripts or fonts still called over http on an https page. web.dev notes that most browsers now block mixed content, so a hardcoded http path in a theme can quietly break a page.
Mobile comes next because Google says it uses the mobile version of a site's content, crawled with the smartphone agent, for indexing and ranking. The phone version needs the same content and headings as the desktop one. Page builders are where this slips, with sections hidden on mobile or text that only appears after a script runs. Google's JavaScript guide says server-side rendering is still a great idea, partly because not all bots can run JavaScript, so I compare the raw HTML with the rendered page for any template built that way.
How do I find duplicate and thin URLs?
WordPress makes extra URLs without asking. Tag archives, author archives on a one-author blog, date archives and paginated archives all create addresses that repeat content living somewhere else. Hundreds of thin ones are a problem. Attachment pages are the classic case: WordPress 6.4 switched them off for new installs, but upgraded sites keep them.
Then there's duplication nobody set. Scrap a Vehicle has a second Edinburgh page, /scrap-my-car-edinburgh-2/, which usually means the town was generated twice, so I search for -2 slugs on any site built in bulk.
Google treats redirects and canonical tags as strong signals and sitemaps as weak ones. So a true copy gets a 301 to the original, a variant that has to stay gets a canonical, and archive types nobody lands on get noindex through the SEO plugin rather than a robots.txt block, which is one more reason choosing an SEO plugin matters.
Don't noindex every tag and category archive in one sweep before you've checked Search Console. On some sites a category page is the one earning the clicks, and the bulk setting quietly takes it out.
How do I check Core Web Vitals on WordPress?
After indexing, not before. A fast page Google isn't indexing earns nothing. I read field data, not a single lab run: the Core Web Vitals report in Search Console groups URLs that behave alike, which on WordPress usually lines up with templates. Google's targets are a Largest Contentful Paint (LCP) within 2.5 seconds, an Interaction to Next Paint (INP) of 200 milliseconds or less and a Cumulative Layout Shift (CLS) of 0.1 or less, measured at the 75th percentile of page loads. A template that fails on a slow Largest Contentful Paint gets its own fix. A green Lighthouse score on one test isn't the same thing.
How do I check structured data on WordPress?
The WordPress question is who's printing it. The SEO plugin prints a graph, and a theme, a reviews plugin or WooCommerce can print their own. Stores get more of this in the WooCommerce version of this checklist. I run one page per template through the Rich Results Test and look for two copies of the same type, markup describing content the page doesn't show, and errors on types that can earn a rich result. Google says it doesn't guarantee rich results even when the markup's correct, and not to mark up content hidden from readers, so valid markup that matches the page is the goal.
Can AI crawlers and answer engines read the site?
For Google, the checklist above is the answer. Google's guide to AI features says a page only has to be indexed and eligible for a snippet to appear as a link in AI Overviews or AI Mode, with no extra files or special markup. Its best practices include allowing crawling in robots.txt and at the CDN or host, and keeping important content in text. Google also says its Google-Extended token doesn't affect inclusion in Search.
Other engines use their own crawlers. OpenAI's crawler documentation says sites opted out of OAI-SearchBot won't show in ChatGPT search answers, while GPTBot is the separate token for model training, and each can be allowed or blocked on its own. So I read robots.txt and the CDN's bot settings for rules nobody chose on purpose.
How do I rank what a technical SEO checklist turns up?
Most tools sort findings by severity labels that don't know your traffic. I sort them by clicks at stake.
- Step 01
Take a Search Console baseline
I export the Performance report by page, as far back as it goes, and note the date range.
- Step 02
Tie each finding to its pages
A noindex on a product category, a canonical pointing the wrong way on six posts: every item gets its own list of URLs.
- Step 03
Weigh the clicks and impressions at stake
Faults on the pages that earn most clicks, or sit on page one or two with weak click rates, go to the top.
- Step 04
Settings faults jump the queue
A ticked visibility box or a sitewide robots.txt block touches every page, so it goes first whatever the numbers say.
- Step 05
Cosmetic warnings go last
A missing meta description on a tag archive won't move anything, so it stays only if the fix costs nothing.
- Step 06
Recheck after each fix
URL Inspection the same day, then the same report a few weeks later against the baseline. I don't promise a date for Google to catch up, because nobody can.
For a small site that passes the settings layer cleanly, this list and a free afternoon go a long way. It stops being an afternoon job when clicks dropped and the list doesn't show why, or the excluded list runs to thousands of URLs. My audit runs remotely on your URL and read-only Search Console access, with every finding ranked by clicks at stake.
Deep audit and growth report: US$149 one off, on Upwork. An honest read on what's holding your WordPress site back in Google.
It comes with a Loom walkthrough of what I found, and the fix list is yours to keep whoever does the work.

