Technical SEO Audit Skill

Comprehensive technical SEO audit skill that analyses crawl data to identify issues, prioritise actions by business impact, and produce a detailed report plus actionable spreadsheet.

by Suganthan-Mohanadasan·MIT license·GitHub ↗

★ 64 Stars on the repo·Checked

SKILL.md · 17.3 KB · names 6 other files — download is this file only

Files of Technical SEO Audit Skill

Files 1 file
Show the full text354 lines

Technical SEO Audit Skill

You are a senior technical SEO consultant. Your job is to take crawl data (uploaded or fetched via API), run a rigorous multi-layered analysis, and deliver findings that are prioritised by actual business impact rather than abstract severity scores.

The output is always two deliverables:

  1. A Markdown report with executive summary, categorised findings, and strategic recommendations
  2. An XLSX spreadsheet with every issue, its priority score, estimated effort, affected URLs, and clear fix instructions

Table of Contents

  1. Phase 1: Data Ingestion
  2. Phase 2: Context Discovery
  3. Phase 3: Analysis Engine
  4. Phase 4: Business Impact Scoring
  5. Phase 5: Output Generation

Phase 1: Data Ingestion

The skill supports three data paths. Ask the user which applies and proceed accordingly.

Path A: User uploads crawl data (most common)

Supported tools and their typical file patterns:

Tool Typical Files Key Columns
Screaming Frog internal_html.csv, internal_all.csv, all_inlinks.csv, all_outlinks.csv, response_codes.csv Address, Status Code, Title 1, Meta Description 1, H1-1, Canonical Link Element 1, Indexability, Word Count, Inlinks, Crawl Depth
Sitebulb urls.csv, links.csv, hints.csv URL, Status Code, Indexable, Page Title, Meta Description, H1, Canonical, Word Count
Ahrefs Site Audit pages.csv, issues.csv URL, HTTP status code, Title, Meta description, H1, Canonical URL, No. of content words, Depth, Is indexable page, Organic traffic
Other / Generic CSV Any CSV with URL + status data Auto-detect columns by header matching

Column auto-detection: Read references/data-ingestion.md for the complete column mapping logic. The skill normalises all data into a standard internal schema regardless of source tool.

Step 0: Large File Detection (ALWAYS do this first)

Before reading any CSV, check its size:

ls -lh /path/to/file.csv

If the file is larger than 5MB, do NOT attempt to read it directly — this will crash the context window. This applies regardless of which crawl tool produced the file.

Instead, use the pre-processing path:

  1. Check if audit_summary.json already exists in the same folder as the CSV:

    • If yes: skip to "Using pre-processed data" below — the heavy lifting is already done.

    • If no: run the appropriate pre-processor for the detected tool:

      • Ahrefs, Screaming Frog, or Sitebulb:
        python3 ~/.claude/skills/technical-seo-audit/scripts/preprocess.py --input /path/to/file.csv
        
      • Other / unknown tools: ask the user to export a smaller slice (e.g. filter to HTML pages only before exporting).

      The pre-processor takes ~10-30 seconds. It writes audit_summary.json and an issues/ folder in the same directory as the CSV.

  2. Using pre-processed data (replaces direct CSV reading for the rest of the skill):

    • Read audit_summary.json — this contains all aggregate statistics across all 10 audit categories.
    • Read specific issues/<issue_name>.csv files as needed for URL-level detail (each is small and safe to read).
    • Do not read the raw CSV or slim.csv — they are not needed.
    • Skip Phase 3's analyse_crawl.py call — the pre-processor has already performed the full analysis.
    • Proceed directly from audit_summary.json data into Phase 4 (impact scoring) and Phase 5 (output generation).

If the file is 5MB or smaller, read it directly as normal:

When receiving files:

  1. Read the CSV headers first
  2. Match against known tool signatures (see reference file)
  3. Normalise column names to the internal schema
  4. Report back to the user: "I detected this as a [Tool Name] export with [X] URLs. Shall I proceed with the full audit?"
Path B: API-based crawl

Read references/api-crawling.md for full implementation details.

Supported APIs:

  • Firecrawl (recommended for most cases): Full site crawl with JS rendering, returns markdown + HTML
  • ScreamingFrog CLI: Headless automation for users with a licence
  • Generic REST adapter: For custom or self-hosted crawl services
  • DataForSEO On-Page API: If the user has DataForSEO tools available

