How to Do a Technical SEO Audit with Claude
A full technical SEO audit run by conversation in Claude Desktop: Search Console history and a first-party crawl merged into one prioritised, fix-writing report. The setup, the twelve prompts, the priority model, and the honest limits - walked through on a real site.
A technical SEO audit used to mean a crawler licence, fifteen CSV exports, and a VLOOKUP marathon to join what your site says against what Google did about it. The standard workflow runs to sixty-odd manual recipes, and the real skill was never running them - it was deciding which of the 220 findings deserve a developer's afternoon.
This guide runs the same audit as a conversation. SEO Audit Console is our MCP server (Model Context Protocol - the way Claude talks to outside tools ) that syncs your Google Search Console history, crawls your site itself, and merges the two into one prioritised report that writes its own fixes. Setup is a one-time ten-minute job; the audit itself is a dozen typed prompts. Every number and screenshot below comes from a real property - my own sim racing site - not a demo dataset. If you run SEO for a living, the next section explains why the merge matters more than any individual check; the rest of the article is the walkthrough.
Quick Navigation
What you need |
Why the merge matters |
Pull your data |
Run the audit |
The top five |
Get the fix |
Site health |
What to build next |
AI search |
DataForSEO |
Watch for changes |
Share it |
Gotchas |
Where to go
What you need before you start
- Claude Desktop with the MCP server installed - the repo README has the full install; adding an MCP server to Claude Desktop covers the general shape if it's your first. New to Claude entirely? A free week of Claude Code comes with a new account .
- Node 20 or newer.
- A Google Search Console property you own. The tool audits your sites, not other people's.
- A GSC service account, which is the one fiddly step: you create the service account in Google Cloud, then add its email address as a user on your Search Console property. Miss that second half and
list propertiescomes back empty while everything looks correctly installed. It's the number-one setup support question, so I'll say it twice: the service-account email must be added to the property itself. - About 15 minutes for the first run. Everything runs on your machine - the data lands in a local SQLite file, the scoring model runs locally, and there's no telemetry.
Why the merge is the whole story
A crawler tells you what your site says. Search Console tells you what Google did about it. Almost every audit tool picks one side; the recoverable traffic lives in the join.
Some findings simply cannot exist without both datasets. A page whose title doesn't contain the query it already ranks for - that needs the crawl (the title) and GSC (the query). Ghost pages that earn impressions but no longer exist in your site's link graph. Two pages cannibalising the same term, visible only when you overlay query data on the page inventory. "Discovered, currently not indexed" cross-referenced against what your own crawl found at those URLs. The standard workflow gets you there eventually, by exporting both sides and joining them by hand in a spreadsheet. Here the join is the database schema.
The cannibalisation check is a good example of what a careful join looks like, because the naive version drowns you in false positives. On my property, one page held 59,570 impressions for its term while nine other pages had between one and seven impressions each for the same query. Those nine are incidental long-tail overlap, not competitors, and the thresholds ignore them. The findings that survive are the ones where two pages are splitting a ranking between them.
The chart above is the merge in one picture: internal link equity on one axis, actual traffic on the other. Pages your architecture favours that earn nothing; pages that earn plenty while your architecture buries them. Neither dataset alone can draw it.
Connect and pull your data
Step 1: Check it's connected. In a new Claude Desktop chat:
list properties
Your Search Console properties come back as a list. If yours is missing, it's the service-account step above.
Step 2: Pull the history and crawl the site.
Refresh sc-domain:yoursite.com
One prompt runs the whole acquisition: GSC history sync, a polite first-party crawl, Google's index status for your URLs, and an internal-link-value calculation. Two numbers from my property worth knowing. The first sync pulls your full history and is the slow one - 33 minutes on my site; every refresh after is incremental and took 19 seconds. And the crawl discovers pages from your links, your sitemaps, and your GSC URL inventory together, which on my property lifted coverage from 29% to 70% of the pages Google knows about. That gap is orphan pages - URLs earning impressions that your own navigation no longer reaches - and finding them by default is half the reason for seeding the crawl from GSC in the first place.
The crawl behaves itself: HTTP/2, compression, always GET, and it honours your robots.txt properly (if you have a bot-specific rule group, that replaces the wildcard group, per the spec, rather than stacking on top of it). It never downloads your images or assets.
Run the audit
Step 3: Ask for it.
Run an SEO audit on yoursite.com
Ninety checks run against the merged data - around 38 of them have no equivalent on the standard crawler checklist, because they need the join. What comes back is not 220 findings sorted by a severity colour. Every finding is scored by expected clicks per developer-hour: the traffic at stake, times how much of it the fix should recover, times how certain the evidence is, divided by the effort in hours. A title rewrite that could recover a few thousand clicks outranks a fiddly structural fix that might recover a dozen, whatever a severity scale would say.
One more thing the report is honest about, and in my view it's the feature that builds trust with a client: every check is labelled deterministic or judgement. Deterministic findings are facts - the link is broken, the canonical points at a redirect. Judgement findings are the model's opinion - this page doesn't answer the intent of its top query - and they stay out of the report unless you ask:
Run an SEO audit on yoursite.com and include the judgement findings
An audit that won't distinguish between "this is measurably broken" and "I think this reads wrong" is asking you to defend both with the same confidence. This one doesn't.
Read the top five, not the whole list
Step 4: Work from the top. The discipline the priority model buys you is permission to ignore most of the list.
Each finding carries three things: the evidence (which pages, which queries, which numbers), the traffic at stake, and the fix. Reading one end-to-end looks like this: a finding says a page is ranking well for a query its title never mentions; the evidence lists the query, the position, the impressions against the clicks it's getting; the traffic-at-stake figure says what closing that click-through gap is worth; and the decision is yours - rewrite the title, or decide the mismatch is deliberate and move on. Five of those, properly read, is a morning's plan. You can also pull any single check with its full evidence ("show me every page with a duplicate title"), and "list the checks" prints the whole catalogue.
Ask for the fix, not just the finding
Step 5: Generate the artefact.
Generate the fix for the broken link on /old-page
Write the Product structured data for /widgets
Redirect rules in your server's flavour, a complete JSON-LD block built from the page's own content, or a ranked list of donor pages to add internal links from. This is the step the standard workflow leaves as an exercise: the audit says "301 these", and someone still has to write the map. Here the artefact comes back paste-ready.
Worth being precise about the boundary: it's dry-run only. The tool never touches your site. It hands you the redirect rule; applying it stays your job, which is exactly where I'd want the line drawn on a client property.
Site health: the classic crawler view
Step 6: The familiar diagnostics still exist.
Show me the site health for yoursite.com
Response codes, redirect chains, response times, page weight, heavy images - the view every crawler-driven audit starts from, in one tab.
One honest detail I like in here: the heavy-image check works by sampling headers only. The crawler asks each image how big it is without ever downloading it - your bandwidth bill and your server logs stay clean, and the check still catches the 4MB hero PNG.
What to build next
Step 7: The audit fixes what exists. This finds what's missing.
Suggest new pages for yoursite.com
Real queries from your own GSC data where you rank on page two or lower and no single page owns the topic, proposed as pages with a suggested internal-link donor each. It won't suggest a page you already have.
List the page templates on yoursite.com
The template view groups your pages by structure - most technical faults live at the template level, so one template fix corrects every page built from it. On any site with more than a few dozen pages, this is the difference between a finding that says "137 pages" and a fix that takes an hour.
How AI search reads your pages
Step 8: Score the passages. AI search - Google's AI results, ChatGPT, Perplexity - increasingly retrieves the passage that best answers a question, not the page that best matches keywords.
Score the passages on yoursite.com
The first run downloads a small classifier model, about 25MB, once, and it runs entirely on your machine - your content never leaves it. Because it's a classifier rather than a generative model, it can't hallucinate a score; it measures whether any passage on each ranking page densely answers the page's top query. The classic failure it catches: a product listing ranking for a "how to choose" query with no buying advice anywhere on the page.
Draft the missing content for /your-page
For pages that fail, Claude gets a grounded brief - what the query needs, how the page already writes, which existing passages hold the facts - and drafts the missing passage under instruction to invent nothing. You get a starting draft to edit, not fiction to fact-check. And for the wider question of whether your site is legible to AI agents at all:
Check agent readiness for yoursite.com
A 0-100 score across discoverability, content structure, bot access and capability files, with paste-ready fixes for what's missing. I've written before about how generative engines read content - this folds that lens into the same audit.
Going outward with DataForSEO
Step 9: Everything so far used only your own data. Search Console has a blind spot, though: it only describes searches where you already appear. It can't tell you how big a market is, or what your competitors rank for where you're absent entirely. That's what a DataForSEO account adds, and it's the one optional paid piece:
What's the search volume for "sim racing cockpit"?
What do my competitors rank for that I don't?
That second prompt is the content gap, and combined with the suggest-pages step you have a fairly complete picture of what to write next: demand you're near, plus demand you're missing. Cost-wise it's pay-as-you-go at fractions of a cent per call, responses are cached for 20 days, and the API is only ever called when you ask a question that needs it - a few dollars a month in normal use, in my experience. I use the same account across the DataForSEO MCP for general keyword work.
One subscription gotcha worth knowing before you buy: DataForSEO's Backlinks API is a separate subscription from the SERP, Keywords and Labs APIs. The backlink tools (including the usefully morbid check that each linked page still resolves - a backlink pointing at your 404 is equity you've already earned and are throwing away) will tell you if your account lacks it.
Watch for changes
Step 10: The migration-insurance prompt. Once you've refreshed on two different days:
Detect changes on yoursite.com
It diffs your two most recent crawls: pages that started 404ing, titles that changed, canonicals that flipped, structured data that vanished. This is how you catch a bad deploy within a day rather than three weeks later in your traffic graph.
The freshness checks carry my favourite honesty beat in the whole product. Sitemap lastmod values get lie-detected against reality, and a conditional-request probe checks whether your server honours If-Modified-Since. Mine doesn't: my site sends a Last-Modified header and then returns a full 200 anyway, never a 304. The audit flagged my own site for it. Findings like that are why I trust the rest of the report.
Share the report
Step 11: Export it.
Export the report for yoursite.com
A single self-contained HTML file - dashboard, findings, evidence - that opens in any browser. The person you send it to installs nothing. Between refreshes, the dashboard side of my GSC tooling covers the day-to-day numbers; the export is the client-facing deliverable.
Gotchas
list propertiesreturns nothing - the service-account email isn't added as a user on the GSC property, or Claude Desktop needs a full restart (quit from the tray, not the window close).- "No data" from the audit - the refresh has to finish first. Big first sync is normal; incremental refreshes are seconds.
- A large site's first crawl feels slow - it backs off automatically when your server is busy. Let it finish; you don't have to watch.
- A keyword or backlink prompt asks for credentials - those are the optional DataForSEO tools. Steps 1-8 need no external account. Backlinks specifically needs DataForSEO's separate Backlinks subscription.
- Judgement findings missing - they're off by default, by design. Ask for them explicitly.
Where to go from here
Fix your top three findings, refresh, and run the audit again - watching a finding drop off the list is the feedback loop that makes the routine stick. Mine is: refresh weekly, detect changes straight after, full audit monthly, re-run after any fix ships.
The repo has the install, the full 90-check catalogue and the licence terms (source-available: free for personal use and evaluation, commercial licence for agency and client work, and each release becomes Apache 2.0 after three years). If you want the same conversational pattern for pure Search Console analysis without the crawl, that's Better Search Console ; the crawler side began life as an open-source SEO crawler for LLM consumption , and this product is what happened when the two datasets finally met in one database. If you'd rather we ran this discipline for you, that's a conversation .
Continue reading.
Claude Code API Key Security: A Guide to Token Hygiene
The simplest possible setup that keeps your production tokens out of AI chat windows. 1Password CLI, op run, and the conversational discipline that makes the rest of it work.
Swapping the Engine: How to Run Claude Code on Local Silicon for Zero Pennies
Claude Code's real power isn't the Anthropic model sitting behind it, it's the agentic : the file-system access, the tool use, the way it chains tasks together without you babysitting every step. I figured this out the expensive way. I ran…
A Beginner's Guide to Claude Computer Use
I've been letting Claude control my mouse and keyboard on and off to test this feature for a little while, and the honest answer is that it's simultaneously the most impressive and most frustrating AI feature I've used. It can navigate…