How to use this

You don't need to be technical to get through this. Every item below is explained in plain language, with a free tool to check it, no agency jargon assumed. Go through each section against your own site. Anything you can't check off in a couple of minutes, write it down and move on, don't stop to fix it mid-audit. Fix everything after you've seen the full picture, so you're prioritizing against the whole list instead of whichever issue you happened to find first. Check items off as you go, your progress is saved in this browser, so you can leave and pick up where you stopped.

0 of 29 checked

1. Crawlability & indexing

This category is just: can Google (and the AI systems that now answer buyer questions) actually find and read your pages? If they can't, nothing else on this list matters, a beautifully written page nobody can reach doesn't rank or get cited.

How to check it

Screaming Frog's SEO Spider has a free tier that crawls up to 500 URLs and flags most of this automatically: broken links, missing canonicals, blocked pages, the works. screamingfrog.co.uk/seo-spider

Quick manual check: type site:yourdomain.com into Google. That shows roughly what Google has actually indexed, if pages you expect are missing, that's your first clue something above is blocking them. Google Search Console's free URL Inspection tool gives the exact, authoritative answer for any single page.

2. Core Web Vitals & performance

This category is about page speed, and about how stable the page feels while it loads, does text jump around, does a click register right away. Google measures three specific numbers, taken from real visitors' browsers, not a lab test:

How to check it

Paste any URL into Google's free PageSpeed Insights and it measures all three numbers for you, plus tells you in plain terms what's slowing the page down. pagespeed.web.dev

3. Structured data

Structured data (people also call it "schema markup") is a hidden block of code on a page that spells out, in a format a machine can read directly, exactly what that page is: a product, an article, a local business, a person. Without it, Google and AI systems have to guess that from your words alone.

How to check it

Google's Rich Results Test is free, paste in any page URL and it shows exactly what schema it found and flags any errors. search.google.com/test/rich-results

4. Content & on-page

This is the part most people think of as "SEO": the actual words on the page, and the handful of settings that control how it shows up in search results.

How to check it

Ahrefs' free Webmaster Tools account will scan your site and flag duplicate or missing titles and meta descriptions at no cost. ahrefs.com/webmaster-tools

5. AI visibility (GEO)

The newest category, and the one most checklists still skip entirely: whether ChatGPT, Perplexity, and Google's AI Overviews can find you, trust you, and actually mention you when a buyer asks a relevant question.

How to check it

A quietly useful fact most checklists skip: Bing's index feeds ChatGPT search, Copilot, and part of Perplexity, not just Google's. Bing Webmaster Tools is free and shows you exactly how Bing crawls and indexes your site, and it'll import your data straight from Google Search Console in a couple of clicks. bing.com/webmasters

Two more free tools worth having open while you do all of this: Google Search Console is your overall health dashboard, indexing status, search rankings, and any errors Google itself has flagged, all free. Google Analytics (GA4) tracks what visitors actually do on your site, and it recently added "AI assistants" as its own traffic channel, so you can see visits arriving from ChatGPT, Perplexity, and similar tools broken out separately, instead of buried inside "Direct." search.google.com/search-console · analytics.google.com

How often to run this

Every three to six months for an active site is the general rhythm, and immediately after any major change: a redesign, a CMS migration, or a sudden, unexplained drop in traffic or rankings. A checklist run once and never revisited catches a moment in time, not an ongoing state.

Bonus: automate the crawl with a free Python script

If you'd rather not click through every page by hand, this short script does the boring part of section 1 and 4 for you: it reads your sitemap, visits every URL, and flags pages with a bad status code, a missing or oversized title tag, a missing meta description, or images with no alt text. You don't need to be a developer to run it, if you can install Python and paste a command into a terminal, this works. Hand it to whoever maintains your site if that's not you.

import requests
from xml.etree import ElementTree
from bs4 import BeautifulSoup

SITEMAP_URL = "https://yourdomain.com/sitemap.xml"

def get_urls(sitemap_url):
    xml = requests.get(sitemap_url, timeout=10).text
    root = ElementTree.fromstring(xml)
    ns = {"sm": "http://www.sitemaps.org/schemas/sitemap/0.9"}
    return [loc.text for loc in root.findall(".//sm:loc", ns)]