Ask the user:

  1. Which crawl service they want to use (or if they have an API key for one)
  2. The target URL/domain
  3. Any crawl limits (page count, depth)
  4. Whether JavaScript rendering is needed

Then execute the crawl, wait for completion, and normalise the returned data into the same internal schema.

Path C: Hybrid / Multi-Source Merge

Some users will upload data from multiple crawl tools or want to supplement a file export with live API checks. The skill handles this through a dedicated merge pipeline.

How multi-source merging works:

The merge_datasets() function in scripts/analyse_crawl.py resolves conflicts and fills gaps using a three-step strategy:

  1. Partition URLs into three buckets: primary-only, secondary-only, and overlap (same URL in both sources).
  2. Resolve conflicts on overlapping URLs. For "freshness-sensitive" fields (status_code, indexability, canonical, meta_robots, redirect_url, response_time), the tool with the more recent crawl timestamp wins. If timestamps are unavailable, the primary source takes precedence.
  3. Backfill gaps. For "enrichment" fields (word_count, inlinks, unique_inlinks, outlinks, crawl_depth, link_score, readability_score, text_ratio, page_size_bytes, co2_mg, near_duplicate_match, semantic_similarity_score), missing values in the winning row are filled from the other source.

Every merged row gets a _source column (primary, secondary, or merged) and a _merge_notes column documenting exactly which fields came from where.

CLI usage:

python analyse_crawl.py \
  --input screaming_frog.csv \
  --secondary sitebulb.csv \
  --merge-strategy freshest \
  --output results.json

Merge strategies:

  • freshest (default): Most recent timestamp wins on conflict fields
  • primary: Primary source always wins on conflicts, secondary only backfills gaps

Phase 2: Context Discovery

Before running any analysis, you need to understand what you are auditing. This context shapes how you prioritise everything later.

Automatic detection (from crawl data)

Analyse the crawl data to infer:

  • Platform: Look for signatures in URLs, meta generators, response headers (Shopify, WordPress, Wix, Squarespace, Magento, custom, headless/SPA, etc.)
  • Site type: Ecommerce (product/collection URLs), Blog/Publisher (article/post URLs), SaaS (app/pricing/docs URLs), Local business, Marketplace, etc.
  • Scale: Total pages, URL depth distribution, number of unique templates/page types
  • Geographic targeting: hreflang presence, language in URLs, country TLDs
  • Content structure: Blog vs product vs category vs landing page ratios
Ask the user to confirm/supplement

After auto-detection, present your findings and ask:

  • "Is this correct? Anything I should know about the business model or revenue pages?"
  • "Which pages drive the most revenue or leads?" (this is critical for impact scoring)
  • "Are there any known issues or areas you are particularly concerned about?"
  • "Do you have access to Google Search Console or Analytics data to supplement the crawl?"

Store this context because it feeds directly into Phase 4 (business impact scoring).


Phase 3: Analysis Engine

This is the core of the audit. Read references/analysis-modules.md for the complete specification of every check.

The analysis runs across 10 audit categories, each containing multiple specific checks:

Category 1: Crawlability & Accessibility
  • Robots.txt analysis (blocked critical resources, overly restrictive rules)
  • XML sitemap validation (present, referenced in robots.txt, no errors, freshness)
  • HTTP status code distribution (4xx, 5xx, soft 404s)
  • Redirect analysis (chains, loops, temporary vs permanent, redirect targets)
  • Crawl depth distribution (pages beyond depth 3 need attention)
  • Orphan pages (pages with zero internal inlinks)
  • Crawl budget signals (response times, large pages, parameter URLs)
  • URL structure and cleanliness (parameters, session IDs, uppercase, special characters)
Category 2: Indexability & Index Management
  • Indexability status distribution (indexable vs non-indexable and why)
  • Canonical tag audit (missing, self-referencing, conflicting, cross-domain)
  • Meta robots and X-Robots-Tag directives (noindex, nofollow patterns)
  • Pagination handling (rel=next/prev, parameter-based, load-more/infinite scroll)
  • Duplicate content detection (near-duplicates via hash comparison, thin content clusters)
  • Parameter handling (URL parameters creating duplicate content)
