Free technical SEO audit checklist
- No signup
- Free
- Saved in this browser
0 of 60 done
Crawlability
A crawler has to fetch the URL before anything else is true.
Key templates return 200
A template that 500s wastes the crawl.
Check the homepage, a service, a category, and a detail page.
Check this URL with the SEO checkerrobots.txt is a real file
HTML at that URL is usually a soft 404.
Open /robots.txt. It should be plain text, not the homepage.
Test it in the robots.txt toolGooglebot is allowed on the pages you want
A stray disallow is the usual accident.
Test the path. Read the line that won.
Test it in the robots.txt toolCSS and JavaScript are not blocked
Google needs them to render.
Do not disallow /wp-includes or the theme assets.
Test it in the robots.txt toolFacet and search URLs are controlled
Every sort and filter can become an indexable URL.
Disallow the parameter patterns you do not want crawled, and canonical the rest to the clean URL.
Test it in the robots.txt toolWordPress admin-ajax stays allowed if you block wp-admin
Blocking the whole admin folder can block a file the front end uses.
Disallow /wp-admin/ and allow /wp-admin/admin-ajax.php.
Test it in the robots.txt toolOne host is preferred
www and non-www both returning 200 splits the site.
Pick one. Redirect the other. Use it in canonicals and the sitemap.
Check this URL with the SEO checkerHTTP redirects to HTTPS in one hop
A chain through www and a trailing slash is three hops.
Make the first redirect the final URL.
Indexation
Being crawled is not the same as being indexed.
Noindex is only on pages you mean to hide
Tag archives and thank-you pages are the usual yes. Services are not.
Search the theme and the SEO plugin for noindex.
Check this URL with the SEO checkerSearch Console coverage is read
Excluded is a reason, not a score.
Open the samples. Fix the reason, not the count.
Soft 404s are real pages or they are gone
A thin page that says nothing gets dropped.
Give it content or return a real 404.
Duplicates are canonicalised or redirected
Printer pages, parameters, and http copies are the usual set.
One URL should answer for each piece of content.
Check this URL with the SEO checkerPaginated archives are intentional
Page 20 of a tag is rarely a landing page.
Noindex them or fold them, and keep the links crawlable.
Indexable pages self-canonical
A missing canonical lets parameters win.
The tag should be the clean URL of that page.
Check this URL with the SEO checker
Redirects and status codes
One hop, the right code, then stop.
Permanent moves use 301 or 308
A 302 on a permanent move looks temporary.
Use 301 for URLs that have moved for good.
Chains are collapsed
Three hops is a habit, not a plan.
Point the old URL at the final URL.
There are no loops
A loop burns the crawl and shows an error.
Fetch the URL and follow until it stops.
Removed pages 404 or 410
Redirecting every dead URL to the homepage is a soft mess.
Redirect only when there is a real replacement.
Internal links point at the final URL
Links to redirected URLs keep the chain alive.
Update the menu, the content, and the sitemap.
Canonicals
The canonical is a hint. Make the links agree with it.
Canonicals are absolute
A relative canonical is easier to get wrong.
Use the full https URL.
Check this URL with the SEO checkerThe canonical host matches the preferred host
A canonical to the other host fights the redirect.
One host, everywhere.
Parameter URLs canonical to the clean URL
Sort and currency parameters should not be the indexed URL.
The clean URL is the canonical, and it returns 200.
Canonical and noindex are not fighting
Noindex on a URL that others canonical to is confusing.
Pick one instruction.
Hreflang
Only if you have more than one language or country.
Language and region codes are valid
en-uk is wrong. en-GB is the region.
Use ISO language and region codes.
Return links exist
A one-way hreflang is ignored.
Each alternate should list the others, including itself.
The hreflang URL is the canonical URL
Pointing hreflang at a redirected URL fails the cluster.
Use the final URL.
x-default is a real choice
It is the fallback, not a duplicate of every country.
Point it at the page a person should see when no region matches.
Sitemaps
A sitemap lists the URLs you want indexed. It is not a dump of the database.
The sitemap returns 200 and XML
HTML here is a broken route.
Open it. You should see urlset or sitemapindex.
Only canonical, indexable URLs are listed
Noindex URLs in the sitemap contradict the page.
Remove redirects, 404s, and noindex URLs.
Large sites split the file
One giant file gets ignored past the limit.
Use a sitemap index. Keep each file within the published limits.
robots.txt points at the sitemap
Robots.txt
It is a request, not a lock, and not a way to remove an indexed page.
The live file is the one you think it is
Plugins and files overwrite each other.
Fetch the live URL and compare it with the setting.
Test it in the robots.txt toolAI bots are a deliberate choice
Training and search are different bots.
Allow search if you want to be cited. Block training only if that is the decision.
Test it in the robots.txt toolGoogle-Extended is not Googlebot
Blocking Google-Extended does not remove you from Google Search.
Read the bot before you toggle it.
Test it in the robots.txt toolThere is no noindex directive in the file
That directive has been unsupported since 2019.
Use a meta tag or an HTTP header.
Test it in the robots.txt toolCrawl-delay is not your Google plan
Google ignores it.
If you need to slow a crawl, use Search Console or the host, not that line.
JavaScript rendering
If the words are not in the first HTML, assume they are fragile.
Primary text is in the response HTML
Client-only text is a coin flip for some crawlers.
View source. The H1 and the first paragraph should be there.
Check this URL with the SEO checkerImportant links are anchor tags
A div with a click handler is not a link.
Use an href.
Not-found routes return 404
A JavaScript app that returns 200 for missing URLs creates soft 404s.
The server status should match the page.
Canonical is in the first HTML
A canonical injected late can be missed.
Put it in the head from the server.
Core Web Vitals
Field data beats a single lab run.
Field LCP, INP, and CLS are checked
Lab data is a hint. Field data is what users hit.
Use PageSpeed or Search Console. Note when the sample is too small.
Check this URL with the SEO checkerThe LCP element is known
It is usually the hero image or the heading.
Do not lazy-load the hero. Give it a size.
The page responds to a tap
Heavy scripts are the usual cause.
Cut the tags. Break long tasks.
The layout does not jump
Ads, fonts, and images without a size are the usual cause.
Set width and height. Reserve space.
Structured data
Valid markup, matching the visible page.
JSON-LD parses
The markup matches the visible content
A price in schema that is not on the page is a problem.
Use the same name, price, and availability the person sees.
Build the schemaIDs in a graph do not collide
FAQ markup is not a rich-result promise
FAQ rich results ended for most sites on 7 May 2026.
Use it to mark up real questions. Do not sell the rich result.
Log files
Logs show what was fetched. Search Console shows what was indexed. They are different.
You can get server logs if the site is large
A small site can live without them. A large one should not.
Ask the host for access logs, or use the platform export.
Googlebot in the logs is checked against waste
Parameter URLs eating the crawl show up here.
See which paths get the hits. Block or canonical the junk.
5xx spikes are visible
A weekend of 500s drops pages.
Watch the error rate after a deploy.
Security
A hacked site is an SEO problem because Google warns people away.
HTTPS is everywhere, including images
Mixed content breaks the lock.
Update hardcoded http links.
HSTS is on if you control the host
It tells browsers to stay on HTTPS.
Set it once the redirects are clean.
The site is not an open redirect
Open redirects get abused.
Do not redirect to any URL a query string names.
Search Console security issues are empty
A hack warning kills clicks.
Check the security report. Clean the site before you chase rankings.
AI crawler access
Decide on purpose. Do not copy a block list you do not understand.
Training bots and search bots are separate
Blocking one is not the same as blocking the other.
Read the purpose, then toggle.
Test it in the robots.txt toolGPTBot, OAI-SearchBot, and ChatGPT-User are not the same
One trains, one searches, one fetches when a person asks.
Block the one you mean. Leave the search bot if you want citations.
Test it in the robots.txt toolGoogle-Extended does not control Google Search
It is the Gemini training opt-out.
Leave Googlebot allowed if you want to rank.
Test it in the robots.txt toolThe page can be quoted
A clear paragraph is easier to cite than a slogan.
Write the answer in the HTML.
Check this URL with the SEO checkerllms.txt is a small extra
Adoption by the big answer engines is not confirmed.
Add the file if it is easy. Do not expect it to change visibility on its own.
Draft llms.txt
