We automated our entire SEO & GEO audit process
Not a blog post. Not a prompt collection.
The actual system we run daily for clients.
Download the .md skill files and Python scripts. Drop them into Claude Code. Type one command. The audit runs itself.
Roy Perel — Perel Web Studio, Brussels
I run a web agency focused on SEO and performance. We've done hundreds of technical audits over the years — manually at first, then with Screaming Frog, then with custom scripts. When Claude Code came out with MCP support, we rebuilt the whole process from scratch.
What took the most time wasn't writing the skills — it was figuring out which MCP servers actually work, which APIs give reliable data, and which approaches don't hallucinate. We tested dozens of setups over months before landing on this stack. That's what you're really getting here: the result of all that trial and error, so you don't have to go through it yourself.
What the audit covers
Get the full system — free
13 skills + 6 scripts + 3 MCP configs. Ready to use.
Scroll down — every skill, script, and config is below.
The Philosophy: Machine-First Audits
Why most AI-powered SEO audits are unreliable
Most people ask AI to "audit my website" and get a response full of hallucinated numbers. The AI guesses your page speed, invents keyword rankings, and fabricates technical issues. The output looks professional but is completely made up.
We took a different approach. Our system follows one rule:
"Python scripts collect facts. AI only writes prose."
Every number in the final report comes from a CSV or JSON file produced by a Python script that actually crawled the site, checked the HTTP status codes, and parsed the HTML. The AI reads those data files and writes the analysis — but it cannot invent data that isn't there.
The system has 3 layers:
Data Collection
6 Python scripts crawl your site and output CSV/JSON files. Machine-verified HTTP status codes, meta tags, schema, images, broken links.
Live Analytics
3 MCP servers pull real-time data from Google Search Console, Google Analytics 4, and Chrome DevTools. No exports, no screenshots.
Report Generation
AI reads all data files and compiles a professional audit report. Every claim must cite a source file. No hallucinated metrics.
The 12 Skills: Complete Stack
Each skill is a standalone SKILL.md file that you drop into your ~/.claude/skills/ directory. Claude Code picks them up automatically.
Heads up: The skill files are ready to use, but the full system also requires Python 3, a Google Search Console MCP server, a Google Analytics MCP server, and optionally Chrome DevTools MCP for Lighthouse audits. The setup section below walks you through it — expect 30-60 minutes for the initial configuration.
| # | Skill |
|---|---|
| 1 | seo-audit |
| 2 | seo-audit-crawl |
| 3 | seo-audit-meta |
| 4 | seo-audit-schema |
| 5 | seo-audit-images |
| 6 | seo-audit-hreflang |
| 7 | seo-audit-ai-crawlers |
| 8 | seo-audit-gsc |
| 9 | seo-audit-ga |
| 10 | seo-audit-performance |
| 11 | seo-audit-keywords |
| 12 | seo-audit-pagespeed |
| 13 | seo-audit-report |
Skill 1: seo-audit
The main skill that runs everything. One command triggers all 6 Python crawlers in parallel, pulls live analytics from GSC and GA4, then compiles the final report.
Usage:
/seo-audit example.com https://example.com/sitemap.xml What it does:
- Creates a
./reports/crawl-dataoutput directory - Runs all 6 Python crawlers in parallel
- Pulls GSC + GA4 data via MCP servers (if connected)
- Runs Lighthouse audits on key pages (if Chrome DevTools MCP available)
- Reads all CSV/JSON outputs and compiles the report
View full SKILL.md
---
name: seo-audit
description: >
Full website SEO audit with machine-verified data pipeline.
Uses Python scripts for crawling, hreflang, meta extraction,
schema, images, AI crawlers. Then compiles into a structured report.
user-invokable: true
argument-hint: "[domain1] [sitemap1] [domain2] [sitemap2] ..."
allowed-tools:
- Read
- Grep
- Glob
- Bash
- Write
- Agent
---
# Full SEO Audit — Machine-Verified Data Pipeline
## Philosophy
This audit uses Python scripts for all data collection
— NO AI interpretation of page content.
AI is only used for the final report compilation,
and must cite numbers from CSV/JSON data files.
## Process
### Step 1: Setup
mkdir -p ./reports/crawl-data
### Step 2: Machine Data Collection (run in parallel)
1. Crawl & Broken Links
2. Hreflang verification
3. Meta tag extraction
4. Schema/JSON-LD extraction
5. Image alt text check
6. AI crawler access test
### Step 3: Analytics (if MCP available)
- Google Search Console
- Google Analytics 4
### Step 4: Keywords (if CSV available)
### Step 5: Performance (if Chrome DevTools MCP available)
### Step 6: Compile Report
## Scoring Weights
| Category | Weight |
|----------------------|--------|
| Technical SEO | 22% |
| Content Quality | 23% |
| On-Page SEO | 20% |
| Schema | 10% |
| Performance (CWV) | 10% |
| AI Search Readiness | 10% |
| Images | 5% | Skill 2: seo-audit-crawl
Crawls every URL in your sitemap, checks HTTP status codes, and finds all broken internal links. Outputs machine-verified CSVs.
Output files:
- →
{domain}_sitemap_check.csv— HTTP status of every sitemap URL - →
{domain}_broken_links.csv— Every broken link + where it was found - →
{domain}_crawl_summary.json— Crawl statistics
View crawl.py (full script)
#!/usr/bin/env python3
"""
SEO Audit: Site Crawler
Checks all sitemap URLs and crawls pages for broken internal links.
Outputs machine-verified CSV data — no AI interpretation.
Usage: python3 crawl.py <domain> <sitemap_url> <output_dir>
"""
import xml.etree.ElementTree as ET
import urllib.request
import urllib.error
import ssl, sys, csv, time, re, json, os
from html.parser import HTMLParser
from urllib.parse import urlparse, urljoin
class LinkExtractor(HTMLParser):
def __init__(self, base_url):
super().__init__()
self.base_url = base_url
self.links = []
def handle_starttag(self, tag, attrs):
if tag == 'a':
for name, value in attrs:
if name == 'href' and value:
self.links.append(urljoin(self.base_url, value))
def fetch_url(url, timeout=15):
ctx = ssl.create_default_context()
req = urllib.request.Request(url, headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...'
})
try:
resp = urllib.request.urlopen(req, timeout=timeout, context=ctx)
return resp.getcode(), resp.read().decode('utf-8', errors='replace'), resp.geturl()
except urllib.error.HTTPError as e:
return e.code, '', url
except Exception as e:
return 0, '', str(e)
# ... parses sitemap XML recursively
# ... checks every URL for 200 status
# ... crawls all pages for internal links
# ... verifies each internal link
# ... outputs CSV with broken_url, status, found_on Skill 3: seo-audit-meta
Extracts title, meta description, H1, H2s, word count, canonical, and OG tags from every page. Automatically flags issues like missing titles, thin content, and duplicate H1s.
Issues it catches automatically:
View SKILL.md
---
name: seo-audit-meta
description: Machine-verified meta tag extraction. Extracts title,
description, H1, H2, word count, canonical, OG tags from every page.
disable-model-invocation: true
allowed-tools: Bash
argument-hint: "[domain] [sitemap-url] [output-dir]"
---
# SEO Audit: Meta Tag & Content Extraction
python3 ${CLAUDE_SKILL_DIR}/scripts/meta.py $ARGUMENTS
Output:
- {domain}_meta.csv — All meta data per URL
- {domain}_meta_issues.csv — Auto-flagged issues Skill 4: seo-audit-schema
Extracts every JSON-LD structured data block from every page. Identifies schema types (Organization, Product, BreadcrumbList, BlogPosting, FAQPage), counts per page, and parse errors.
View SKILL.md
---
name: seo-audit-schema
description: Machine-verified JSON-LD schema extraction from every page.
disable-model-invocation: true
allowed-tools: Bash
argument-hint: "[domain] [sitemap-url] [output-dir]"
---
Output:
- {domain}_schema.csv — Every JSON-LD block with type and preview
- {domain}_schema_pages.csv — Per-page schema count
- {domain}_schema_summary.json — Type counts and statistics Skill 5: seo-audit-images
Scans every page for images and checks alt text status. Classifies each image as good, empty, or missing alt. Skips tracking pixels, SVGs, and data URIs automatically.
View SKILL.md
---
name: seo-audit-images
description: Machine-verified image alt text audit.
disable-model-invocation: true
allowed-tools: Bash
argument-hint: "[domain] [sitemap-url] [output-dir]"
---
Output:
- {domain}_images.csv — Every image with alt text status
- {domain}_images_summary.csv — Per-page summary
- {domain}_images_stats.json — Overall statistics Skill 6: seo-audit-hreflang
For multilingual sites. Extracts all hreflang tags from every page, then verifies each alternate URL actually returns 200. Catches broken alternates, missing x-default, and redirect loops.
View SKILL.md
---
name: seo-audit-hreflang
description: Machine-verified hreflang extraction and verification.
disable-model-invocation: true
allowed-tools: Bash
argument-hint: "[domain] [sitemap-url] [output-dir]"
---
Output:
- {domain}_hreflang.csv — Every hreflang tag with alternate URL status
- {domain}_hreflang_summary.json — Summary statistics Skill 7: seo-audit-ai-crawlers
Tests whether AI search crawlers can access your site. Sends requests with 9 different user agents (GPTBot, ClaudeBot, PerplexityBot, OAI-SearchBot, Googlebot, Bingbot, and more). Also checks robots.txt directives and llms.txt existence.
Why this matters in 2025+
AI-powered search (Google AI Overviews, ChatGPT search, Perplexity) is growing fast. If your site blocks these crawlers, you're invisible in AI search results. This skill tells you exactly which crawlers can and can't reach you.
View SKILL.md
---
name: seo-audit-ai-crawlers
description: Tests AI search crawler access
(GPTBot, ClaudeBot, PerplexityBot).
disable-model-invocation: true
allowed-tools: Bash
argument-hint: "[url] [output-dir]"
---
Tests 9 user agents + robots.txt + llms.txt
Output:
- {domain}_ai_crawlers.csv — Status code per crawler
- {domain}_ai_crawlers_summary.json — Blocked crawlers list MCP Servers Live Analytics Skills
These skills connect to live data sources via MCP (Model Context Protocol) servers. No manual exports needed.
Skill 8: seo-audit-gsc
Pulls live Google Search Console data: total clicks, impressions, CTR, average position, top queries, top pages, device split, and daily trends. No need to log into GSC and export manually.
Data pulled:
- → Performance overview with daily trend
- → Top queries by clicks
- → Top pages by clicks
- → Which queries each page ranks for
- → Mobile vs desktop performance
View SKILL.md
---
name: seo-audit-gsc
description: Pull Google Search Console data for SEO audit.
disable-model-invocation: true
argument-hint: "[gsc-property] [days]"
---
# SEO Audit: Google Search Console Data Pull
Uses GSC MCP tools:
- mcp__gsc__get_performance_overview
- mcp__gsc__get_search_analytics
Dimensions: query, page, device, country
Property format: sc-domain:example.com Skill 9: seo-audit-ga
Pulls live Google Analytics 4 data: traffic by channel group, top landing pages with engagement metrics, and device category split.
View SKILL.md
---
name: seo-audit-ga
description: Pull Google Analytics 4 data for SEO audit.
disable-model-invocation: true
argument-hint: "[ga4-property-id] [days]"
---
Uses: mcp__analytics-mcp__run_report
Reports:
- Channel: sessions, users, pageviews, bounce rate
- Landing pages: top 20 by sessions
- Device: mobile vs desktop vs tablet Skill 10: seo-audit-performance
Runs Lighthouse audits and performance traces via Chrome DevTools MCP. Gets real Core Web Vitals (LCP, INP, CLS), SEO scores, accessibility scores, and third-party script impact analysis.
View SKILL.md
---
name: seo-audit-performance
description: Run Lighthouse audits and performance traces.
disable-model-invocation: true
argument-hint: "[url1] [url2] [url3] ..."
---
Uses Chrome DevTools MCP:
- mcp__chrome-devtools__lighthouse_audit
- mcp__chrome-devtools__performance_start_trace
- mcp__chrome-devtools__performance_analyze_insight
Flags: LCP > 2500ms, INP > 200ms, CLS > 0.1 Skill 11: seo-audit-keywords
Imports keyword ranking data from CSV exports (Mangools, Ahrefs, SEMrush, or any tool). Groups keywords into semantic clusters, identifies positions 4-10 opportunities, page 2 keywords to push, and content gaps.
View SKILL.md
---
name: seo-audit-keywords
description: Import and analyze keyword ranking data from CSV exports.
disable-model-invocation: true
allowed-tools: Bash, Read, Write, Glob, Grep
argument-hint: "[csv-file-or-directory]"
---
Identifies:
- Keywords at positions 4-10 (push to top 3)
- Keywords at positions 11-20 (push to page 1)
- Keywords at 101+ with high volume (not ranking)
- Wrong page ranking for a keyword Skill 12: seo-audit-pagespeed
Uses the free Google PageSpeed Insights API to get Lighthouse scores and Core Web Vitals for any URL. Tests both mobile and desktop. No MCP server needed — just a free API key from Google Cloud Console.
What it measures:
No MCP required
This skill uses a simple API call — no MCP server setup. Get a free key at Google Cloud Console, paste it in, done.
Skill 13: seo-audit-report
The final step. Reads all CSV/JSON data files and compiles a professional, client-ready HTML audit report. Color-coded severity badges, data tables, executive summary, and prioritized action plan.
Report sections:
How to Set It Up
Being honest: this is not plug-and-play. The skill files themselves are copy-paste ready, but the full system also needs Python 3 installed, MCP servers configured for Google Search Console and Google Analytics, and Google Cloud credentials set up. If you've never worked with MCP servers before, expect 30-60 minutes for the initial setup. The crawl and meta skills work immediately without any MCP configuration — start there.
Install Claude Code + Python 3
npm install -g @anthropic-ai/claude-codePython 3 is needed for the crawler scripts. Most systems have it already — run python3 --version to check.
Drop in the skill folders
Unzip and copy the folders into ~/.claude/skills/. Claude Code picks them up automatically.
~/.claude/skills/
seo-audit/SKILL.md
seo-audit-crawl/SKILL.md
seo-audit-crawl/scripts/crawl.py
seo-audit-meta/SKILL.md
seo-audit-meta/scripts/meta.py
...Run a basic audit (works immediately)
The crawl, meta, schema, images, hreflang, and AI crawler skills work right away — no MCP setup needed. They use Python scripts that crawl your site directly.
claude
> /seo-audit example.com https://example.com/sitemap.xmlAdd MCP servers for live analytics (optional)
For Google Search Console and GA4 data, you need to configure MCP servers. This requires Google Cloud credentials and takes some setup time.
// ~/.claude/settings.json
{
"mcpServers": {
"gsc": {
"command": "npx",
"args": ["-y", "gsc-mcp-server"]
},
"analytics-mcp": {
"command": "npx",
"args": ["-y", "analytics-mcp-server"]
}
}
}Each MCP server has its own setup guide. Chrome DevTools MCP is also optional — used for Lighthouse audits.
Want us to run it for you?
Setting up MCP servers and skills takes time. We already have the system running — we can audit your site and deliver the full report with a walkthrough call.
Same skills, same machine-verified data. We just handle the setup and analysis.