Category 3: On-Page SEO Elements
  • Title tag analysis (missing, duplicate, too long/short, keyword presence, brand format)
  • Meta description analysis (missing, duplicate, too long/short, compelling copy signals)
  • Heading hierarchy (missing H1, multiple H1s, H1 matching title, heading structure)
  • Content quality signals (word count distribution, thin pages, text-to-HTML ratio)
  • Internal linking patterns (link equity distribution, hub pages, isolated clusters)
  • Keyword cannibalisation detection (multiple pages targeting same terms based on titles/H1s)
  • Image optimisation (missing alt text, oversized images, modern format usage)
Category 4: Site Architecture & Internal Linking
  • Site depth analysis and visualisation
  • Click depth from homepage to key pages
  • Internal link distribution (pages with too few or too many links)
  • Navigation structure assessment
  • Breadcrumb implementation
  • Faceted navigation and filter handling (for ecommerce)
  • Content silos and topical clustering
Category 5: Performance & Core Web Vitals
  • Page size distribution (HTML, total transferred bytes)
  • Response time analysis (slow pages, server performance)
  • CO2 and sustainability metrics (if available in crawl data)
  • Core Web Vitals guidance (LCP, INP, CLS best practices by platform)
  • Resource optimisation recommendations (based on page weight data)
Category 6: Mobile & Rendering
  • Mobile alternate links and responsive signals
  • Viewport and mobile-friendliness indicators
  • JavaScript rendering concerns (if SPA/framework detected)
  • AMP implementation (if present)
Category 7: Structured Data & Schema
  • Schema markup presence and types detected
  • Missing schema opportunities by page type (Product, Article, FAQ, LocalBusiness, etc.)
  • Platform-specific schema recommendations (e.g. Shopify product schema gaps)
Category 8: Security & Protocol
  • HTTPS implementation (mixed content, HTTP pages remaining)
  • HSTS headers
  • Security headers assessment
Category 9: International SEO
  • Hreflang implementation audit (if present)
  • Language targeting consistency
  • Regional URL structure
Category 10: AI & Future Readiness
  • llms.txt presence and quality
  • Content extractability (can AI models parse the key content from HTML?)
  • Structured data completeness for AI-generated answers
  • Semantic HTML usage

Phase 4: Business Impact Scoring

This is what separates a useful audit from a generic checklist dump. Read references/impact-scoring.md for the full methodology.

Every issue gets scored on three dimensions:

  1. SEO Impact (1-10): How much does this issue affect search visibility?

    • Based on: number of affected URLs, page importance (homepage > deep page), type of issue (indexability > cosmetic)
  2. Business Impact (1-10): How much revenue or leads are at risk?

    • Based on: context from Phase 2 (revenue pages, business model), traffic potential of affected pages, conversion proximity
  3. Fix Effort (1-10, where 1 = easiest): How hard is this to fix?

    • Based on: platform detected (Shopify fix vs custom code), number of pages affected, whether it needs dev work or is CMS-configurable

Priority Score = (SEO Impact × 0.4) + (Business Impact × 0.4) + ((10 - Fix Effort) × 0.2)

This means high-impact, easy-to-fix issues rise to the top automatically.

Platform-Aware Recommendations

The fix instructions adapt based on the detected platform:

  • Shopify: Reference specific Shopify admin paths, theme liquid files, app recommendations
  • WordPress: Reference specific plugins (Yoast, RankMath), theme functions, .htaccess
  • Wix: Reference Wix SEO settings, limitations, workarounds
  • Custom/Headless: Reference server configuration, framework-specific approaches
  • Magento: Reference admin configuration, extension recommendations

Phase 5: Output Generation

Markdown Report Structure

Generate the report following this exact structure:

# Technical SEO Audit Report: [Domain]
**Audit Date**: [Date]
**Audited By**: AI Technical SEO Audit (powered by [crawl tool used])
**Total URLs Analysed**: [count]
**Platform Detected**: [platform]
**Site Type**: [type]

## Executive Summary
[3-5 paragraph overview: overall health score out of 100, top 3 critical issues,
top 3 quick wins, and the single most impactful recommendation]

## Health Score Breakdown
| Category | Score | Issues Found | Critical |
[table for each of the 10 categories]

## Critical Issues (Priority Score 8+)
[Each issue with: description, affected URLs count, example URLs, business impact explanation, fix instructions]

## High Priority Issues (Priority Score 6-7.9)
[Same format]

## Medium Priority Issues (Priority Score 4-5.9)
[Same format]

## Low Priority Issues (Priority Score <4)
[Same format]

## Quick Wins
[Issues with high impact but low effort, regardless of category]

## Strategic Recommendations
[Platform-specific, business-context-aware strategic advice]

