Published

SEO audit template

20 checks in seven groups, each with how to run it using free tools and what a pass looks like. Download it as a CSV, open it in any spreadsheet, and fill in the last four columns as you go.

Most rows are answered by crawling the site and reading what each page says about itself, which is what the ShownTrue website crawl does. The rest need Search Console, because only Google can say what Google did with a page.

What is in the template

The same rows as the CSV. Where a free tool on this site does the check, it is linked.

Crawling and indexing

  • robots.txt lets crawlers reach the pages you want found

    Open /robots.txt on the live domain and test your most important paths against it.

    Pass when: Every page you want in search is allowed, and the file answers at the root of the host.

    Free robots.txt tester

  • Important pages are indexed

    Run URL Inspection in Search Console on each key page, then read the Pages report.

    Pass when: Each key page is indexed, or the reason it is not is known and intended.

  • The sitemap lists only pages you want indexed

    Fetch the sitemap and request every URL in it.

    Pass when: Every listed URL answers 200, carries no noindex, and is its own canonical.

    Free sitemap checker

  • noindex appears only where it is meant to

    Check the robots meta tag and X-Robots-Tag header on key pages and on pages you want hidden.

    Pass when: No noindex on pages you want found, and every noindexed page can be crawled so Google sees the tag.

    Free noindex checker

  • Canonical tags name the right address

    Read the canonical link on each page template, then compare it with the canonical Google chose in URL Inspection.

    Pass when: Each page names itself, or names a duplicate on purpose, and Google agrees.

    Free canonical tag checker

  • Redirects take one hop

    Request old addresses and follow each redirect to the end.

    Pass when: One hop to a page that answers 200, and a permanent redirect for a permanent move.

  • A missing page returns a 404

    Request an address that cannot exist, such as /this-page-does-not-exist.

    Pass when: The status code is 404 or 410, not 200 with an error message on the page.

Page content

  • Every page has its own title

    Export titles from a crawl and sort them.

    Pass when: No two pages share a title, and each one says what the page is about early on.

    Free snippet length checker

  • Every page has its own meta description

    Export descriptions from the same crawl.

    Pass when: None missing, none duplicated, each one a fair summary of its page.

    Free meta tag generator

  • Headings are in order

    List the headings on each template.

    Pass when: One h1 that matches the topic, and no level skipped below it.

  • Images carry alt text and a size

    Inspect the image tags on each template.

    Pass when: Meaningful images have alt text, decorative ones have empty alt, and each has width and height.

Links

  • Internal links all work

    Crawl the site and list every internal link that does not answer 200.

    Pass when: Every internal link answers 200 without a redirect.

  • Every important page is linked from other pages

    Count the internal links pointing at each key page in the crawl.

    Pass when: No key page depends on the sitemap alone to be found.

Search Console

  • Queries with many impressions and few clicks are reviewed

    Sort the Performance report Queries tab by impressions and read position and clicks beside each.

    Pass when: Each one has a decision: rewrite the title, change the page, or leave it.

  • Pages report reasons are explained

    Open each reason in the Pages report and sample the URLs under it.

    Pass when: Every reason is either intended or has a fix with an owner.

  • AI feature visibility is recorded

    Export the Generative AI performance report by page.

    Pass when: You have a dated export to compare against next time.

Structured data and sharing

  • Structured data parses and matches the page

    Run key templates through Google's Rich Results Test.

    Pass when: No errors, and nothing marked up that a visitor cannot see on the page.

  • Each page has its own share card

    Read the og: and twitter: tags on a few pages of each template.

    Pass when: Title, description, URL and image belong to that page, not the home page.

    Free Twitter card validator

International

  • hreflang annotations point both ways

    Only for sites in more than one language or region. Check that each version lists the others and itself.

    Pass when: Every alternate links back, and each address answers 200.

    Free hreflang generator

Speed and mobile

  • Pages load well on a phone

    Read the Core Web Vitals report in Search Console, then test key templates in PageSpeed Insights on mobile.

    Pass when: No template group is reported as poor, and any that need work are listed with a fix.

How to run the audit

Work top to bottom. The order matters: a page Google cannot crawl or will not index gains nothing from a better title, so the crawling and indexing rows come first.

Check templates before pages. Most sites have a handful of page types, and a fault in one template is a fault on every page built from it. Record one row per template, then sample a few real pages of each to confirm.

Write the date in every row you check. An audit is a reading of the site on one day, and the next one is only useful if you can tell what changed in between.

What a template cannot tell you

It cannot rank the fixes. A failed row on a page nobody visits matters less than a weak title on a page that already gets most of your impressions, and only your own Search Console figures say which is which.

It also cannot replace reading the pages. Rows like how many internal links a page should have or which duplicate should be canonical have no number to pass. They need somebody who knows what the site is for.