A methodology for running a comprehensive SEO audit on any site, by hand, with nothing but a browser and a search engine.
Usage
- Identify the target site (your domain, a client's, or a site you are about to build)
- Run the technical audit using the checklist below
- Run the keyword analysis using WebSearch
- Run the content gap analysis comparing against competitors
- Compile the report following the output template
- Prioritize actions into quick wins vs. strategic investments
Step 1: Technical Audit
Use WebFetch on the target site + key pages. Check each item:
| Check | How to Verify | Tool |
|---|---|---|
| HTTPS | Check if URL redirects to https:// | WebFetch |
| robots.txt | Fetch /robots.txt — check for blocked paths, sitemap reference | WebFetch |
| XML Sitemap | Fetch /sitemap.xml — count URLs, check structure | WebFetch |
| Structured Data | Check page source for JSON-LD (EducationalOrganization, Organization, Product, FAQ) | WebFetch |
| Meta Titles | Present on all key pages, contain keywords, under 60 chars | WebFetch |
| Meta Descriptions | Present, descriptive, contain keywords, under 155 chars | WebFetch |
| H1 Tags | Exactly ONE per page, contains primary keyword | WebFetch |
| H2/H3 Tags | Logical hierarchy, target secondary keywords | WebFetch |
| Mobile Responsive | Check for viewport meta tag, responsive design indicators | WebFetch |
| Clean URLs | Semantic, keyword-containing, no query strings | WebFetch |
| Internal Linking | Navigation structure, footer links, cross-page links | WebFetch |
| Image Alt Text | Descriptive, keyword-aware | WebFetch |
| Canonical Tags | Present, correct (no duplicate content) | WebFetch |
| Page Speed | Check for large resources, render-blocking scripts | WebFetch (limited) |
| Indexation | site:[domain] in Google via WebSearch |
WebSearch |
Common Issues to Look For
- Multiple H1 tags on a single page
- Duplicate URLs (old/new) without 301 redirects
- Missing meta descriptions on key pages
- Client-side rendering without SSR (blank page to crawlers)
- Broken internal links
- Images without alt text
- Missing sitemap or robots.txt
Step 2: Keyword Research
Process
- WebSearch the target domain to see what it currently ranks for
- WebSearch competitor domains to see what they rank for
- Identify gaps — keywords competitors rank for but the target doesn't
- Categorize by intent:
- Navigational: Branded searches (e.g., "[your brand] admissions")
- Informational: Questions and how-to (e.g., "how to become a sonographer in Ghana")
- Commercial: Comparison and evaluation (e.g., "best health science university Ghana")
- Transactional: Ready to act (e.g., "apply to [programme] online")
Keyword Table Template
| Keyword | Est. Difficulty | Opportunity | Current Ranking | Intent | Recommended Content |
|---|---|---|---|---|---|
| [keyword] | Easy/Medium/Hard | High/Medium/Low | Ranking/Not ranking | Nav/Info/Commercial | [content type] |
Difficulty Estimation (Without Ahrefs)
- Easy: Niche query, few competitors, long-tail (4+ words)
- Medium: Some competition, moderate search volume, mixed results
- Hard: Competitive, established players dominating, short-tail (1-2 words)
Step 3: Content Gap Analysis
Process
- List the target site's existing content (from sitemap + WebFetch)
- List competitor content (WebSearch + WebFetch their blogs/pages)
- Identify content types the target is missing:
- Blog posts / articles
- FAQ pages
- Comparison / vs pages
- Career guides / how-to guides
- Case studies / testimonials
- Video content
- Downloadable resources (PDFs, guides)
Gap Table Template
| Gap | Why It Matters | Format | Priority | Effort |
|---|---|---|---|---|
| [missing content] | [user need it serves] | [blog/page/FAQ] | High/Medium/Low | Quick win / Moderate / Large |
Step 4: Competitor Comparison
Process
- Identify 3-5 competitors
- For each, check:
- Number of indexed pages (
site:[domain]via WebSearch) - Blog/content frequency
- Structured data usage
- Keyword rankings overlap
- Social media presence
- Unique content they have that the target doesn't
- Number of indexed pages (
Comparison Table Template
| Dimension | Target | Competitor 1 | Competitor 2 | Competitor 3 |
|---|---|---|---|---|
| Indexed pages | [N] | [N] | [N] | [N] |
| Blog content | [frequency] | [frequency] | [frequency] | [frequency] |
| Structured data | [yes/no] | [yes/no] | [yes/no] | [yes/no] |
| Unique content | [types] | [types] | [types] | [types] |
Step 5: Compile Report
Output Template
# SEO Audit Report — [Site]
**Date:** [DATE] | **Status:** Actionable
## Executive Summary
[3-5 sentences: biggest strength, top 3 priorities, overall assessment]
## Technical SEO Checklist
[Table from Step 1]
## Keyword Opportunity Table
[Table from Step 2 — top 15-20 keywords]
## Content Gap Analysis
[Table from Step 3]
## Competitor Comparison
[Table from Step 4]
## Prioritized Action Plan
### Quick Wins (This Week)
1. [High impact, low effort]
2. ...
### Strategic Investments (This Quarter)
1. [High impact, higher effort]
2. ...
## Key Metrics to Track
[Table with targets]
Audit Cadence
| Audit Type | Frequency | Scope |
|---|---|---|
| Full audit | Quarterly | Complete technical + content + competitor |
| Keyword ranking check | Monthly | Your priority keyword list |
| Technical spot-check | After any site update | HTTPS, sitemap, meta tags, structured data |
| Content gap refresh | Quarterly | New competitor content, new keyword opportunities |
Work the templates in order. The output is a prioritized action plan split into quick wins and strategic bets, not a wall of data.