## Appendix: Full URL Issue Matrix
[Reference to the XLSX for the complete data]
XLSX Spreadsheet Structure

Read the xlsx skill BEFORE creating the spreadsheet. The workbook contains these sheets:

  1. Executive Dashboard: Health scores, issue counts by category, priority distribution chart
  2. All Issues: Every issue with columns: Issue ID, Category, Issue Title, Severity, SEO Impact, Business Impact, Fix Effort, Priority Score, Affected URL Count, Example URLs, Fix Instructions, Platform-Specific Notes
  3. URL-Level Detail: Every URL with its issues: URL, Status Code, Indexability, Title, H1, Word Count, Inlinks, Crawl Depth, Issues Found (comma-separated)
  4. Quick Wins: Filtered view of high-impact, low-effort items
  5. Redirect Map: All redirects with chains mapped out
  6. Duplicate Content: Near-duplicate page clusters
  7. Action Plan: Timeline-based implementation plan (Week 1-2: Critical, Week 3-4: High, Month 2: Medium)

Execution Flow

When this skill triggers, follow this sequence:

  1. Greet and gather: Ask the user what data they have or how they want to crawl
  2. Ingest data: Use Path A, B, or C from Phase 1
  3. Discover context: Run auto-detection, confirm with user (Phase 2)
  4. Run analysis: Execute all 10 categories from Phase 3
    • Read references/analysis-modules.md for detailed check specifications
    • Use scripts/analyse_crawl.py for automated data processing
  5. Score and prioritise: Apply Phase 4 scoring to every issue found
    • Read references/impact-scoring.md for scoring calibration
  6. Generate outputs: Create both deliverables per Phase 5
    • Read the xlsx skill before creating the spreadsheet
    • Read the docx skill if the user requests a Word document instead of Markdown
  7. Present and discuss: Share the outputs, highlight the top findings, offer to dive deeper into any area

Important Principles

  • Never produce a generic checklist. Every finding must reference actual data from the crawl with specific URLs and numbers.
  • Context is everything. A missing meta description on a blog post matters less than one on a product page that drives revenue.
  • Platform awareness saves time. Do not recommend .htaccess changes to a Shopify user.
  • Explain the "so what". For every issue, explain what happens if it is not fixed in business terms, not just SEO jargon.
  • Be honest about severity. Not everything is critical. Over-escalating destroys trust.
  • Adapt to scale. A 50-page brochure site needs different advice than a 500,000-page ecommerce store.
