Key takeaways
- This checklist comes from a real audit. In October 2026 we rebuilt seoaudit.software and moved it to a new server, then audited it with Google Search Console, PageSpeed Insights and a crawl of all 62 sitemap URLs. Every number below comes from that audit.
- The biggest problems were not on the pages themselves. A sitemap listed redirected URLs, 17 old URLs returned 404 in Search Console, and 840 ms of main-thread blocking came from old tracking tags.
- Go through it in this order: crawling and indexing, on-page, speed and Core Web Vitals, structured data, content and E-E-A-T, then monitoring. A fix in the first group can make the others matter or not.
- The page you are reading was in Google’s “Crawled – currently not indexed” list. That is why we rewrote it.
Most SEO audit checklists are lists of things you could check. This one is a list of things we did check on our own website, together with what we found and what we changed. We are an SEO audit software company, so our site should be in good shape. It still had problems, and some of them only showed up because we followed a fixed order instead of checking whatever came to mind first.
Use it as a template for your own site or a client’s. Each part gives the check, the reason it matters, how to run it with free tools, and our result.
The site we audited
seoaudit.software is a WordPress site with product pages, comparison pages, a blog and a help section. In October 2026 we replaced the old theme and moved the site to a new server. We ran the audit before and right after the switch. This was the starting point:
| Metric | Value | Source |
|---|---|---|
| URLs in the XML sitemaps | 62 | Yoast sitemap index, our crawl |
| Clicks, last 90 days | 492 | Google Search Console |
| Impressions, last 90 days | 917,000 | Google Search Console |
| Average CTR | 0.1% | Google Search Console |
| Average position | 26.3 | Google Search Console |
| Indexed / not indexed pages | 45 / 42 | Search Console, Page indexing report |
| Mobile Performance score (home) | 72 | PageSpeed Insights |
An average position of 26.3 with 917,000 impressions means Google shows the site a lot, mostly on pages 2 and 3, where almost nobody clicks. The audit had to answer one question: what keeps good pages from reaching page 1?
Part 1: Crawling and indexing
If Google cannot crawl a page or decides not to index it, nothing else on the page matters. Start here.
1. robots.txt allows the pages you want indexed
Check: open yoursite.com/robots.txt. Make sure no Disallow rule covers important folders, and that the file lists your sitemap.
Our result: passed. It blocks only /wp-admin/ and two old folders, allows admin-ajax.php and points to the sitemap index.
2. The XML sitemap lists only live, indexable, canonical URLs
Check: request every URL in the sitemap and look at the status code. A sitemap should contain only URLs that return 200, are not noindex and are their own canonical. Anything else sends Google mixed signals.
Our result: failed. A sitemap left over from an old help-desk plugin listed 4 FAQ category URLs. 3 of them redirected (301) to other pages and the fourth was a thin archive. After a settings change, another sitemap appeared with 17 FAQ articles, 6 of which redirect. We removed the category sitemap and added a filter that keeps any redirected URL out of the sitemaps. Every sitemap URL now returns 200.
3. The sitemap submitted in Search Console is the current one
Check: Search Console → Sitemaps. Compare the submitted URL with the sitemap your site actually generates today.
Our result: failed. The only submitted sitemap was /sitemap.xml, added in February 2022. It now redirects to /sitemap_index.xml. Google can follow the redirect, but submitting the real index gives you per-sitemap indexing numbers.
4. Old URLs from the “Not found (404)” report redirect to the right page
Check: Search Console → Pages → Not found (404). Open each URL. A URL with links or traffic should redirect (301) to the closest matching page, not to the home page.
Our result: 17 URLs were listed: old language folders (/es/, /fr/, /de/, /ru/, /it/, /pt/), retired help articles, a renamed comparison page and an old video file. We mapped every one to a 301. Help articles about lead forms, for example, now go to the lead generation page.
5. Pages marked “Crawled – currently not indexed” are reviewed
Check: Search Console → Pages → Crawled – currently not indexed. Google fetched these pages and chose not to index them. That usually points to thin, outdated or duplicate content, not a technical block.
Our result: 6 URLs were listed. They included two category archives, a 2021 news post and this article. The old version was a year-by-year history of audit checklists from 2010 to 2022. In 16 months it earned 4,940 impressions and 2 clicks, at an average position of 38.1. Its queries show what searchers wanted:
| Query | Impressions | Avg. position |
|---|---|---|
| seo audit checklist 2020 | 1,758 | 43.8 |
| seo audit checklist 2018 | 469 | 29.6 |
| seo audit checklist pdf | 368 | 81.4 |
| seo audit checklist 2017 | 334 | 23.7 |
| website audit checklist 2022 | 241 | 28.7 |
People search for the current year’s checklist. A page about the past answered the wrong question, so we replaced it with a current checklist built on first-hand data.
6. Thin archive pages are noindexed
Check: look at tag pages, author pages and categories with one or two posts. If they only repeat post lists, set them to noindex (follow) so Google spends its time on real content.
Our result: we set 4 tag pages, the author archive and 2 one-post categories to noindex. The two categories with real depth, SEO audit and Reports, stay indexed and now have their own meta descriptions.
7. HTTP and www versions redirect to one URL in one step
Check: open http://, http://www. and https://www. versions of your home page and an inner page. Each should reach the final HTTPS URL with a single 301.
Our result: passed after launch. www and http both go to https://seoaudit.software/ in one hop.
8. Every indexable page has a self-referencing canonical
Check: view the source of a sample of pages and confirm <link rel="canonical"> points to the page itself.
Our result: passed on all 62 sitemap URLs.
Part 2: On-page basics
9. One H1 per page
Check: count <h1> tags. One clear H1 that matches the page topic is the norm.
Our result: all 62 pages passed.
10. Unique titles of a sensible length
Check: list every title and look for duplicates and titles that are cut off in results. Roughly 50–60 characters works for most queries.
Our result: no duplicates. Two titles were shorter than 25 characters (“SEO Audit Software FAQs” and “Free SEO Analysis Report”). They are on our list for the title rewrite.
11. Every indexable page has a meta description
Check: find pages without one. Google often rewrites descriptions, but a missing one leaves the snippet to chance.
Our result: 15 URLs had none: the blog index, FAQs, version history, privacy policy, terms, 4 categories, 4 tags and the author page. We wrote descriptions from each page’s own text for the 7 that stay indexed.
12. Rankings and click-through rate agree
Check: in Search Console → Performance, sort queries by impressions and compare position with CTR. A page in the top 5 with almost no clicks has a snippet problem, not a ranking problem.
Our result: this was the most useful finding in the whole audit. Our main query, “seo audit software”, averaged position 3.5 with 9,328 impressions and only 19 clicks. “seo auditing software” (position 4.8, 3,350 impressions) and “seo audit report software” (position 5.2, 1,965 impressions) had no clicks at all. Rewriting those titles and descriptions is worth more than any new backlink.
13. Images have useful alt text
Check: crawl the <img> tags and list empty or missing alt attributes.
Our result: the home page missed alt text on 1 of 24 images. The FAQ page missed it on 20 of 65.
The image analysis in an on-page SEO audit lists every image with its alt text, so missing ones are easy to find.
Part 3: Speed and Core Web Vitals
Google’s Core Web Vitals count as “good” when the 75th percentile of real visits has a Largest Contentful Paint of 2.5 seconds or less, an Interaction to Next Paint of 200 milliseconds or less and a Cumulative Layout Shift of 0.1 or less. Search Console’s Core Web Vitals report shows this field data once a site has enough Chrome traffic. Ours did not (“Not enough usage data in the last 90 days”), so we used PageSpeed Insights lab data:
| Metric (mobile, home page) | Result | Status |
|---|---|---|
| Performance score | 72 | Needs work |
| First Contentful Paint | 2.7 s | Needs work |
| Largest Contentful Paint | 2.7 s | Just over 2.5 s |
| Total Blocking Time | 840 ms | Poor (lab target is under 200 ms) |
| Cumulative Layout Shift | 0.007 | Good |
| SEO score | 100 | Good |
14. Server response time is fast
Check: measure time to first byte at the server and through your CDN.
Our result: passed. WordPress answered in about 40 ms on the server. Pages are 28–124 KB of HTML, compressed with Brotli. The slow parts were somewhere else.
15. No render-blocking third-party CSS
Check: in PageSpeed Insights, open “Render-blocking requests”.
Our result: failed, with an estimated 1,030 ms of savings. The main item was the Google Fonts stylesheet. We now host the font ourselves (two WOFF2 files of 30 KB and 15 KB) and preload it, which removes a request to a third-party server before the first paint.
16. Third-party tags are still needed and loaded late
Check: list every script your tag manager loads and ask whether each one is still used.
Our result: almost all of the 840 ms of blocking time came from tags in Google Tag Manager, not from the site’s own code (36 KB of CSS and 5 KB of JavaScript):
- A Universal Analytics tag. Google stopped processing data in standard Universal Analytics properties in July 2023, so this script loads for nothing.
- A Google Optimize tag. Google shut Optimize down in September 2023.
- A Reddit pixel with an empty ID. It requests a config file for a pixel called “undefined” and logs a console error.
- The Facebook Pixel, about 830 KB of JavaScript after decompression, firing on every page view.
The next step is to pause the dead tags and fire the Facebook Pixel after the page has loaded. This is a tag manager change, so no code release is needed. Audit your tag manager every time you audit the site. Tags pile up for years and nobody removes them.
17. Every image has width and height
Check: crawl <img> tags without width and height attributes. Without them the browser cannot reserve space, and the layout jumps while images load.
Our result: failed on more than 200 images: 21 of 24 on the home page, 58 of 65 on the FAQ page and 50 of 56 in one long blog post. We now fill in the real size of every local image automatically when the page is built.
18. Static files have a long browser cache
Check: look at the Cache-Control header of your CSS, JavaScript, images and fonts.
Our result: failed. Theme files were cached for only 4 hours (max-age=14400). Because every file URL carries a version number, we raised this to one year (max-age=31536000, immutable). Returning visitors now load these files from their own browser.
19. Old page builders and libraries are gone
Check: view the source of your simplest pages, such as contact, privacy and terms. These are often left on an old template.
Our result: five simple pages still loaded Bootstrap, jQuery, a carousel script and five old stylesheets just to show text and a form. We are rebuilding them in the new design.
Part 4: Structured data
20. Schema matches what the page shows
Check: run important pages through Google’s Rich Results Test. Look for errors and for markup that describes content the page doesn’t show.
Our result: product pages carry FAQ markup for questions that appear on the page, and the home page carries SoftwareApplication markup.
21. Theme-level code survives a redesign or migration
Check: before launch, compare the old and new <head> and the end of <body> for analytics, tag manager, site verification tags, hand-written JSON-LD and chat widgets.
Our result: this is the mistake we made. Our pre-launch checks compared every page’s text, links and schema, but not the theme’s header and footer. The new site went live without the tag manager container, a site verification tag, the home page’s SoftwareApplication schema and the chat widget. We noticed after about 40 minutes and restored them, but those 40 minutes of analytics are gone. This check is now on our launch list.
Part 5: Content and E-E-A-T
Google’s guidance on helpful content asks whether a page shows first-hand experience, real expertise, and a clear author and source. You can’t add that with a plugin, but you can check for it.
22. Each page answers today’s question
Check: compare the queries a page gets in Search Console with what the page says. Year-stamped queries (“2026”) tell you searchers want current information.
Our result: this article failed this check, as described in check 5.
23. Claims are backed by data you collected
Check: does the page contain numbers, screenshots or results that only you could have? Generic advice is easy to replace. Original data is not.
Our result: every number in this article comes from our own Search Console account, PageSpeed Insights runs or crawl in October 2026.
24. A real, named author with relevant experience
Check: every article should show who wrote it and why they are qualified, with an author page or bio.
Our result: our articles show the author box below. Maqsood Rahman founded SEO Audit Software and has worked in digital marketing for 17 years.
25. Dates are honest and visible
Check: show the published or updated date, and change it only when the content really changes.
26. No thin or duplicate pages compete with your main pages
Check: look for pages that target the same query. On our site, a blog post about agency rank tracking covers the same topic as the keyword tracker product page. The post should link to the product page with that anchor text, so Google knows which page is the main one.
Part 6: Monitoring
27. A baseline is saved before any change
Check: export clicks, impressions, CTR and position per page before you change anything, so you can prove what worked. Our baseline is the table at the top of this article.
28. Search Console is checked weekly after a big change
Check: for the first weeks after a migration or redesign, review Pages, Sitemaps and Performance every week. New 404s and “Page with redirect” entries appear as Google recrawls.
29. Lab speed tests are repeated after each fix
Check: re-run PageSpeed Insights on the same pages after each change, so you know which fix moved which metric.
30. Fixed URLs are sent for validation
Check: after fixing an issue type in the Page indexing report, click “Validate fix” so Google rechecks those URLs sooner.
What to fix first
We ranked our findings by impact and effort. Start with the top rows:
| Finding | Scope | Impact | Effort | Status |
|---|---|---|---|---|
| Top-5 rankings with almost no clicks (titles and snippets) | 5 key pages | High | Low | Planned |
| Redirected URLs in the sitemap | 4 + 6 URLs | Medium | Low | Fixed |
| Dead and heavy tags in Tag Manager | All pages | High (speed) | Low | Next step |
| Render-blocking web font | All pages | Medium | Low | Fixed |
| Images without width and height | 200+ images | Medium | Low | Fixed |
| 4-hour cache on static files | All pages | Medium | Low | Fixed |
| Missing meta descriptions | 15 URLs | Low–medium | Low | Fixed (7 indexable) |
| Thin archives indexed | 7 URLs | Low | Low | Fixed |
| Old libraries on simple pages | 5 pages | Low–medium | Medium | In progress |
| Outdated article not indexed | This page | Medium | Medium | Rewritten |
How to run this audit faster
Search Console and PageSpeed Insights are free and cover most of this list. The slow part is checking pages one at a time. SEO Audit Software checks 179 on-page factors for any page and target keyword and gives you a PDF report in seconds. Agencies can send that report under their own brand with the white label option. Use it for the on-page part of the checklist, then use Search Console for indexing and real-visitor data.
For a quick free check of a single page, use our SEO score checker or the free SEO analysis report. To check a whole site for broken pages and redirects, the app can crawl up to 1,000 pages per crawl.
Frequently asked questions
How often should I run an SEO audit?
Run a full audit like this one at least once a year and after every redesign, migration or theme change. Check the Search Console Page indexing and Performance reports every week for the first month after a big change.
What should an SEO audit check first?
Crawling and indexing: robots.txt, the XML sitemap, redirects, canonicals and the Search Console Page indexing report. If Google cannot crawl or index a page, on-page and speed fixes on that page have no effect.
Why does a page rank in the top 5 but get almost no clicks?
Usually because the title and description do not match what the searcher wants, or other results look more useful. In our audit, “seo audit software” ranked at position 3.5 with 9,328 impressions but only 19 clicks, so we are rewriting the snippet first.
What does “Crawled – currently not indexed” mean?
Google fetched the page and chose not to index it. It is rarely a technical block. Check whether the content is thin, outdated or duplicated elsewhere on the site, improve it, then request indexing in Search Console.
Which tools do I need for an SEO audit?
Google Search Console for indexing and real search data, PageSpeed Insights for speed and Core Web Vitals, and a crawler or on-page audit tool to check titles, descriptions, headings, images and links across all pages.
How we collected the data
All figures are from seoaudit.software in October 2026. Search Console figures cover the 90 days to October 15, 2026, except the query table in check 5, which covers 16 months. PageSpeed Insights results are from a mobile test of the home page on October 18, 2026. The crawl covered all 62 URLs in the site’s XML sitemaps. Core Web Vitals thresholds are from Google’s documentation at web.dev/articles/vitals. Guidance on helpful content is from Google Search Central.