def check_page(url):
    issues = []
    try:
        r = requests.get(url, timeout=10)
    except requests.RequestException as e:
        return [f"Could not load page: {e}"]

    if r.status_code != 200:
        issues.append(f"Status code {r.status_code}")

    soup = BeautifulSoup(r.text, "html.parser")

    title = soup.find("title")
    if not title or not title.text.strip():
        issues.append("Missing title tag")
    elif len(title.text) > 60:
        issues.append(f"Title too long ({len(title.text)} chars)")

    meta_desc = soup.find("meta", attrs={"name": "description"})
    if not meta_desc or not meta_desc.get("content", "").strip():
        issues.append("Missing meta description")

    images_missing_alt = [img for img in soup.find_all("img") if not img.get("alt", "").strip()]
    if images_missing_alt:
        issues.append(f"{len(images_missing_alt)} image(s) missing alt text")

    return issues

if __name__ == "__main__":
    urls = get_urls(SITEMAP_URL)
    report_lines = [f"Checking {len(urls)} pages from {SITEMAP_URL}\n"]

    for url in urls:
        issues = check_page(url)
        if issues:
            report_lines.append(url)
            for issue in issues:
                report_lines.append(f"  - {issue}")
        else:
            report_lines.append(f"{url} — OK")

    report_text = "\n".join(report_lines)
    print(report_text)

    with open("seo-report.txt", "w") as f:
        f.write(report_text)
    print("\nSaved to seo-report.txt in this same folder.")

Save the code above into a file named check.py, then edit the SITEMAP_URL line near the top to point at your own site.

A common trap

If you're on a Mac and use TextEdit to save it, TextEdit defaults to Rich Text format, which silently wraps your code in formatting Python can't read (you'll see an error starting with {\rtf1\ansi...). Before saving, go to TextEdit's Format menu → Make Plain Text (or Cmd + Shift + T). Easiest fix: skip TextEdit entirely and use a free code editor like VS Code, which saves plain text by default.

  • On Mac: open Terminal (search for it with Spotlight, Cmd + Space), navigate to the folder where you saved the file (cd ~/Downloads, for example, if that's where it is), then run pip3 install --user requests beautifulsoup4 followed by python3 check.py. If pip3 refuses with an "externally-managed-environment" error, that --user flag is what fixes it.
  • On Windows: install Python from python.org first if you don't already have it, and make sure to tick "Add Python to PATH" during setup. Then open Command Prompt (search "cmd"), navigate to the folder with cd (for example cd Downloads), then run pip install requests beautifulsoup4 followed by python check.py.

It'll print every URL from your sitemap with any issues found underneath it, or "OK" if a page is clean. It's a starting point, not a replacement for Screaming Frog or PageSpeed Insights above, but it's a genuinely free, five-minute way to catch the most common on-page mistakes across an entire site at once.

FAQ
What should be included in an SEO audit checklist?
A complete SEO audit checklist covers five areas: crawlability and indexing, Core Web Vitals and performance, structured data, content quality and on-page elements, and (in 2026) AI visibility, whether AI systems can access, trust, and cite your content.
How often should you run a technical SEO audit?
Every three to six months for an active site, and immediately after any major change: a redesign, a migration, a new CMS, or a significant drop in traffic or rankings.
What are the Core Web Vitals thresholds to check in an audit?
Google's "Good" thresholds are Largest Contentful Paint (LCP) under 2.5 seconds, Interaction to Next Paint (INP) under 200 milliseconds, and Cumulative Layout Shift (CLS) under 0.1, each measured at the 75th percentile of real user visits.
Is a free SEO audit checklist enough, or do I need a professional audit?
A checklist like this one will surface most obvious issues if you work through it honestly. A professional audit adds prioritization, which fixes actually move revenue, not just which boxes are unchecked, plus a second set of eyes that isn't blind to problems you've stopped noticing on your own site.

Core Web Vitals thresholds per Google's official web.dev documentation. Accessed July 29, 2026.