An SEO audit answers one question: what is stopping this site from getting more search traffic, and what should we fix first? It is not a 90-page PDF of warnings. A good audit ends with a short, ordered list of fixes and a reason for each one.
This guide walks through the process we use on client sites, in the order that catches the biggest problems first. The example throughout is Coastline Plumbing, a fictional plumbing company in Austin with a 60-page WordPress site.
Before you start: gather your data
You need three things open before you look at a single page:
- Google Search Console for the site. It shows what Google has indexed, which queries bring clicks and which pages have problems. If it is not set up, set it up now; you will need it for every step below.
- A crawl of the site. A crawler visits every page it can find by following links, just like a search engine, and records titles, status codes, canonicals, page speed and more. RankThat’s Site Audit runs 100+ checks as RankThatBot. For a quick look at one page, the free website SEO checker works too.
- A list of the pages that matter. For Coastline Plumbing that is the homepage, eight service pages (water heaters, drains, leak detection and so on), five area pages and the contact page. Problems on these pages come first.
Write down the business goal as well. “More water heater replacement calls in north Austin” gives the audit a focus. “More traffic” does not.
Step 1: Check that search engines can crawl the site
If Google cannot reach a page, nothing else about that page matters.
- Open robots.txt (yoursite.com/robots.txt). Look for
Disallowlines that block important folders. A leftoverDisallow: /from a staging site blocks everything. The free robots.txt checker tests a URL against the rules. More on the file in our robots.txt glossary entry. - Look at status codes in the crawl. Important pages should return 200. Note every 404, every 5xx server error and every redirect chain (a redirect that leads to another redirect).
- Check for firewall or bot protection blocks. Some security plugins and CDNs block crawlers they do not recognize. If your crawl returns 403 errors on pages that load fine in a browser, that is likely the cause. Allowlist the crawler rather than turning protection off.
- Find orphan pages. These are pages with no internal links pointing to them. Search engines may never find them, and if they do, they treat them as unimportant.
For Coastline Plumbing, the crawl found that the “slab leak repair” page had no internal links at all. It had been published but never added to the menu or linked from any other page.
Step 2: Check what is indexed
Being crawlable is not the same as being indexed. In Search Console, open the Pages report (under Indexing) and look at the reasons pages are not indexed.
The statuses worth attention:
- Excluded by ‘noindex’ tag: check that none of your important pages are on this list. A noindex left on from development is a common and costly mistake.
- Crawled, currently not indexed: Google saw the page and decided not to index it. Usually a sign the content is thin or too similar to another page.
- Duplicate without user-selected canonical: Google found near-identical pages and picked one itself. Add a canonical tag so you choose.
- Not found (404) and Server error (5xx): covered in step 1, but Search Console shows which ones Google cares about.
Then check your XML sitemap. It should list every page you want indexed and nothing else: no redirects, no 404s, no noindexed pages. Submit it in Search Console if you have not.
Our guide on how to fix crawl errors covers each status in more detail.
Step 3: Review titles and meta descriptions
Titles are still one of the clearest signals of what a page is about, and they are what people see in the results.
Look for:
- Missing or duplicate titles. Each page needs its own.
- Titles that do not match the search. “Services | Coastline” tells nobody anything. “Water Heater Repair and Replacement in Austin | Coastline Plumbing” matches what people type.
- Titles that are too long and get cut off. Aim for roughly 50 to 60 characters so the important words show.
- Missing or generic meta descriptions. Google often rewrites them, but a good one still improves clicks when it is used.
The free SERP preview tool shows how a title and description will look in the results. See also our entries on the title tag and meta description.
Step 4: Review content and search intent
Now look at the pages themselves. For each important page, search its main keyword in Google and compare what ranks with what you have.
Ask:
- Does the page match the search intent? If the top results for “water heater replacement cost” are cost guides with price ranges, a sales page with no prices will struggle.
- Is it thin? A 120-word service page rarely outranks competitors with detailed explanations, photos and FAQs.
- Are two pages competing for the same term? This is keyword cannibalization. Coastline Plumbing had a blog post titled “Water heater repair in Austin” and a service page targeting the same phrase. Google kept switching between them, and neither ranked well. The fix was to merge the post into the service page and redirect it.
- Is there proof of experience? Real photos, named staff, licenses, reviews and specific examples help both readers and Google’s view of trust. See E-E-A-T.
- Is content out of date? Old prices, past-year dates and outdated advice are signs of content decay.
Step 5: Check internal links
Internal links tell search engines which pages matter and how they relate. Check:
- Important pages get links from other relevant pages, not only from the menu.
- Anchor text is descriptive (“water heater replacement”) rather than “click here”.
- Links do not point at redirects or broken pages. Each redirect hop wastes crawl time and dilutes the signal.
- Orphan pages from step 1 get links.
RankThat’s Opportunities page suggests internal links between related pages, and the WordPress Bridge can add links to orphan pages for you to review.
Step 6: Check speed and Core Web Vitals
Google uses Core Web Vitals as part of its page experience signals. The three metrics are:
- Largest Contentful Paint (LCP): how quickly the main content loads. Good is 2.5 seconds or less.
- Interaction to Next Paint (INP): how quickly the page responds to taps and clicks. INP replaced First Input Delay in March 2024. Good is 200 milliseconds or less.
- Cumulative Layout Shift (CLS): how much the page jumps around while loading. Good is 0.1 or less.
Search Console’s Core Web Vitals report shows field data from real Chrome users for pages with enough traffic. PageSpeed Insights shows the same for single URLs, plus lab tests.
The usual culprits on small business sites: huge uncompressed images, a hero image that loads late, too many plugins adding scripts, and sliders. Speed rarely beats relevance, but a slow mobile page loses visitors who did find you.
Step 7: Check structured data
Schema markup helps search engines and AI assistants understand the business and the page. Check that:
- The homepage or contact page has Organization or LocalBusiness schema (for Coastline, the more specific
Plumbertype) with name, address, phone, hours and service area. - Product, article, review and other schema is valid and matches what is visible on the page.
- You are not relying on rich results that no longer exist for most sites. Google limits FAQ rich results to well-known government and health sites and stopped showing HowTo rich results in 2023. FAQ schema is not harmful, but it will not get you extra space in the results.
Test with Google’s Rich Results Test, or generate clean JSON-LD with the free schema generator.
Step 8: Check local and AI search readiness
For a local business, the website audit is only half the picture.
- Google Business Profile: correct primary category, hours, phone, website link, photos and recent reviews. See Google Business Profile.
- NAP consistency: business name, address and phone should match on the site and on major directories. See NAP and citations.
- AI crawler access: check that robots.txt and your firewall do not block crawlers such as OAI-SearchBot (ChatGPT search), PerplexityBot or Claude-SearchBot if you want to appear in those answers. The free AI crawler checker does this in one step.
- llms.txt: an optional file that gives AI tools a summary of your site. It is a proposal rather than a standard the major engines have committed to, so treat it as low priority. See llms.txt.
Step 9: Turn findings into an ordered fix list
This is where most audits fail. A list of 300 warnings does not help anyone. Sort every finding by two things: how much it affects the pages that matter, and how hard it is to fix.
A simple order that works:
- Blockers: noindex on important pages, robots.txt blocks, server errors, broken redirects on key pages.
- Quick wins on money pages: titles, meta descriptions, internal links, missing schema on the 15 pages that matter.
- Content problems: thin service pages, cannibalization, outdated content.
- Speed and experience: image compression, LCP image priority, layout shifts.
- Everything else: minor warnings on low-value pages.
For Coastline Plumbing, the final list had 14 items. The first three (linking the orphaned slab leak page, merging the competing water heater pages and fixing a redirect chain on the contact page) took an afternoon.
In RankThat, each audit issue comes with a plain-English “why it matters” and “how to fix”. On WordPress sites, many fixes (titles, redirects, schema, alt text, image compression, internal links) can be drafted by AI and applied through the free WordPress Bridge plugin after you review them. Every change can be undone, and the live page is re-checked afterwards.
How often to audit
- Full audit: when you take on a new site, after a redesign or migration, and once or twice a year after that.
- Ongoing checks: monthly, or weekly on large sites, to catch new 404s, noindex mistakes and speed regressions before they cost traffic.
- After any big change: theme updates, plugin changes, new page templates or a CDN switch.
An audit is only useful if the fixes ship. Keep the list short, fix in order, and re-run the crawl to confirm each fix worked.