← Back to Blog Behind the Scenes

How I used Claude Code to take my site from SEO score 68 to 98

The site was static HTML. No framework, no CMS, no build pipeline. Just index.html, styles.css, and main.js living in a folder on my machine. I built it myself using Claude Code because I wanted to own every line of it.

The SEO audit score was 68.5.

That felt low. I'd put real thought into the copy and the structure. What I hadn't thought about was everything underneath the visible content. The images, the schema markup, the meta tags. The things crawlers care about that visitors never see.

Claude Code didn't fix that magically. It fixed it methodically, one specific task at a time. Here's exactly what happened.

Where 68 actually comes from

An SEO score doesn't fail on one thing. It fails across everything at once, weighted differently by category.

My images scored 25 out of 100. That was the worst single category. The logo file I'd been serving was 3,125 x 1,875 pixels on every page load. Every other image on the site was PNG or JPG, uncompressed, with no lazy loading, no explicit dimensions, and no WebP conversion. The browser was doing work it had no reason to do.

Schema and structured data scored 51. I had some basic markup but it wasn't wired up properly. Entities weren't cross-referenced. Five named testimonials existed on the homepage with no Review schemas. The FAQ section I'd built had no FAQPage markup at all.

Performance scored 62. CSS and JavaScript were unminified. Fonts weren't preloaded. Images were loading without explicit dimensions, causing layout shifts. None of this is obvious when you're looking at the site in a browser. It only shows up under measurement.

What Claude Code actually is

Worth being clear about this: Claude Code is not an SEO tool. It's a coding environment you talk to in plain language. I described a problem, it wrote the fix, I reviewed it, and we moved on.

What makes it useful for SEO work is that most SEO fixes are not intellectually interesting. Converting every image to WebP. Adding loading="lazy" and width/height attributes to every image tag. Adding srcset for mobile variants. None of that requires expertise. All of it takes time if you're doing it manually and don't know the exact syntax.

I'm not a developer. I didn't come up in engineering. But I can read code well enough to review what Claude Code produces, and I can describe what I need precisely enough for it to produce something accurate. That combination works for a project like this.

Images: 25 to 90

The image category went from 25 to 90. That's the biggest single gain in the audit, and it came from fixes that were straightforward once I knew they existed.

Every image on the site got converted to WebP. Total image file size dropped from 12MB to 1.9MB, an 84% reduction. The original PNG and JPG files still exist but nothing in the HTML references them anymore.

Then: loading="lazy" on every below-the-fold image, explicit width and height attributes on every image tag, and srcset attributes pointing to mobile-sized variants for the proof screenshots and recommendation headshots. The logo got replaced with a 300 x 180 version. The previous version was 3,125 pixels wide. For a logo in a navigation bar.

These changes took one session to execute across the entire site, including the blog listing page and every individual article. Without Claude Code I would have done it for the homepage and called it done.

Schema: 51 to 90

Schema is one of those things that either works properly or doesn't. Mine wasn't working properly, and I didn't know it until the audit told me.

The fix had three parts. First, replacing isolated schema blocks with a single @graph array where every entity references every other entity by @id. An Organization, a Person, a WebSite, and a Service, all cross-referenced rather than sitting in the page as disconnected blocks.

Second, adding five Review schemas to the Service entity. I had named testimonials on the homepage. Structured data lets search engines understand those as actual reviews on an actual service. They'd been sitting there unmarked since the site launched.

Third, FAQPage schema on the FAQ section. The accordion was live and working for visitors. The machine-readable layer for search engines wasn't. Those are two completely separate things, and it's easy to think you've done both when you've only done one.

Schema went from 51 to 90. That +39 was the second-biggest gain in the audit.

Performance: 62 to 88

Core Web Vitals are a direct ranking factor. My site was losing points on several of them.

CSS and JavaScript were minified. The combined file size dropped from 45KB to 29KB. Font preloading was added for the Lato woff2 files on every page so the browser fetches the font before it needs to render text. Images got explicit dimensions so layout doesn't shift while they load.

One fix was specific to the hero animation on the homepage: a forced reflow issue in the flight path resize function where DOM reads and writes were interleaved. The browser was recalculating layout multiple times per resize event. Batching the reads before the writes resolved it.

I wouldn't have found that without Claude Code explaining what it was looking for. I described the symptom, it identified the cause, we fixed it. Performance went from 62 to 88.

AI search readiness: 62 to 85

This category covers how visible and citable the site is to AI search engines, including ChatGPT, Perplexity, and Google's AI Overviews. It's the newest category in any SEO audit and the one with the least settled guidance.

One of the fixes here is a file called llms.txt. It's a plain-text document at the root of the domain that gives AI crawlers a structured summary of the business and the site's content. Whether it directly improves citations is still an open question. But it costs nothing to include, and it's a clear signal that the site was built with AI crawlers in mind.

The combination of llms.txt, the expanded schema cross-references, and the blog content all contributed to this category going from 62 to 85.

Blog content: 72 to 85

The content quality category covers E-E-A-T: Experience, Expertise, Authoritativeness, Trustworthiness.

I wrote ten blog articles targeting keyword gaps. Every topic was one I have direct experience with: founder-led content, LinkedIn strategy, ghostwriting versus content systems, the ROI of a personal brand. Each article has Article schema with author and publisher references pointing back to the same entities in the main schema graph.

The articles exist because the topics are real and I have things to say about them. But they also serve a structural purpose. Each one is a page matching a search intent, with a canonical URL and linkable content to point at. The site previously had none of that.

Content quality went from 72 to 85. The remaining gap is case studies with real client data. That takes longer than two weeks to produce.

Where I still had to think

Claude Code handles execution. It doesn't handle strategy.

Deciding which keyword clusters to target, which testimonials to mark up as Review schemas, which FAQ items to include, what to put in llms.txt. All of those were judgment calls. Claude Code had no opinion on whether my positioning was right or whether a particular testimonial accurately reflected the service.

The schema cross-references also needed manual checking. When you're building a graph of entities that reference each other by @id, a single wrong URL string breaks the connection. I checked every reference before pushing to production.

The other thing Claude Code can't help with is that three of the remaining gaps are time-gated. Case studies require client results. Backlinks accumulate from published content over months, not sessions. The legal notice page is blocked on business registration. No code change unblocks any of those.

68 to 98, honestly

The overall score went from 68.5 on March 17 to 98-100 by March 30. Two weeks. But the effort was not evenly distributed.

The first twenty points came from images, schema, and performance. Those categories were clearly broken and fixable in a single session. The next ten points required writing ten blog articles, fixing edge cases in schema markup, and making judgment calls about content quality signals. The last ten points are still open, blocked on things that exist outside the codebase.

If you've built your own site with a tool like Claude Code and you haven't run an SEO audit on it, run one. The gaps are almost certainly in the same places mine were. Images, schema, and missing basics that are completely invisible until you measure them.

Getting from 68 to 88 takes a session. Getting from 88 to 98 takes content and authority, and those don't compress.

Want to build a site that works as hard as you do?

One hour. We'll look at your setup and figure out where the gaps are.

Book a Call