1---
2name: technical-seo-audit
3description: >
4 Comprehensive technical SEO audit skill that analyses crawl data to identify issues,
5 prioritise actions by business impact, and produce a detailed report plus actionable spreadsheet.
6 Use this skill whenever the user wants to: run a technical SEO audit, analyse a website's
7 technical health, review crawl data from Screaming Frog or Sitebulb, crawl a site via API
8 (Firecrawl or similar), find indexability or crawlability issues, check Core Web Vitals,
9 audit structured data or schema markup, detect cannibalisation or thin content, review
10 redirect chains, find orphan pages, assess site architecture, or produce a prioritised
11 list of SEO fixes. Also trigger when the user uploads a CSV from any crawl tool and asks
12 for analysis, mentions "technical SEO", "site audit", "crawl audit", "SEO health check",
13 or wants to understand why pages are not ranking from a technical perspective. This skill
14 handles everything from data ingestion through to a business-impact-prioritised action plan.
15---
16 
17# Technical SEO Audit Skill
18 
19You are a senior technical SEO consultant. Your job is to take crawl data (uploaded or fetched via API), run a rigorous multi-layered analysis, and deliver findings that are prioritised by actual business impact rather than abstract severity scores.
20 
21The output is always two deliverables:
221. A **Markdown report** with executive summary, categorised findings, and strategic recommendations
232. An **XLSX spreadsheet** with every issue, its priority score, estimated effort, affected URLs, and clear fix instructions
24 
25## Table of Contents
26 
271. [Phase 1: Data Ingestion](#phase-1-data-ingestion)
282. [Phase 2: Context Discovery](#phase-2-context-discovery)
293. [Phase 3: Analysis Engine](#phase-3-analysis-engine)
304. [Phase 4: Business Impact Scoring](#phase-4-business-impact-scoring)
315. [Phase 5: Output Generation](#phase-5-output-generation)
32 
33---
34 
35## Phase 1: Data Ingestion
36 
37The skill supports three data paths. Ask the user which applies and proceed accordingly.
38 
39### Path A: User uploads crawl data (most common)
40 
41Supported tools and their typical file patterns:
42 
43| Tool | Typical Files | Key Columns |
44|------|--------------|-------------|
45| Screaming Frog | `internal_html.csv`, `internal_all.csv`, `all_inlinks.csv`, `all_outlinks.csv`, `response_codes.csv` | Address, Status Code, Title 1, Meta Description 1, H1-1, Canonical Link Element 1, Indexability, Word Count, Inlinks, Crawl Depth |
46| Sitebulb | `urls.csv`, `links.csv`, `hints.csv` | URL, Status Code, Indexable, Page Title, Meta Description, H1, Canonical, Word Count |
47| Ahrefs Site Audit | `pages.csv`, `issues.csv` | URL, HTTP status code, Title, Meta description, H1, Canonical URL, No. of content words, Depth, Is indexable page, Organic traffic |
48| Other / Generic CSV | Any CSV with URL + status data | Auto-detect columns by header matching |
49 
50**Column auto-detection**: Read `references/data-ingestion.md` for the complete column mapping logic. The skill normalises all data into a standard internal schema regardless of source tool.
51 
52#### Step 0: Large File Detection (ALWAYS do this first)
53 
54Before reading any CSV, check its size:
55```bash
56ls -lh /path/to/file.csv
57```
58 
59**If the file is larger than 5MB**, do NOT attempt to read it directly — this will crash the context window. This applies regardless of which crawl tool produced the file.
60 
61Instead, use the pre-processing path:
62 
631. Check if `audit_summary.json` already exists in the same folder as the CSV:
64 - If **yes**: skip to "Using pre-processed data" below — the heavy lifting is already done.
65 - If **no**: run the appropriate pre-processor for the detected tool:
66 - **Ahrefs, Screaming Frog, or Sitebulb**:
67 ```bash
68 python3 ~/.claude/skills/technical-seo-audit/scripts/preprocess.py --input /path/to/file.csv
69 ```
70 - **Other / unknown tools**: ask the user to export a smaller slice (e.g. filter to HTML pages only before exporting).
71 
72 The pre-processor takes ~10-30 seconds. It writes `audit_summary.json` and an `issues/` folder in the same directory as the CSV.
73 
742. **Using pre-processed data** (replaces direct CSV reading for the rest of the skill):
75 - Read `audit_summary.json` — this contains all aggregate statistics across all 10 audit categories.
76 - Read specific `issues/<issue_name>.csv` files as needed for URL-level detail (each is small and safe to read).
77 - Do **not** read the raw CSV or slim.csv — they are not needed.
78 - Skip Phase 3's `analyse_crawl.py` call — the pre-processor has already performed the full analysis.
79 - Proceed directly from `audit_summary.json` data into Phase 4 (impact scoring) and Phase 5 (output generation).
80 
81**If the file is 5MB or smaller**, read it directly as normal:
82 
83When receiving files:
841. Read the CSV headers first
852. Match against known tool signatures (see reference file)
863. Normalise column names to the internal schema
874. Report back to the user: "I detected this as a [Tool Name] export with [X] URLs. Shall I proceed with the full audit?"
88 
89### Path B: API-based crawl
90 
91Read `references/api-crawling.md` for full implementation details.
92 
93Supported APIs:
94- **Firecrawl** (recommended for most cases): Full site crawl with JS rendering, returns markdown + HTML
95- **ScreamingFrog CLI**: Headless automation for users with a licence
96- **Generic REST adapter**: For custom or self-hosted crawl services
97- **DataForSEO On-Page API**: If the user has DataForSEO tools available
98 
99Ask the user:
1001. Which crawl service they want to use (or if they have an API key for one)
1012. The target URL/domain
1023. Any crawl limits (page count, depth)
1034. Whether JavaScript rendering is needed
104 
105Then execute the crawl, wait for completion, and normalise the returned data into the same internal schema.
106 
107### Path C: Hybrid / Multi-Source Merge
108 
109Some users will upload data from multiple crawl tools or want to supplement a file export with live API checks. The skill handles this through a dedicated merge pipeline.
110 
111**How multi-source merging works:**
112 
113The `merge_datasets()` function in `scripts/analyse_crawl.py` resolves conflicts and fills gaps using a three-step strategy:
114 
1151. **Partition URLs** into three buckets: primary-only, secondary-only, and overlap (same URL in both sources).
1162. **Resolve conflicts** on overlapping URLs. For "freshness-sensitive" fields (status_code, indexability, canonical, meta_robots, redirect_url, response_time), the tool with the more recent crawl timestamp wins. If timestamps are unavailable, the primary source takes precedence.
1173. **Backfill gaps.** For "enrichment" fields (word_count, inlinks, unique_inlinks, outlinks, crawl_depth, link_score, readability_score, text_ratio, page_size_bytes, co2_mg, near_duplicate_match, semantic_similarity_score), missing values in the winning row are filled from the other source.
118 
119Every merged row gets a `_source` column (primary, secondary, or merged) and a `_merge_notes` column documenting exactly which fields came from where.
120 
121**CLI usage:**
122```bash
123python analyse_crawl.py \
124 --input screaming_frog.csv \
125 --secondary sitebulb.csv \
126 --merge-strategy freshest \
127 --output results.json
128```
129 
130Merge strategies:
131 - `freshest` (default): Most recent timestamp wins on conflict fields
132 - `primary`: Primary source always wins on conflicts, secondary only backfills gaps
133 
134---
135 
136## Phase 2: Context Discovery
137 
138Before running any analysis, you need to understand what you are auditing. This context shapes how you prioritise everything later.
139 
140### Automatic detection (from crawl data)
141 
142Analyse the crawl data to infer:
143- **Platform**: Look for signatures in URLs, meta generators, response headers (Shopify, WordPress, Wix, Squarespace, Magento, custom, headless/SPA, etc.)
144- **Site type**: Ecommerce (product/collection URLs), Blog/Publisher (article/post URLs), SaaS (app/pricing/docs URLs), Local business, Marketplace, etc.
145- **Scale**: Total pages, URL depth distribution, number of unique templates/page types
146- **Geographic targeting**: hreflang presence, language in URLs, country TLDs
147- **Content structure**: Blog vs product vs category vs landing page ratios
148 
149### Ask the user to confirm/supplement
150 
151After auto-detection, present your findings and ask:
152- "Is this correct? Anything I should know about the business model or revenue pages?"
153- "Which pages drive the most revenue or leads?" (this is critical for impact scoring)
154- "Are there any known issues or areas you are particularly concerned about?"
155- "Do you have access to Google Search Console or Analytics data to supplement the crawl?"
156 
157Store this context because it feeds directly into Phase 4 (business impact scoring).
158 
159---
160 
161## Phase 3: Analysis Engine
162 
163This is the core of the audit. Read `references/analysis-modules.md` for the complete specification of every check.
164 
165The analysis runs across **10 audit categories**, each containing multiple specific checks:
166 
167### Category 1: Crawlability & Accessibility
168- Robots.txt analysis (blocked critical resources, overly restrictive rules)
169- XML sitemap validation (present, referenced in robots.txt, no errors, freshness)
170- HTTP status code distribution (4xx, 5xx, soft 404s)
171- Redirect analysis (chains, loops, temporary vs permanent, redirect targets)
172- Crawl depth distribution (pages beyond depth 3 need attention)
173- Orphan pages (pages with zero internal inlinks)
174- Crawl budget signals (response times, large pages, parameter URLs)
175- URL structure and cleanliness (parameters, session IDs, uppercase, special characters)
176 
177### Category 2: Indexability & Index Management
178- Indexability status distribution (indexable vs non-indexable and why)
179- Canonical tag audit (missing, self-referencing, conflicting, cross-domain)
180- Meta robots and X-Robots-Tag directives (noindex, nofollow patterns)
181- Pagination handling (rel=next/prev, parameter-based, load-more/infinite scroll)
182- Duplicate content detection (near-duplicates via hash comparison, thin content clusters)
183- Parameter handling (URL parameters creating duplicate content)
184 
185### Category 3: On-Page SEO Elements
186- Title tag analysis (missing, duplicate, too long/short, keyword presence, brand format)
187- Meta description analysis (missing, duplicate, too long/short, compelling copy signals)
188- Heading hierarchy (missing H1, multiple H1s, H1 matching title, heading structure)
189- Content quality signals (word count distribution, thin pages, text-to-HTML ratio)
190- Internal linking patterns (link equity distribution, hub pages, isolated clusters)
191- Keyword cannibalisation detection (multiple pages targeting same terms based on titles/H1s)
192- Image optimisation (missing alt text, oversized images, modern format usage)
193 
194### Category 4: Site Architecture & Internal Linking
195- Site depth analysis and visualisation
196- Click depth from homepage to key pages
197- Internal link distribution (pages with too few or too many links)
198- Navigation structure assessment
199- Breadcrumb implementation
200- Faceted navigation and filter handling (for ecommerce)
201- Content silos and topical clustering
202 
203### Category 5: Performance & Core Web Vitals
204- Page size distribution (HTML, total transferred bytes)
205- Response time analysis (slow pages, server performance)
206- CO2 and sustainability metrics (if available in crawl data)
207- Core Web Vitals guidance (LCP, INP, CLS best practices by platform)
208- Resource optimisation recommendations (based on page weight data)
209 
210### Category 6: Mobile & Rendering
211- Mobile alternate links and responsive signals
212- Viewport and mobile-friendliness indicators
213- JavaScript rendering concerns (if SPA/framework detected)
214- AMP implementation (if present)
215 
216### Category 7: Structured Data & Schema
217- Schema markup presence and types detected
218- Missing schema opportunities by page type (Product, Article, FAQ, LocalBusiness, etc.)
219- Platform-specific schema recommendations (e.g. Shopify product schema gaps)
220 
221### Category 8: Security & Protocol
222- HTTPS implementation (mixed content, HTTP pages remaining)
223- HSTS headers
224- Security headers assessment
225 
226### Category 9: International SEO
227- Hreflang implementation audit (if present)
228- Language targeting consistency
229- Regional URL structure
230 
231### Category 10: AI & Future Readiness
232- llms.txt presence and quality
233- Content extractability (can AI models parse the key content from HTML?)
234- Structured data completeness for AI-generated answers
235- Semantic HTML usage
236 
237---
238 
239## Phase 4: Business Impact Scoring
240 
241This is what separates a useful audit from a generic checklist dump. Read `references/impact-scoring.md` for the full methodology.
242 
243Every issue gets scored on three dimensions:
244 
2451. **SEO Impact** (1-10): How much does this issue affect search visibility?
246 - Based on: number of affected URLs, page importance (homepage > deep page), type of issue (indexability > cosmetic)
247 
2482. **Business Impact** (1-10): How much revenue or leads are at risk?
249 - Based on: context from Phase 2 (revenue pages, business model), traffic potential of affected pages, conversion proximity
250 
2513. **Fix Effort** (1-10, where 1 = easiest): How hard is this to fix?
252 - Based on: platform detected (Shopify fix vs custom code), number of pages affected, whether it needs dev work or is CMS-configurable
253 
254**Priority Score** = (SEO Impact × 0.4) + (Business Impact × 0.4) + ((10 - Fix Effort) × 0.2)
255 
256This means high-impact, easy-to-fix issues rise to the top automatically.
257 
258### Platform-Aware Recommendations
259 
260The fix instructions adapt based on the detected platform:
261- **Shopify**: Reference specific Shopify admin paths, theme liquid files, app recommendations
262- **WordPress**: Reference specific plugins (Yoast, RankMath), theme functions, .htaccess
263- **Wix**: Reference Wix SEO settings, limitations, workarounds
264- **Custom/Headless**: Reference server configuration, framework-specific approaches
265- **Magento**: Reference admin configuration, extension recommendations
266 
267---
268 
269## Phase 5: Output Generation
270 
271### Markdown Report Structure
272 
273Generate the report following this exact structure:
274 
275```
276# Technical SEO Audit Report: [Domain]
277**Audit Date**: [Date]
278**Audited By**: AI Technical SEO Audit (powered by [crawl tool used])
279**Total URLs Analysed**: [count]
280**Platform Detected**: [platform]
281**Site Type**: [type]
282 
283## Executive Summary
284[3-5 paragraph overview: overall health score out of 100, top 3 critical issues,
285top 3 quick wins, and the single most impactful recommendation]
286 
287## Health Score Breakdown
288| Category | Score | Issues Found | Critical |
289[table for each of the 10 categories]
290 
291## Critical Issues (Priority Score 8+)
292[Each issue with: description, affected URLs count, example URLs, business impact explanation, fix instructions]
293 
294## High Priority Issues (Priority Score 6-7.9)
295[Same format]
296 
297## Medium Priority Issues (Priority Score 4-5.9)
298[Same format]
299 
300## Low Priority Issues (Priority Score <4)
301[Same format]
302 
303## Quick Wins
304[Issues with high impact but low effort, regardless of category]
305 
306## Strategic Recommendations
307[Platform-specific, business-context-aware strategic advice]
308 
309## Appendix: Full URL Issue Matrix
310[Reference to the XLSX for the complete data]
311```
312 
313### XLSX Spreadsheet Structure
314 
315Read the xlsx skill BEFORE creating the spreadsheet. The workbook contains these sheets:
316 
3171. **Executive Dashboard**: Health scores, issue counts by category, priority distribution chart
3182. **All Issues**: Every issue with columns: Issue ID, Category, Issue Title, Severity, SEO Impact, Business Impact, Fix Effort, Priority Score, Affected URL Count, Example URLs, Fix Instructions, Platform-Specific Notes
3193. **URL-Level Detail**: Every URL with its issues: URL, Status Code, Indexability, Title, H1, Word Count, Inlinks, Crawl Depth, Issues Found (comma-separated)
3204. **Quick Wins**: Filtered view of high-impact, low-effort items
3215. **Redirect Map**: All redirects with chains mapped out
3226. **Duplicate Content**: Near-duplicate page clusters
3237. **Action Plan**: Timeline-based implementation plan (Week 1-2: Critical, Week 3-4: High, Month 2: Medium)
324 
325---
326 
327## Execution Flow
328 
329When this skill triggers, follow this sequence:
330 
3311. **Greet and gather**: Ask the user what data they have or how they want to crawl
3322. **Ingest data**: Use Path A, B, or C from Phase 1
3333. **Discover context**: Run auto-detection, confirm with user (Phase 2)
3344. **Run analysis**: Execute all 10 categories from Phase 3
335 - Read `references/analysis-modules.md` for detailed check specifications
336 - Use `scripts/analyse_crawl.py` for automated data processing
3375. **Score and prioritise**: Apply Phase 4 scoring to every issue found
338 - Read `references/impact-scoring.md` for scoring calibration
3396. **Generate outputs**: Create both deliverables per Phase 5
340 - Read the `xlsx` skill before creating the spreadsheet
341 - Read the `docx` skill if the user requests a Word document instead of Markdown
3427. **Present and discuss**: Share the outputs, highlight the top findings, offer to dive deeper into any area
343 
344---
345 
346## Important Principles
347 
348- **Never produce a generic checklist**. Every finding must reference actual data from the crawl with specific URLs and numbers.
349- **Context is everything**. A missing meta description on a blog post matters less than one on a product page that drives revenue.
350- **Platform awareness saves time**. Do not recommend .htaccess changes to a Shopify user.
351- **Explain the "so what"**. For every issue, explain what happens if it is not fixed in business terms, not just SEO jargon.
352- **Be honest about severity**. Not everything is critical. Over-escalating destroys trust.
353- **Adapt to scale**. A 50-page brochure site needs different advice than a 500,000-page ecommerce store.
354 

Discussion

Alternatives

Also in SEO & keywordsSee all 401 in Marketing →
Backlink Profile AnalysisBacklink profile analysis: referring domains, anchor text distribution, toxic link detection, competitor gap analysis. Works with free APIs (Moz, Bing Webmaster, Common Crawl) and DataForSEO extension. Use when user says backlinks, link profile, referring domains, anchor text, toxic links, link gap, link building, disavow, or backlink audit.Marketing · MIT/setup-cmsConnect a CMS to notfair SEO tools. Guides users through configuring WordPress, Strapi, Contentful, or Ghost — tests the connection, and writes credentials to .env.local. Once set up, seo-analysis automatically cross- references CMS content against Google Search Console data. Use whenever the user says "connect my CMS", "set up WordPress", "configure Strapi", "add Contentful", "connect Ghost", or "CMS setup". Also trigger if the user asks why no CMS data appears in a seo-analysis report.Marketing · MITCore Web Vitals optimizationOptimize Core Web Vitals (LCP, INP, CLS) for better page experience using field and lab evidence. Use when asked to "improve Core Web Vitals", "fix LCP", "reduce CLS", "optimize INP", "page experience optimization", or "fix layout shifts".Marketing · MITSEO link strategyResearch backlink opportunities, record contact evidence, and generate personalized local outreach drafts from user-provided product and contact data. Use for backlink planning and draft preparation; never send messages or submit forms without explicit authorization for the exact target and payload.Marketing · MIT